Dela via


Metodtips för Samtidighet i Linux för Azure NetApp Files – Sessionsfack och poster i facktabeller

Den här artikeln hjälper dig att förstå metodtips för samtidighet för sessionsfack och facktabellposter i Azure NetApp Files NFS-protokoll.

NFSv3

NFSv3 har ingen mekanism för att förhandla om samtidighet mellan klienten och servern. Klienten och servern definierar var och en sin gräns utan att rådfråga den andra. För bästa prestanda bör du rada upp det maximala antalet posterna för facktabeller på klientsidan sunrpc med det som stöds utan pushback på servern. När en klient överbelastar serverns nätverksstacks förmåga att bearbeta en arbetsbelastning svarar servern genom att minska fönsterstorleken för anslutningen, vilket inte är ett idealiskt prestandascenario.

Som standard definierar moderna Linux-kernels poststorleken sunrpc.tcp_max_slot_table_entries per anslutningsplatstabell sunrpc som stöd för 65 536 utestående åtgärder, vilket visas i följande tabell.

Azure NetApp Files NFSv3-server
Maximalt antal körningskontexter per anslutning
Linux-klient
Maximalt antal sunrpc posterna i facktabellen per anslutning
128 65 536

Dessa posterna i facktabellen definierar gränserna för samtidighet. Värden som är så här höga är onödiga. Om du till exempel använder en köteori som kallas Littles Law ser du att I/O-frekvensen bestäms av samtidighet (det vill säga utestående I/O) och svarstid. Därför visar algoritmen att 65 536 platser är större än vad som behövs för att driva även extremt krävande arbetsbelastningar.

Littles Law: (concurrency = operation rate × latency in seconds)

En samtidighetsnivå så låg som 155 räcker för att uppnå 155 000 Oracle DB NFS-åtgärder per sekund med Oracle Direct NFS, vilket är en teknik som liknar monteringsalternativet nconnect :

  • Med en svarstid på 0,5 ms krävs en samtidighet på 55 för att uppnå 110 000 IOPS.
  • Med tanke på en svarstid på 1 ms krävs en samtidighet på 155 för att uppnå 155 000 IOPS.

Oracle DNFS latency curve

Mer information finns i Oracle-databasprestanda på enskilda Azure NetApp Files-volymer .

Tunable sunrpc.tcp_max_slot_table_entries är en justeringsparameter på anslutningsnivå. Vi rekommenderar att du anger det här värdet till 128 eller mindre per anslutning, vilket inte överstiger 10 000 platser i hela miljön.

Exempel på antal fack baserat på samtidighetsrekommendering

Exempel i det här avsnittet visar antalet fack baserat på rekommendationen samtidighet.

Exempel 1 – En NFS-klient, 65 536 sunrpc.tcp_max_slot_table_entriesoch nej nconnect för maximal samtidighet på 128 baserat på gränsen på 128 på serversidan

Exempel 1 baseras på en enskild klientarbetsbelastning med standardvärdet sunrpc.tcp_max_slot_table_entry 65 536 och en enda nätverksanslutning, det vill säga nej nconnect. I det här fallet kan en samtidighet på 128 uppnås.

  • NFS_Server=10.10.10.10, NFS_Client=10.10.10.11
    • Connection (10.10.10.10:2049, 10.10.10.11:6543,TCP)
      • Klienten kan i teorin inte utfärda fler än 65 536 begäranden under flygning till servern per anslutning.
      • Servern accepterar inte fler än 128 begäranden under flygning från den här enda anslutningen.

Exempel 2 – En NFS-klient, 128 sunrpc.tcp_max_slot_table_entries, och nej nconnect för en maximal samtidighet på 128

Exempel 2 baseras på en enskild klientarbetsbelastning med värdet sunrpc.tcp_max_slot_table_entry 128, men utan monteringsalternativet nconnect . Med den här inställningen kan en samtidighet på 128 uppnås från en enda nätverksanslutning.

  • NFS_Server=10.10.10.10, NFS_Client=10.10.10.11
    • Connection (10.10.10.10:2049, 10.10.10.11:6543,TCP)
      • Klienten utfärdar högst 128 begäranden under flygning till servern per anslutning.
      • Servern accepterar inte fler än 128 begäranden under flygning från den här enda anslutningen.

