Questa pagina descrive come ottimizzare la concorrenza del client NFS Linux per NetApp Volumes.
La concorrenza è il numero di operazioni NFS che possono essere in sospeso tra un client e il volume contemporaneamente. L'ottimizzazione della concorrenza consente di allineare il client ai limiti del server ed evitare il degrado delle prestazioni dovuto a una profondità della coda eccessiva.
Su Linux, la concorrenza è controllata dalle voci della tabella degli slot (NFSv3) o dagli slot di sessione NFSv4.1, anziché dalle opzioni di montaggio. Configura queste impostazioni prima di montare o rimontare i file system NFS dopo averli modificati.
Per scoprire di più sulle opzioni di montaggio, ad esempio nconnect, consulta Opzioni di montaggio NFS Linux. Per ulteriori informazioni sull'ordine di configurazione, consulta Ottimizzare i client NFS Linux.
Terminologia
I seguenti termini chiave sono correlati alla concorrenza NFS Linux:
Tabella degli slot RPC: limite per connessione TCP per le operazioni RPC NFS in sospeso sul client (NFSv3).
Slot di sessione: limite NFSv4.1 per i comandi in sospeso negoziati per una sessione tra il client e il server.
Endpoint di archiviazione: un singolo indirizzo IP del volume che i client montano.
nconnect: un'opzione di montaggio che apre più connessioni TCP allo stesso endpoint; moltiplica la concorrenza per connessione.
Parametri Linux
La tabella seguente elenca i parametri e i file di configurazione utilizzati per configurare la concorrenza NFS per ogni versione del protocollo:
| Protocollo | Parametro | Configurazione |
|---|---|---|
| NFSv3 | sunrpc.tcp_max_slot_table_entries |
/etc/sysctl.conf, sysctl -p |
| NFSv3 | sunrpc.tcp_slot_table_entries |
Alcune distribuzioni; consulta la documentazione della tua distribuzione |
| NFSv4.1 | max_session_slots |
/etc/modprobe.d/ (ad esempio, nfsclient.conf), riavvio |
NFSv3
Le sezioni seguenti descrivono i limiti del client e del server NFSv3, l'impatto di nconnect sulla concorrenza, come stimare i requisiti di concorrenza e come configurare i limiti degli slot.
Limiti di client e server
NFSv3 non negozia la concorrenza tra client e server. Ogni lato applica il proprio limite.
Server NFSv3 di NetApp Volumes: fino a 128 contesti di esecuzione per connessione TCP.
Client Linux moderno (impostazione predefinita):
sunrpc.tcp_max_slot_table_entries = 65536.
Un conteggio degli slot client predefinito che supera il limite del server non è necessario. Se il client invia più operazioni in sospeso di quelle gestite in modo efficiente dal server, il server può ridurre la finestra TCP, il che influisce sulle prestazioni.
Consiglio: imposta sunrpc.tcp_max_slot_table_entries su 128 o meno per
connessione. Per gli ambienti con molti client e connessioni, mantieni l'utilizzo totale degli slot in sospeso per endpoint di archiviazione a 10.000 o meno.
Come nconnect influisce sulla concorrenza NFSv3
La concorrenza massima approssimativa per un client viene calcolata come segue:
(sunrpc.tcp_max_slot_table_entries per connection) x (nconnect value)
Il valore di concorrenza è limitato dal server per connessione (128) e dai requisiti del carico di lavoro.
Esempio 1: slot predefiniti, nessun nconnect
Una connessione TCP.
Il client può tentare fino a 65.536 operazioni in sospeso, ma il server ne accetta fino a 128 per connessione.
La concorrenza effettiva è limitata dal limite del server di 128.
Esempio 2: 128 slot, nessun nconnect
sunrpc.tcp_max_slot_table_entries=128Una connessione.
Il client e il server si allineano a 128 operazioni in sospeso.
Esempio 3: 100 slot, nconnect=8
Otto connessioni TCP.
Fino a 100 operazioni in sospeso per connessione.
Fino a 800 operazioni in sospeso da un client (8 x 100), soggette al limite del server per connessione di 128.
Esempio 4: molti client (stile EDA)
250 client, ognuno con
sunrpc.tcp_max_slot_table_entries=8e senzanconnect.Ogni client ha fino a otto operazioni in sospeso per connessione.
Totale tra i client: fino a 2000 operazioni in sospeso per un indirizzo IP del volume (250 x 8), che rientra nelle linee guida per gli endpoint di 10.000 slot.
Quando esegui lo scale out dei client, utilizza valori di slot per client inferiori. Utilizza nconnect sui singoli client a elevata velocità effettiva, non come sostituto della pianificazione degli slot a livello di farm.
Stimare la concorrenza richiesta utilizzando la legge di Little
Utilizza la seguente formula per stimare la concorrenza richiesta per il tuo carico di lavoro:
Concorrenza = (operation_rate) x (latency_in_seconds)
Esempio: molti client, un endpoint
Target di 4000 MiBps con I/O medio di 256 KiB e latenza di 10 ms:
Velocità di operazione: circa 16.000 IOPS.
Concorrenza: circa 16.000 x 0,010 = 160.
Con 1250 client: 160 / 1250 = circa 0,13 slot per client se suddivisi in modo uniforme. Utilizza un piccolo numero intero per client, ad esempio 2, 4 o 8, per mantenere un margine di manovra sotto il limite di 10.000 slot.
Impostare sunrpc.tcp_max_slot_table_entries (NFSv3)
In molte distribuzioni Linux, systemd-sysctl viene eseguito prima del caricamento del modulo kernel sunrpc. Le voci in /etc/sysctl.conf o /etc/sysctl.d/ per sunrpc.* vengono ignorate all'avvio. L'esecuzione di sysctl -p dopo l'avvio funziona solo fino al riavvio successivo se non utilizzi uno dei seguenti metodi di persistenza.
Metodo 1: se i test dimostrano che un valore inferiore a 128 è sufficiente, utilizza
quel valore. Imposta tcp_slot_table_entries e tcp_max_slot_table_entries sullo stesso valore, a meno che la documentazione della distribuzione non indichi diversamente.
Monta o rimonta i file system NFS dopo aver modificato queste impostazioni. Le impostazioni degli slot si applicano ai trasporti RPC creati dopo l'entrata in vigore dell'impostazione.
Metodo 2 (consigliato): opzioni del modulo in /etc/modprobe.d/
I parametri del modulo vengono applicati quando sunrpc viene caricato al primo utilizzo di NFS dopo l'avvio. Queste impostazioni vengono mantenute durante i riavvii, il che evita la necessità di configurare sysctl all'avvio.
Crea
/etc/modprobe.d/sunrpc.conf:options sunrpc tcp_slot_table_entries=128 tcp_max_slot_table_entries=128
Ricompila initramfs se la tua distribuzione lo richiede dopo le modifiche di modprobe, il che è comune su RHEL quando il modulo si trova in initramfs. Per ulteriori informazioni, consulta la documentazione del fornitore di Linux.
Riavvia o scarica e ricarica
sunrpcsolo se non hai montaggi NFS attivi e il tuo runbook lo consente.Verifica che
sunrpcsia caricato e che i valori previsti siano impostati:cat /proc/sys/sunrpc/tcp_slot_table_entries cat /proc/sys/sunrpc/tcp_max_slot_table_entries
Monta o rimonta le esportazioni di NetApp Volumes.
NFSv4.1
Le sezioni seguenti descrivono come funziona la negoziazione della sessione NFSv4.1, forniscono esempi di ottimizzazione delle prestazioni e spiegano come configurare i limiti degli slot di sessione.
Negoziazione della sessione
NFSv4.1 stabilisce sessioni tra il client e il server. Il client e il server negoziano il numero massimo di comandi in sospeso (max_reqs) selezionando il valore inferiore tra i due valori supportati.
Server NFSv4.1 di NetApp Volumes: 180 comandi per sessione.
Impostazione predefinita del client Linux: 64 (
max_session_slots).Sessione negoziata: il minimo dei valori del client e del server, che è spesso 64 con il client predefinito.
Ogni connessione TCP al server supporta fino a 128 comandi NFS in sospeso.
Con l'impostazione predefinita di 64 slot di sessione e una singola connessione, la concorrenza è limitata a 64. Per utilizzare più slot di sessione tra le connessioni, utilizza nconnect=2 o un valore superiore solo per i montaggi non Kerberos. Per ulteriori informazioni sulle opzioni di montaggio,
consulta Opzioni di montaggio NFS Linux.
Esempio 1: 64 slot di sessione predefiniti, nessun nconnect
Una connessione.
Fino a 64 comandi in sospeso per la sessione.
Esempio 2: 64 slot di sessione, nconnect=2
La sessione rimane limitata a 64 slot totali, suddivisi su due connessioni, ovvero circa 32 per connessione.
Questa configurazione migliora la latenza riducendo la profondità della coda per connessione senza aumentare la concorrenza totale.
Esempio 3: max_session_slots=180, nessun nconnect
La sessione consente 180 comandi e una connessione è limitata a 128 operazioni in sospeso.
Il limite effettivo è 128.
Esempio 4: max_session_slots=180, nconnect=2
La sessione può utilizzare fino a 180 comandi su due connessioni, ovvero circa 90 per connessione.
Questa configurazione è necessaria per superare il limite di 128 per connessione a livello di sessione.
Per ottenere la massima concorrenza NFSv4.1 su NetApp Volumes senza Kerberos, imposta max_session_slots=180 e utilizza nconnect=2 o un valore superiore.
Testa questa configurazione con il tuo carico di lavoro.
Impostare il numero massimo di slot di sessione per NFSv4.1
Crea
/etc/modprobe.d/nfsclient.conf:options nfs max_session_slots=180
Riavvia il client.
Verifica la configurazione dopo che esiste almeno un montaggio NFSv4.1:
systool -v -m nfs
Verifica che
max_session_slotsvenga visualizzato nell'output.
Queste modifiche richiedono un riavvio del pacchetto client NFS Linux standard. Pianifica la manutenzione di conseguenza.
Volumi multi-client e di grande capacità
Più VM, un indirizzo IP del volume: riduci
sunrpc.tcp_max_slot_table_entriesper client.Volumi di grande capacità con più indirizzi IP: i limiti degli slot si applicano per connessione client-IP. Se possibile, distribuisci i client tra gli endpoint. Per ulteriori informazioni, consulta Connettere volumi di grande capacità con più endpoint di archiviazione.