Best practices voor gelijktijdigheid van Linux voor Azure NetApp Files - Sessiesites en vermeldingen in sitetabellen
Dit artikel helpt u inzicht te hebben in best practices voor gelijktijdigheid voor sessiesites en sitetabelvermeldingen van het Azure NetApp Files NFS-protocol.
NFSv3
NFSv3 heeft geen mechanisme om te onderhandelen over gelijktijdigheid tussen de client en de server. De client en de server definiëren de limiet ervan zonder de andere te raadplegen. Voor de beste prestaties moet u het maximum aantal vermeldingen in de sitetabel aan de clientzijde sunrpc
afstemmen met die worden ondersteund zonder pushback op de server. Wanneer een client de mogelijkheid van de servernetwerkstack om een workload te verwerken overweldigt, reageert de server door de venstergrootte voor de verbinding te verlagen. Dit is geen ideaal prestatiescenario.
Standaard definiëren moderne Linux-kernels de invoergrootte sunrpc.tcp_max_slot_table_entries
per verbindingssitetabel sunrpc
als ondersteuning voor 65.536 openstaande bewerkingen, zoals wordt weergegeven in de volgende tabel.
Azure NetApp Files NFSv3-server Maximale uitvoeringscontexten per verbinding |
Linux-client Standaard maximum sunrpc aantal items in sitetabellen per verbinding |
---|---|
128 | 65.536 |
Deze sitetabelvermeldingen definiëren de limieten voor gelijktijdigheid. Waarden die dit hoog zijn, zijn niet nodig. Als u bijvoorbeeld een wachtrijtheorie gebruikt die Littles Law wordt genoemd, zult u merken dat de I/O-snelheid wordt bepaald door gelijktijdigheid (dat wil zeggen openstaande I/O) en latentie. Als zodanig bewijst het algoritme dat 65.536 sleuven een hogere orde hebben dan wat nodig is om zelfs zeer veeleisende workloads te stimuleren.
Littles Law: (concurrency = operation rate × latency in seconds)
Een gelijktijdigheidsniveau van maximaal 155 is voldoende om 155.000 Oracle DB NFS-bewerkingen per seconde te bereiken met oracle Direct NFS, wat een technologie is die vergelijkbaar is met de nconnect
koppeloptie:
- Gezien een latentie van 0,5 ms is een gelijktijdigheid van 55 nodig om 110.000 IOPS te bereiken.
- Gezien een latentie van 1 ms is een gelijktijdigheid van 155 nodig om 155.000 IOPS te bereiken.
Zie de prestaties van Oracle-databases in enkele volumes van Azure NetApp Files voor meer informatie.
De sunrpc.tcp_max_slot_table_entries
kan geen afstemmingsparameter op verbindingsniveau zijn. Als best practice stelt u deze waarde in op 128 of minder per verbinding en overschrijdt u de omgeving van 10.000 sleuven niet.
Voorbeelden van aantal sleufen op basis van aanbeveling voor gelijktijdigheid
Voorbeelden in deze sectie laten het aantal site's zien op basis van de aanbeveling voor gelijktijdigheid.
Voorbeeld 1: één NFS-client, 65.536 sunrpc.tcp_max_slot_table_entries
en nee nconnect
voor een maximale gelijktijdigheid van 128 op basis van de limiet aan de serverzijde van 128
Voorbeeld 1 is gebaseerd op één clientworkload met de standaardwaarde sunrpc.tcp_max_slot_table_entry
65.536 en één netwerkverbinding, dus nee nconnect
. In dit geval is een gelijktijdigheid van 128 haalbaar.
NFS_Server=10.10.10.10, NFS_Client=10.10.10.11
Connection (10.10.10.10:2049, 10.10.10.11:6543,TCP
)- De client kan in theorie niet meer dan 65.536 aanvragen verzenden naar de server per verbinding.
- De server accepteert niet meer dan 128 aanvragen tijdens de vlucht vanaf deze enkele verbinding.
Voorbeeld 2: één NFS-client, 128 sunrpc.tcp_max_slot_table_entries
en nee nconnect
voor een maximale gelijktijdigheid van 128
Voorbeeld 2 is gebaseerd op één clientworkload met een sunrpc.tcp_max_slot_table_entry
waarde van 128, maar zonder de koppelingsoptie nconnect
. Met deze instelling is een gelijktijdigheid van 128 mogelijk vanaf één netwerkverbinding.
NFS_Server=10.10.10.10, NFS_Client=10.10.10.11
Connection (10.10.10.10:2049, 10.10.10.11:6543,TCP)
- De client zal niet meer dan 128 aanvragen verzenden tijdens de vlucht naar de server per verbinding.
- De server accepteert niet meer dan 128 aanvragen tijdens de vlucht vanaf deze enkele verbinding.
Voorbeeld 3: één NFS-client, 100 sunrpc.tcp_max_slot_table_entries
en nconnect=8
voor een maximale gelijktijdigheid van 800
Voorbeeld 3 is gebaseerd op één clientworkload, maar met een lagere sunrpc.tcp_max_slot_table_entry
waarde van 100. Deze keer is de nconnect=8
koppelingsoptie gebruikt voor het spreiden van de workload over 8 verbindingen. Met deze instelling is een gelijktijdigheid van 800 haalbaar over de 8 verbindingen. Dit bedrag is de gelijktijdigheid die nodig is om 400.000 IOPS te bereiken.
NFS_Server=10.10.10.10, NFS_Client=10.10.10.11
Connection 1 (10.10.10.10:2049, 10.10.10.11:6543,TCP), Connection 2 (10.10.10.10:2049, 10.10.10.11:6454,TCP)… Connection 8 (10.10.10.10:2049, 10.10.10.11:7321,TCP)
- Verbinding maken ion 1
- De client zal niet meer dan 100 aanvragen uitgeven tijdens de vlucht naar de server vanaf deze verbinding.
- De server accepteert naar verwachting niet meer dan 128 aanvragen tijdens de vlucht van de client voor deze verbinding.
- Verbinding maken ion 2
- De client zal niet meer dan 100 aanvragen uitgeven tijdens de vlucht naar de server vanaf deze verbinding.
- De server accepteert naar verwachting niet meer dan 128 aanvragen tijdens de vlucht van de client voor deze verbinding.
…
…
- Verbinding maken ion 8
- De client zal niet meer dan 100 aanvragen uitgeven tijdens de vlucht naar de server vanaf deze verbinding.
- De server accepteert naar verwachting niet meer dan 128 aanvragen tijdens de vlucht van de client voor deze verbinding.
Voorbeeld 4 – 250 NFS-clients, 8 sunrpc.tcp_max_slot_table_entries
en nee nconnect
voor een maximale gelijktijdigheid van 2000
Voorbeeld 4 gebruikt de gereduceerde waarde per client sunrpc.tcp_max_slot_table_entry
van 8 voor een EDA-omgeving met 250 machines. In dit scenario wordt een gelijktijdigheid van 2000 omgeving bereikt, een waarde die meer dan voldoende is om 4000 MiB/s van een back-end-EDA-workload te stimuleren.
NFS_Server=10.10.10.10, NFS_Client1=10.10.10.11
Connection (10.10.10.10:2049, 10.10.10.11:6543,TCP)
- De client geeft niet meer dan 8 aanvragen tijdens de vlucht naar de server per verbinding uit.
- De server accepteert niet meer dan 128 aanvragen tijdens de vlucht vanaf deze enkele verbinding.
NFS_Server=10.10.10.10, NFS_Client2=10.10.10.12
Connection (10.10.10.10:2049, 10.10.10.12:7820,TCP)
- De client geeft niet meer dan 8 aanvragen tijdens de vlucht naar de server per verbinding uit.
- De server accepteert niet meer dan 128 aanvragen tijdens de vlucht vanaf deze enkele verbinding.
…
…
NFS_Server=10.10.10.10, NFS_Client250=10.10.11.13
Connection (10.10.10.10:2049, 10.10.11.13:4320,TCP)
- De client geeft niet meer dan 8 aanvragen tijdens de vlucht naar de server per verbinding uit.
- De server accepteert niet meer dan 128 aanvragen tijdens de vlucht vanaf deze enkele verbinding.
Wanneer u NFSv3 gebruikt, moet u het aantal opslageindpunten gezamenlijk op 10.000 of minder houden. U kunt het beste de waarde per verbinding instellen voor sunrpc.tcp_max_slot_table_entries
minder dan 128 wanneer een toepassing wordt uitgeschaald over veel netwerkverbindingen (nconnect
en HPC in het algemeen en EDA in het bijzonder).
Het beste berekenen sunrpc.tcp_max_slot_table_entries
Met Littles Law kunt u het totale aantal vereiste sitetabelvermeldingen berekenen. Houd in het algemeen rekening met de volgende factoren:
- Workloads uitschalen zijn vaak dominant groot sequentiële aard.
- Databaseworkloads, met name OLTP, zijn vaak willekeurig van aard.
In de volgende tabel ziet u een voorbeeldstudie van gelijktijdigheid met willekeurige latenties die zijn opgegeven:
I/O-grootte | Latentie | I/O of doorvoer | Gelijktijdigheid |
---|---|---|---|
8 KiB | 0,5 ms | 110.000 IOPS | 859 MiB/s | 55 |
8 KiB | 2 ms | 400.000 IOPS | 3.125 MiB/s | 800 |
256 KiB | 2 ms | 16.000 IOPS | 4000 MiB/s | 32 |
256 KiB | 4 ms | 32.000 IOPS | 8.000 MiB/s | 128 |
Gelijktijdigheidsinstellingen berekenen op aantal verbindingen
Als de werkbelasting bijvoorbeeld een EDA-farm is en 1.250 clients alle werkbelasting naar hetzelfde opslageindpunt (een opslageindpunt is een IP-adres voor opslag), berekent u de vereiste I/O-snelheid en verdeelt u de gelijktijdigheid over de farm.
Stel dat de workload 4000 MiB/s is met een gemiddelde bewerkingsgrootte van 256-KiB en een gemiddelde latentie van 10 ms. Gebruik de volgende formule om gelijktijdigheid te berekenen:
(concurrency = operation rate × latency in seconds)
De berekening wordt omgezet in een gelijktijdigheid van 160:
(160 = 16,000 × 0.010)
Gezien de behoefte aan 1.250 clients, kunt u veilig instellen sunrpc.tcp_max_slot_table_entries
op 2 per client om de 4000 MiB/s te bereiken. U kunt echter besluiten om extra ruimte in te bouwen door het aantal per client in te stellen op 4 of zelfs 8, waardoor het 10.000 aanbevolen slot plafond goed blijft.
Instellen sunrpc.tcp_max_slot_table_entries
op de client
- Toevoegen
sunrpc.tcp_max_slot_table_entries=<n>
aan het/etc/sysctl.conf
configuratiebestand.
Als tijdens het afstemmen een waarde lager dan 128 wordt gevonden, vervangt u 128 door het juiste getal. - Voer de volgende opdracht uit:
$ sysctl -p
- Koppel alle NFS-bestandssystemen (of koppel deze opnieuw), omdat het niet mogelijk is alleen van toepassing op koppelingen die zijn gemaakt nadat de NFS-bestand niet is ingesteld.
NFSv4.1
In NFSv4.1 definiëren sessies de relatie tussen de client en de server. Of de gekoppelde NFS-bestandssystemen boven op één verbinding of veel (zoals het geval nconnect
is), de regels voor de sessie van toepassing zijn. Bij het instellen van de sessie onderhandelt de client en de server over het maximum aantal aanvragen voor de sessie, met de lagere van de twee ondersteunde waarden. Azure NetApp Files ondersteunt 180 openstaande aanvragen en Linux-clients zijn standaard ingesteld op 64. In de volgende tabel ziet u de sessielimieten:
Azure NetApp Files NFSv4.1-server Maximum aantal opdrachten per sessie |
Linux-client Standaard maximum aantal opdrachten per sessie |
Onderhandelde maximumopdrachten voor de sessie |
---|---|---|
180 | 64 | 64 |
Hoewel Linux-clients standaard 64 maximumaanvragen per sessie hebben, kan de waarde niet max_session_slots
worden uitgevoerd. Opnieuw opstarten is vereist om wijzigingen van kracht te laten worden. Gebruik de systool -v -m nfs
opdracht om het huidige maximum te zien dat door de client wordt gebruikt. De opdracht werkt alleen als er ten minste één NFSv4.1-koppeling aanwezig is:
$ systool -v -m nfs
{
Module = "nfs"
...
Parameters:
...
max_session_slots = "64"
...
}
Als u wilt afstemmen max_session_slots
, maakt u een configuratiebestand onder /etc/modprobe.d
als zodanig. Zorg ervoor dat er geen aanhalingstekens aanwezig zijn voor de regel in het bestand. Anders wordt de optie niet van kracht.
$ sudo echo “options nfs max_session_slots=180” > /etc/modprobe.d/nfsclient.conf
$ sudo reboot
Azure NetApp Files beperkt elke sessie tot maximaal 180 opdrachten. Overweeg daarom 180 de maximumwaarde die momenteel kan worden geconfigureerd. De client kan geen gelijktijdigheid bereiken die groter is dan 128, tenzij de sessie is verdeeld over meer dan één verbinding, omdat Azure NetApp Files elke verbinding beperkt tot maximaal 128 maximaal NFS-opdrachten. Als u meer dan één verbinding wilt, wordt de nconnect
koppelingsoptie aanbevolen en is een waarde van twee of meer vereist.
Voorbeelden van verwachte gelijktijdigheidslimieten
In deze sectie ziet u de verwachte gelijktijdigheidslimieten.
Voorbeeld 1 – 64 max_session_slots
en nee nconnect
Voorbeeld 1 is gebaseerd op de standaardinstelling van 64 max_session_slots
en nee nconnect
. Met deze instelling is een gelijktijdigheid van 64 mogelijk, allemaal vanuit één netwerkverbinding.
NFS_Server=10.10.10.10, NFS_Client=10.10.10.11
Connection (10.10.10.10:2049, 10.10.10.11:6543,TCP)
- De client zal niet meer dan 64 aanvragen uitgeven tijdens de vlucht naar de server voor de sessie.
- De server accepteert niet meer dan 64 aanvragen tijdens de vlucht van de client voor de sessie. (64 is de onderhandelde waarde.)
Voorbeeld 2 – 64 max_session_slots
en nconnect=2
Voorbeeld 2 is gebaseerd op maximaal 64 session_slots
, maar met de toegevoegde koppeloptie van nconnect=2
. Een gelijktijdigheid van 64 is haalbaar, maar verdeeld over twee verbindingen. Hoewel meerdere verbindingen in dit scenario geen grotere gelijktijdigheid opleveren, heeft de verminderde wachtrijdiepte per verbinding een positieve invloed op de latentie.
Met de max_session_slots
nog steeds op 64 maar nconnect=2
, ziet u dat het maximum aantal aanvragen wordt verdeeld over de verbindingen.
NFS_Server=10.10.10.10, NFS_Client=10.10.10.11
Connection 1 (10.10.10.10:2049, 10.10.10.11:6543,TCP) && Connection 2 (10.10.10.10:2049, 10.10.10.11:6454,TCP)
- Verbinding maken ion 1
- De client zal niet meer dan 32 aanvragen verzenden tijdens de vlucht naar de server vanaf deze verbinding.
- De server accepteert naar verwachting niet meer dan 32 aanvragen tijdens de vlucht van de client voor deze verbinding.
- Verbinding maken ion 2
- De client zal niet meer dan 32 aanvragen verzenden tijdens de vlucht naar de server vanaf deze verbinding.
- De server accepteert naar verwachting niet meer dan 32 aanvragen tijdens de vlucht van de client voor deze verbinding.
Voorbeeld 3 – 180 max_session_slots
en nee nconnect
In voorbeeld 3 wordt de nconnect
koppeloptie verwijderd en wordt de max_session_slots
waarde ingesteld op 180, die overeenkomt met de maximale gelijktijdigheid van NFSv4.1 van de server. In dit scenario, met slechts één verbinding en gezien de Maximale openstaande bewerking van Azure NetApp Files 128 per NFS-verbinding, is de sessie beperkt tot 128 bewerkingen tijdens de vlucht.
Hoewel max_session_slots
deze is ingesteld op 180, is de enkele netwerkverbinding beperkt tot maximaal 128 aanvragen als volgt:
NFS_Server=10.10.10.10, NFS_Client=10.10.10.11
Connection (10.10.10.10:2049, 10.10.10.11:6543,TCP)
- De client zal niet meer dan 180 aanvragen uitgeven tijdens de vlucht naar de server voor de sessie.
- De server accepteert niet meer dan 180 aanvragen tijdens de vlucht van de client voor de sessie.
- De server accepteert niet meer dan 128 aanvragen tijdens de vlucht voor de enkele verbinding.
Voorbeeld 4 – 180 max_session_slots
en nconnect=2
In voorbeeld 4 wordt de nconnect=2
koppelingsoptie toegevoegd en wordt de waarde 180 max_session_slots
opnieuw gebruikt. Omdat de totale workload is verdeeld over twee verbindingen, zijn er 180 openstaande bewerkingen mogelijk.
Met twee verbindingen die worden afgespeeld, ondersteunt de sessie de volledige toewijzing van 180 openstaande aanvragen.
NFS_Server=10.10.10.10, NFS_Client=10.10.10.11
Connection 1 (10.10.10.10:2049, 10.10.10.11:6543,TCP) && Connection 2 (10.10.10.10:2049, 10.10.10.11:6454,TCP)
- Verbinding maken ion 1
- De client onderhoudt naar verwachting niet meer dan 90 aanvragen tijdens de vlucht naar de server vanaf de verbinding.
- De server zal naar verwachting niet meer dan 90 aanvragen tijdens de vlucht van de client onderhouden voor deze verbinding binnen de sessie.
- Verbinding maken ion 2
- De client onderhoudt naar verwachting niet meer dan 90 aanvragen tijdens de vlucht naar de server vanaf de verbinding.
- De server zal naar verwachting niet meer dan 90 aanvragen tijdens de vlucht van de client onderhouden voor deze verbinding binnen de sessie.
Notitie
Stel voor maximale gelijktijdigheid max_session_slots
gelijk aan 180 in. Dit is de maximale gelijktijdigheid op sessieniveau die momenteel wordt ondersteund door Azure NetApp Files.
Controleren op de maximaal openstaande aanvragen voor de sessie
Als u de session_slot
grootten wilt zien die door de client en server worden ondersteund, legt u de koppelingsopdracht vast in een pakkettracering. Zoek naar het CREATE_SESSION
gesprek en CREATE_SESSION
antwoord, zoals wordt weergegeven in het volgende voorbeeld. De aanroep is afkomstig van de client en het antwoord is afkomstig van de server.
Gebruik de volgende tcpdump
opdracht om de koppelingsopdracht vast te leggen:
$ tcpdump -i eth0 -s 900 -w /tmp/write.trc port 2049
Met Wireshark zijn de interessante pakketten als volgt:
Bekijk binnen deze twee pakketten het max_reqs
veld in de middelste sectie van het traceringsbestand.
- Network File System
- Operations
Opcode
csa_fore_channel_attrs
max reqs
- Operations
Pakket 12 (maximaal clientaanvragen) geeft aan dat de client een max_session_slots
waarde van 64 had. In de volgende sectie ziet u dat de server ondersteuning biedt voor gelijktijdigheid van 180 voor de sessie. De sessie onderhandelt uiteindelijk over de lagere van de twee opgegeven waarden.
In het volgende voorbeeld ziet u Pakket 14 (maximaal serveraanvragen):
Volgende stappen
- Aanbevolen procedures voor directe I/O voor Linux voor Azure NetApp Files
- Aanbevolen procedures voor cache van Linux-bestandssysteem voor Azure NetApp Files
- Aanbevolen procedures voor koppelen in Linux NFS voor Azure NetApp Files
- Aanbevolen procedures voor lezen in Linux NFS
- Best practices voor virtuele Azure-machine-SKU's
- Prestatiebenchmarks voor Linux