Exempel 3 – En NFS-klient, 100 sunrpc.tcp_max_slot_table_entries, och nconnect=8 för en maximal samtidighet på 800

Exempel 3 baseras på en enskild klientarbetsbelastning, men med ett lägre sunrpc.tcp_max_slot_table_entry värde på 100. Den här gången användes monteringsalternativet nconnect=8 för att sprida arbetsbelastningen över 8 anslutningar. Med den här inställningen är en samtidighet på 800 uppnåelig spridning över de 8 anslutningarna. Det här beloppet är den samtidighet som krävs för att uppnå 400 000 IOPS.

  • 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)
    • Anslut ion 1
      • Klienten utfärdar högst 100 begäranden under flygning till servern från den här anslutningen.
      • Servern förväntas inte acceptera fler än 128 begäranden under flygning från klienten för den här anslutningen.
    • Anslut ion 2
      • Klienten utfärdar högst 100 begäranden under flygning till servern från den här anslutningen.
      • Servern förväntas inte acceptera fler än 128 begäranden under flygning från klienten för den här anslutningen.
    • Anslut ion 8
      • Klienten utfärdar högst 100 begäranden under flygning till servern från den här anslutningen.
      • Servern förväntas inte acceptera fler än 128 begäranden under flygning från klienten för den här anslutningen.

Exempel 4 – 250 NFS-klienter, 8 sunrpc.tcp_max_slot_table_entriesoch nej nconnect för en maximal samtidighet på 2 000

Exempel 4 använder det reducerade värdet per klient sunrpc.tcp_max_slot_table_entry på 8 för en 250 EDA-miljö med antal datorer. I det här scenariot uppnås en samtidighet på 2000 i hela miljön, ett värde som är mer än tillräckligt för att köra 4 000 MiB/s för en EDA-arbetsbelastning på serverdelen.

  • NFS_Server=10.10.10.10, NFS_Client1=10.10.10.11
    • Connection (10.10.10.10:2049, 10.10.10.11:6543,TCP)
      • Klienten utfärdar högst 8 begäranden under flygning till servern per anslutning.
      • Servern accepterar inte fler än 128 begäranden under flygning från den här enda anslutningen.
  • NFS_Server=10.10.10.10, NFS_Client2=10.10.10.12
    • Connection (10.10.10.10:2049, 10.10.10.12:7820,TCP)
      • Klienten utfärdar högst 8 begäranden under flygning till servern per anslutning.
      • Servern accepterar inte fler än 128 begäranden under flygning från den här enda anslutningen.
  • NFS_Server=10.10.10.10, NFS_Client250=10.10.11.13
    • Connection (10.10.10.10:2049, 10.10.11.13:4320,TCP)
      • Klienten utfärdar högst 8 begäranden under flygning till servern per anslutning.
      • Servern accepterar inte fler än 128 begäranden under flygning från den här enda anslutningen.

När du använder NFSv3 bör du tillsammans behålla antalet lagringsslutpunkter till 10 000 eller mindre. Det är bäst att ange värdet per anslutning för sunrpc.tcp_max_slot_table_entries till mindre än 128 när ett program skalar ut över många nätverksanslutningar (nconnect och HPC i allmänhet och EDA i synnerhet).

Så här beräknar du det bästa sunrpc.tcp_max_slot_table_entries

Med Hjälp av Littles Law kan du beräkna det totala antalet inmatningar för facktabeller som krävs. Överväg i allmänhet följande faktorer:

  • Utskalning av arbetsbelastningar är ofta mycket sekventiella.
  • Databasarbetsbelastningar, särskilt OLTP, är ofta slumpmässiga.

I följande tabell visas en exempelstudie av samtidighet med godtyckliga svarstider:

I/O-storlek Svarstid I/O eller dataflöde Samtidighet
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 | 4 000 MiB/s 32
256 KiB 4 ms 32 000 IOPS | 8 000 MiB/s 128

Så här beräknar du samtidighetsinställningar efter antal anslutningar

Om arbetsbelastningen till exempel är en EDA-servergrupp och 1 250 klienter kör alla arbetsbelastningar till samma lagringsslutpunkt (en lagringsslutpunkt är en lagrings-IP-adress), beräknar du den obligatoriska I/O-hastigheten och delar samtidigheten mellan servergruppen.

Anta att arbetsbelastningen är 4 000 MiB/s med en genomsnittlig åtgärdsstorlek på 256 KiB och en genomsnittlig svarstid på 10 ms. Använd följande formel för att beräkna samtidighet:

(concurrency = operation rate × latency in seconds)

Beräkningen översätts till en samtidighet på 160:

(160 = 16,000 × 0.010)

Med tanke på behovet av 1 250 klienter kan du säkert ange sunrpc.tcp_max_slot_table_entries 2 per klient för att nå 4 000 MiB/s. Du kan dock välja att bygga in extra utrymme genom att ange antalet per klient till 4 eller till och med 8, och hålla dig långt under det rekommenderade facktaket på 10 000.

Så här ställer du in sunrpc.tcp_max_slot_table_entries på klienten

  1. Lägg till sunrpc.tcp_max_slot_table_entries=<n> i konfigurationsfilen /etc/sysctl.conf .
    Om ett värde som är lägre än 128 är optimalt under justeringen ersätter du 128 med lämpligt tal.
  2. Kör följande kommando:
    $ sysctl -p
  3. Montera (eller montera om) alla NFS-filsystem, eftersom tonfisken endast gäller monteringar som görs efter att tonfisken har ställts in.

NFSv4.1

I NFSv4.1 definierar sessioner relationen mellan klienten och servern. Oavsett om de monterade NFS-filsystemen sitter ovanpå en eller flera anslutningar (vilket är fallet med nconnect) gäller reglerna för sessionen. Vid sessionskonfigurationen förhandlar klienten och servern om maximalt antal begäranden för sessionen, vilket avgör det nedre av de två värden som stöds. Azure NetApp Files stöder 180 utestående begäranden och Linux-klienter är som standard 64. I följande tabell visas sessionsgränserna:

Azure NetApp Files NFSv4.1-server
Maximalt antal kommandon per session
Linux-klient
Högsta standardkommandon per session
Förhandlade maxkommandon för sessionen
180 64 64

Även om Linux-klienter som standard är 64 maximala begäranden per session, är värdet max_session_slots för tunable. En omstart krävs för att ändringarna ska börja gälla. systool -v -m nfs Använd kommandot för att se det aktuella maxvärdet som används av klienten. För att kommandot ska fungera måste minst en NFSv4.1-montering vara på plats:

$ systool -v -m nfs
{
Module = "nfs"
...
  Parameters:
...
    max_session_slots   = "64"
...
}

Om du vill finjustera max_session_slotsskapar du en konfigurationsfil under /etc/modprobe.d som sådan. Kontrollera att inga "citattecken" finns för raden i filen. Annars börjar inte alternativet gälla.

$ sudo echo “options nfs max_session_slots=180” > /etc/modprobe.d/nfsclient.conf $ sudo reboot

Azure NetApp Files begränsar varje session till högst 180 kommandon. Därför bör du överväga 180 det maximala värdet som för närvarande kan konfigureras. Klienten kan inte uppnå en samtidighet som är större än 128 om inte sessionen delas över mer än en anslutning eftersom Azure NetApp Files begränsar varje anslutning till högst 128 NFS-kommandon. För att få mer än en anslutning rekommenderas monteringsalternativet nconnect och ett värde på två eller fler krävs.

Exempel på förväntade samtidighets maximum

Exempel i det här avsnittet visar de förväntade samtidighets maximumen.

Exempel 1 – 64 max_session_slots och nej nconnect

Exempel 1 baseras på standardinställningen 64 max_session_slots och nej nconnect. Med den här inställningen kan en samtidighet på 64 uppnås, allt från en enda nätverksanslutning.

  • NFS_Server=10.10.10.10, NFS_Client=10.10.10.11
    • Connection (10.10.10.10:2049, 10.10.10.11:6543,TCP)
      • Klienten utfärdar högst 64 begäranden under flygning till servern för sessionen.
      • Servern accepterar högst 64 begäranden under flygning från klienten för sessionen. (64 är det förhandlade värdet.)

Exempel 2 – 64 max_session_slots och nconnect=2

Exempel 2 baseras på max 64 session_slots men med det tillagda monteringsalternativet nconnect=2. En samtidighet på 64 kan uppnås men delas över två anslutningar. Även om flera anslutningar inte medför större samtidighet i det här scenariot, har det minskade ködjupet per anslutning en positiv inverkan på svarstiden.

Med fortfarande max_session_slots på 64 men nconnect=2, observera att det maximala antalet begäranden delas mellan anslutningarna.

  • 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)
    • Anslut ion 1
      • Klienten utfärdar högst 32 begäranden under flygning till servern från den här anslutningen.
      • Servern förväntas acceptera högst 32 begäranden under flygning från klienten för den här anslutningen.
    • Anslut ion 2
      • Klienten utfärdar högst 32 begäranden under flygning till servern från den här anslutningen.
      • Servern förväntas acceptera högst 32 begäranden under flygning från klienten för den här anslutningen.

Exempel 3 – 180 max_session_slots och nej nconnect

Exempel 3 släpper monteringsalternativet nconnect och anger max_session_slots värdet till 180, vilket matchar serverns maximala samtidighet för NFSv4.1-session. I det här scenariot är sessionen begränsad till 128 åtgärder under flygning med endast en anslutning och med tanke på den maximala maximala åtgärden för Azure NetApp Files 128 per NFS-anslutning.

Även om max_session_slots har angetts till 180 är den enskilda nätverksanslutningen begränsad till 128 maximala begäranden som sådana:

  • NFS_Server=10.10.10.10, NFS_Client=10.10.10.11
    • Connection (10.10.10.10:2049, 10.10.10.11:6543,TCP)
      • Klienten utfärdar högst 180 begäranden under flygning till servern för sessionen.
      • Servern accepterar högst 180 begäranden under flygning från klienten för sessionen.
      • Servern accepterar högst 128 begäranden under flygning för den enskilda anslutningen.

Exempel 4 – 180 max_session_slots och nconnect=2

Exempel 4 lägger till monteringsalternativet nconnect=2 och återanvänder värdet 180 max_session_slots . Eftersom den övergripande arbetsbelastningen är uppdelad mellan två anslutningar kan 180 utestående åtgärder uppnås.

Med två anslutningar i spel stöder sessionen den fullständiga tilldelningen av 180 utestående begäranden.

  • 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)
    • Anslut ion 1
      • Klienten förväntas inte underhålla fler än 90 begäranden under flygning till servern från en anslutning.
      • Servern förväntas underhålla högst 90 begäranden under flygning från klienten för den här anslutningen inom sessionen.
    • Anslut ion 2
      • Klienten förväntas inte underhålla fler än 90 begäranden under flygning till servern från en anslutning.
      • Servern förväntas underhålla högst 90 begäranden under flygning från klienten för den här anslutningen inom sessionen.

Kommentar

För maximal samtidighet anger du max_session_slots 180, vilket är den maximala samtidighet på sessionsnivå som stöds av Azure NetApp Files för närvarande.

Så här söker du efter maximalt antal utestående begäranden för sessionen

Om du vill se de session_slot storlekar som stöds av klienten och servern samlar du in monteringskommandot i en paketspårning. CREATE_SESSION Leta efter samtalet och CREATE_SESSION svaret enligt följande exempel. Anropet kommer från klienten och svaret kommer från servern.

Använd följande tcpdump kommando för att avbilda monteringskommandot:

$ tcpdump -i eth0 -s 900 -w /tmp/write.trc port 2049

Med Wireshark är paketen av intresse följande:

Screenshot that shows packets of interest.

I dessa två paket tittar du på fältet max_reqs i den mellersta delen av spårningsfilen.

  • Nätverkssystem
    • Verksamhet
      • Opcode
        • csa_fore_channel_attrs
        • max reqs

Paket 12 (högsta klientbegäranden) visar att klienten hade värdet max_session_slots 64. I nästa avsnitt ser du att servern har stöd för en samtidighet på 180 för sessionen. Sessionen förhandlar om det nedre av de två angivna värdena.

Screenshot that shows max session slots for Packet 12.

I följande exempel visas paket 14 (maximala serverbegäranden):

Screenshot that shows max session slots for Packet 14.

Nästa steg