Serie Intel® Ethernet 700
Guida all'ottimizzazione delle prestazioni di Linux
Gruppo di reti cloud NEX (NCNG)
Riv. 1.2
Dicembre 2024
Cronologia delle revisioni
Revisione | Data | Commenti |
1.2 | Dicembre 2024 | · Aggiunte ulteriori indicazioni sulla gestione dell'alimentazione. · Aggiunto Intel* Turbo Boost. · Aggiunto backlog dei dispositivi di rete. · Aggiunte configurazioni e ottimizzazioni specifiche per la piattaforma. · Aggiunti processori scalabili Intel* %eon* di quarta generazione. · Aggiunto AMD EPYC. · Aggiornate le capacità hardware del sistema di controllo. · Aggiornato iPerf2. · Aggiornato iPerf3. · Code Tx/Rx aggiornate. · Moderazione delle interruzioni aggiornata. · Misura dell'anello aggiornata. · Ottimizzazione della piattaforma aggiornata (i40e non specifico). · Impostazioni BIOS aggiornate. · Controllo C-State aggiornato. · Aggiornato il ridimensionamento della frequenza della CPU. · Impostazioni applicazione aggiornate. · Aggiornate le impostazioni del sistema operativo/kernel. · Inoltro IP aggiornato. · Bassa latenza aggiornata. |
Agosto 2023 | Le modifiche al presente documento includono: · Aggiunti riferimenti correlati. · Aggiunto Verifica che il pacchetto DDP venga caricato correttamente. · Aggiunto iPerf2. · Aggiunto iPerf3. · Aggiunto netperf. · Affinità IRQ aggiornata. · Aggiunte code Tx/Rx. · Misura dell'anello aggiornata. · Aggiunti Jumbo Frame. · Aggiunto collegamento adattatore. · Aggiunto lo strumento Intel svr-info. |
|
1.0 | Marzo 2016 | Versione iniziale (Intel Public). |
Introduzione
Questa guida intende fornire indicazioni per la messa a punto degli ambienti per prestazioni di rete ottimali utilizzando schede di rete Intel ® Ethernet serie 700 in ambienti Linux. Si concentra su hardware, driver e condizioni e impostazioni del sistema operativo che potrebbero migliorare le prestazioni di rete. Va notato che le prestazioni di rete possono essere influenzate da un numero qualsiasi di influenze esterne, solo le più comuni e drammatiche di queste sono trattate in questa guida.
1.1 Riferimenti correlati
- Manuale utente per tutti gli adattatori e dispositivi Ethernet Intel ® che supportano Windows e Linux:
Guida per l'utente di schede e dispositivi Ethernet Intel ® - Scheda tecnica:
Scheda tecnica del controller Ethernet Intel ® X710/XXV710/XL710 - Pacchetto SW completo per tutti i prodotti Intel ® Ethernet (scarica tutti i driver, NVM, strumenti, ecc.):
Pacchetto driver completo per scheda Ethernet Intel ® - Pacchetto di aggiornamento NVM (memoria non volatile):
Utilità di aggiornamento della memoria non volatile (NVM) per la scheda di rete Ethernet Intel ® serie 700 - Strumento svr-info per Linux che cattura i dettagli hardware e software rilevanti da un server: https://github.com/intel/svr-info
- Guida tecnologica DDP:
Guida alla tecnologia Intel ® Ethernet 700 Series Dynamic Device Personalization (DDP)
Lista di controllo iniziale
2.1 Aggiornare le versioni del driver/firmware
Controllare le versioni del driver/firmware utilizzando ethtool -i ethx.
Aggiornare quanto segue se necessario:
- Aggiorna il driver i40e
http://sourceforge.net/projects/e1000/files/i40e%20stable/ or https:// downloadcenter.intel.com/ download/24411/Network-Adapter-Driver-for-PCI-E-40- Gigabit-Network-Connections-under-Linux - Aggiornare il firmware
https://downloadcenter.intel.com/download/24769/NVM-Update-Utility-per-Intel-Ethernet-ConvergedNetwork-Adapter-XL710-X710-Series
2.2 Leggi il README
Verificare la presenza di problemi noti e ottenere le istruzioni di configurazione più recenti dal file README file incluso nel pacchetto sorgente i40e.
2.3 Controlla che lo slot PCI Express (PCIe) sia x8
Alcuni slot PCIe x8 sono in realtà configurati come slot x4. Questi slot hanno una larghezza di banda insufficiente per la velocità di linea completa con dispositivi a doppia porta e a quattro porte. Inoltre, se si inserisce un adattatore compatibile con PCIe v3.0 in uno slot PCIe v2.x, non è possibile ottenere la larghezza di banda completa. Il driver del dispositivo software rileva questa situazione e scrive il seguente messaggio nel registro di sistema:
La larghezza di banda PCI-Express disponibile per questa scheda non è sufficiente per prestazioni ottimali. Per prestazioni ottimali è richiesto uno slot PCI-Express x8.
Se si verifica questo errore, spostare l'adattatore su uno slot PCIe v3.0 x8 reale per risolvere il problema.
2.4 Controllare le capacità hardware del sistema
A 10 Gbps, 25 Gbps e 40 Gbps Ethernet, ci sono alcuni requisiti minimi di CPU e sistema. In generale, un processore di classe server moderno e una configurazione di memoria ottimale per la tua piattaforma dovrebbero essere sufficienti, ma le esigenze variano a seconda del tuo carico di lavoro. Tutti i canali di memoria dovrebbero essere popolati e la modalità prestazioni di memoria dovrebbe essere abilitata nel BIOS. Verifica che la tua CPU e la configurazione di memoria siano in grado di supportare il livello di prestazioni di rete di cui hai bisogno per il tuo carico di lavoro.
NOTA
XL710 è un controller 40 GbE. L'adattatore 2 x 40 GbE che utilizza questo controller non è destinato a essere un 2 x 40 GbE ma un 1 x 40 GbE con una porta di backup attiva. Quando si tenta di utilizzare traffico line-rate che coinvolge entrambe le porte, lo switch interno è saturo e la larghezza di banda combinata tra le due porte è limitata a un totale di SO Gbps.
2.4.1 Parametri di avvio del kernel
Se Intel® Virtualization Technology for Directed I/O (Intel® VT-d) è abilitata nel BIOS, Intel consiglia di impostare IOMMU in modalità pass-through per prestazioni di rete host ottimali. Ciò elimina il sovraccarico DMA sul traffico host, consentendo alle macchine virtuali (VM) di continuare ad avere i vantaggi di Intel® VT-d. Ciò si ottiene aggiungendo la seguente riga ai parametri di avvio del kernel: fommu-pt.
2.5 Assicurarsi che il pacchetto DDP venga caricato correttamente
I driver di base 140ea e 140eb non hanno supporto diretto per Dynamic Device Personalization (DDP). Per utilizzare DDP con dispositivi della serie 700, è necessario un DDP profile può essere applicato con l'applicazione testpmd.
Per i dettagli su DDP profiles, e come applicare un DDP profile con testpmd sui dispositivi della serie 700, fare riferimento alla Guida alla tecnologia Intel® Ethernet 700 Series Dynamic Device Personalization (DDP).
Per verificare se un DDP profile è stato caricato con successo:
testpmd> ddp ottieni elenco 0 Profile il numero è: 1
NOTA
Se il profile numero è 0, non è caricato alcun pacchetto DDP. In caso di errore di caricamento del pacchetto DDP, il dispositivo passa automaticamente alla modalità provvisoria e molte funzionalità di prestazioni non sono disponibili. Se si verificano errori relativi al caricamento del pacchetto DDP, ciò causerà problemi di prestazioni. Per i passaggi di risoluzione dei problemi, fare riferimento alla Guida alla tecnologia Inte/* Ethernet 700 Series Dynamic Device Personalization (DDP).
Misurazioni delle prestazioni di base e metodologia di ottimizzazione
3.1 Benchmark delle prestazioni di rete
Prima di iniziare un esercizio di messa a punto, è importante avere una buona misurazione di base delle prestazioni della tua rete. Di solito, oltre a ottenere una misurazione iniziale delle prestazioni della tua applicazione/carico di lavoro specifico, è una buona idea usare anche un benchmark standard delle prestazioni di rete per verificare che il tuo dispositivo di rete sia in buone condizioni.
Per l'ottimizzazione di un singolo sistema, netperf o iperf e NetPIPE sono tutti validi strumenti open source gratuiti che consentono di stressare una connessione e diagnosticare problemi di prestazioni.
Netperf è potente sia per i test di throughput che di latenza. NetPIPE è uno strumento specifico per la latenza ma può essere compilato per qualsiasi tipo di ambiente.
NOTA
Il test TCP_RR in netperf restituisce la latenza in un valore di transazioni/sec. Questo è un numero di andata e ritorno. La latenza unidirezionale può essere calcolata utilizzando la seguente equazione:
Latenza (usec) = (1⁄2) / [Transazioni/sec] * 1,000,000
3.1.1 iPerf2
Intel consiglia iperf2 rispetto a iperf3 per la maggior parte delle situazioni di benchmarking, grazie alla facilità d'uso e al supporto di più thread in una singola istanza dell'applicazione. Intel consiglia di eseguire con l'opzione -P con 2-4 thread per connessioni 25G e circa 4-6 thread per connessioni 40G.
- Per eseguire il traffico unidirezionale dal client al server: comando server example: iperf2 -s
Comando client example: iperf2 -c -P - Per eseguire il traffico bidirezionale dal client al server (e viceversa): comando server example: iperf2 –s –p
Comando client exampon:
iperf2 -c -P -P -–full-duplex OPPURE
iperf2 -c -P -P -D
NOTA
Entrambe le opzioni –full-duplex e -d in iperf2 consentono all'utente di eseguire test bidirezionali. Tuttavia, l'opzione –full-duplex si concentra specificamente sui test full duplex.
NOTA
Quando si testa iperf2 su più porte server, il flag -d può essere aggiunto al comando server per eseguire tutte le sessioni server in background dalla stessa finestra terminale. Il flag -d può essere utilizzato anche quando il comando server è incorporato in un ciclo for in uno script.
NOTA
Quando si esegue il test di throughput della rete con un singolo flusso/thread (ad esempioample: P1), i processori AMD potrebbero non fornire la produttività prevista, in particolare le NIC con larghezza di banda più elevata (se la velocità è >= larghezza di banda 25G). Di conseguenza, è necessario il pinning dell'applicazione su core specifici per ottenere una produttività più elevata. Vedere Impostazioni applicazione a pagina 22.
3.1.2 iPerf3
Se si utilizza iperf3, sono necessarie più istanze dell'applicazione per sfruttaretage delle code multi-thread, RSS e hardware. Intel consiglia di eseguire con 2-4 sessioni applicative per connessioni 25G e circa 4-6 sessioni per connessioni 40G. Ogni sessione dovrebbe specificare un valore di porta TCP univoco utilizzando l'opzione -p.
- Per eseguire il traffico unidirezionale dal client al server:
Comando server exampon:
iperf3 -s -p
Comando client exampon:
iperf3 -c -P - Per gestire il traffico bidirezionale dal client al server (e viceversa):
Comando server exampon:
iperf3 –s –p
Comando client example: iperf3 -c -P -P –-bidir - Per avviare più istanze (thread) di iperf3, si consiglia di utilizzare un ciclo for per mappare i thread sulle porte TCP ed eseguire iperf3 in background utilizzando & per creare più processi in parallelo.
Comando server example, avvia 4 thread: port=””; for i in {0..3}; do port=520$i; bash -c “iperf3 -s -p $port &”; done; Comando client example, avvia 4 thread – Trasmetti test porta=””; per i in {0..3}; fai porta=520$i; bash -c “iperf3 -c $serverIP -p $port &”; fatto; Comando client example, avvia 4 thread – Ricevi porta di prova=””; for i in {0..3}; do port=520$i; bash -c “iperf3 -R -c $serverIP -p $port &”; done; Per connessioni 40G, aumenta il ciclo for per creare fino a 6 istanze/thread.
NOTA
Quando si esegue il test di throughput della rete con un singolo flusso/thread (ad esempioample: P1), i processori AMD potrebbero non fornire la produttività prevista, in particolare una larghezza di banda più elevata
NIC (se la velocità è >= 25G di larghezza di banda). Di conseguenza, è necessario il pinning dell'applicazione su core specifici per ottenere una maggiore produttività. Vedere Impostazioni applicazione a pagina 22 e AMD EPYC a pagina 26.
3.1.3 prestazioni nette
Lo strumento netperf è una scelta valida sia per i test di produttività che di latenza.
- Il test TCP_STREAM in netperf misura le capacità di throughput del dispositivo. Comando server example: comando client netserver esample: netperf -t TCP_STREAM -l 30 -H
- Il test TCP_RR in netperf restituisce la latenza in un valore di transazioni/secondo. Questo è un numero di andata e ritorno. Si consiglia di utilizzare l'opzione -T x,x, dove x è la CPU locale del dispositivo. La latenza unidirezionale può essere calcolata utilizzando: Latency(usec)=(1⁄2)/ [Transazioni/sec]*1,000,\ Comando server example: server di rete
Comando client example: netperf -t TCP_RR -l 30 -H -T x,x - Per avviare più istanze (thread) di netperf, si consiglia di utilizzare un ciclo for per mappare i thread sulle porte TCP ed eseguire netperf in background utilizzando & per creare più processi in parallelo.
Comando server example, avvia 8 thread:
porta=””; per i in {0..7}; fai porta=520$i; bash -c “netserver -L $serverIP -p $porta &”; fatto;
Comando client example, avvia 8 thread: port=””; for i in {0..7}; do port=520$i; bash -c “netperf -H $serverIP -p $port -t TCP_STREAM -l 30 &”; fatto;
3.2 Metodologia di ottimizzazione
Concentratevi su una modifica di ottimizzazione alla volta, così saprete quale impatto ogni modifica avrà sul vostro test. Più metodicherete il processo di ottimizzazione, più facile sarà identificare e risolvere le cause dei colli di bottiglia delle prestazioni.
Impostazioni del driver di ottimizzazione i40e
4.1 Affinità IRQ
La configurazione dell'affinità IRQ in modo che le interruzioni per diverse code di rete siano affini a diversi core della CPU può avere un impatto enorme sulle prestazioni, in particolare nei test di throughput multithread.
Per configurare l'affinità IRQ, arresta irqbalance e quindi usa lo script set_irq_affinity dal pacchetto sorgente i40e o blocca manualmente le code. Disattiva il bilanciatore IRQ dello spazio utente per abilitare il pinning della coda:
- systemctl disabilita irqbalance
- systemctl stop bilanciamento irq
Utilizzando lo script set_irq_affinity dal pacchetto sorgente i40e (consigliato): - Per utilizzare tutti i core:
[percorso-per-i40epackage]/scripts/set_irq_affinity -X all ethX - Per utilizzare solo i core sul socket NUMA locale: [path-to-i40epackage]/scripts/set_irq_affinity -X local ethX
- Puoi anche selezionare un intervallo di core. Evita di usare cpu0 perché esegue task timer. [path-to-i40epackage]/scripts/set_irq_affinity 1-2 ethX
NOTA
Lo script di affinità abilita Transmit Packet Steering (XPS) come parte del processo di pinning quando viene specificata l'opzione -x. Quando XPS è abilitato, Intel consiglia di disabilitare irqbalance, poiché il kernel balancer con XPS può causare prestazioni imprevedibili. Lo script di affinità disabilita XPS quando viene specificata l'opzione -X. Disabilitare XPS e abilitare code simmetriche è utile per carichi di lavoro in cui le migliori prestazioni vengono ottenute quando il traffico Tx e Rx viene gestito sulla stessa coppia di code.
La configurazione delle code simmetriche in Linux comporta la regolazione dei parametri del driver dell'interfaccia di rete per abilitare le code di ricezione simmetriche (Rx) e le code di trasmissione simmetriche (Tx) per le schede di rete supportate.
NOTA
- Le code simmetriche sono una funzionalità di rete avanzata e non tutte le schede di rete o i driver della serie 700 le supportano.
- Prima di provare a configurare le code simmetriche, assicurarsi di disporre del driver e del supporto hardware necessari.
Per configurare le code simmetriche, seguire questi passaggi generali:
- Modifica la configurazione dell'interfaccia di rete File: Utilizzare un editor di testo (ad esempioample, vi, nano o gedit) per modificare la configurazione dell'interfaccia di rete file. IL file si trova in genere nella directory /etc/sysconfig/network-scripts/ e ha un nome simile a ifcfg-ethX, dove ethX è il nome dell'interfaccia di rete.
- Aggiungi parametri coda simmetrici. Aggiungi le seguenti righe alla configurazione dell'interfaccia di rete file: ETHTOOL_OPTS=”code-rx 8 code-tx 8″
- Riavviare il servizio di rete.
Dopo aver apportato le modifiche, riavviare il servizio di rete per applicare la nuova configurazione. sudo systemctl restart network
Manualmente:
-
Trova i processori collegati a ciascun nodo utilizzando: numactl –hardware lscpu
-
Trova le maschere di bit per ciascuno dei processori:
- Supponendo i core 0-11 per il nodo 0: [1,2,4,8,10,20,40,80,100,200,400,800]
- Trova gli IRQ assegnati alla porta assegnata: grep ethX /proc/interrupts e annota i valori IRQ Ad esempioample, 181-192 per i 12 vettori caricati.
- Echo il valore di affinità SMP nella voce IRQ corrispondente. Nota che questo deve essere fatto per ogni voce IRQ: echo 1 > /proc/irq/181/smp_affinity echo 2 > /proc/irq/182/smp_affinity echo 4 > /proc/irq/183/smp_affinity Mostra affinità IRQ:
- Per mostrare l'affinità IRQ per tutti i core: /script/set_irq_affinity -s ethX
- Per mostrare solo i core sul socket NUMA locale: /scripts/set_irq_affinity -s locale ethX
- Puoi anche selezionare un intervallo di core: /script/set_irq_affinity -s 40-0-8,16 ethX
NOTA
Lo script set_irq_affinity supporta il flag -s nel driver i40e versione 2.16.11 e successive.
4.2 Code Tx/Rx
Il numero predefinito di code abilitate per ogni porta Ethernet dal driver all'inizializzazione è uguale al numero totale di CPU disponibili nella piattaforma. Ciò funziona bene per molte piattaforme e configurazioni di carichi di lavoro. Tuttavia, nelle piattaforme con un numero elevato di core e/o un'elevata densità di porte Ethernet, questa configurazione può causare conflitti di risorse. Pertanto, potrebbe essere necessario in alcuni casi modificare il valore predefinito per ogni porta nel sistema.
Il numero predefinito di code Tx/Rx può variare a seconda del modello specifico e della versione del driver. Il numero di code può essere regolato utilizzando il comando ethtool -L elencato di seguito.
NOTA
In questi casi, Intel consiglia di ridurre il conteggio predefinito della coda per ogni porta a non più del numero di CPU disponibili nel nodo NUMA locale alla porta dell'adattatore. In alcuni casi, quando si tenta di bilanciare le risorse su implementazioni con un conteggio di porte elevato, potrebbe essere necessario ridurre ulteriormente questo numero.
Per modificare la configurazione della coda:
Il seguente esempioample imposta la porta a 32 code Tx/Rx: ethtool -L ethX combinate 32
Exampl'output:
ethtool -l ethX
Parametri del canale per ethX: Massimi preimpostati:
RX: 96
TX: 96
Altro: 1
Combinato: 96
Impostazioni hardware correnti:
RX: 0
TX: 0
Altro: 1
Combinato: 32
4.3 Interrompere la moderazione
La moderazione adattiva degli interrupt è attiva di default ed è progettata per fornire un approccio bilanciato tra basso utilizzo della CPU e alte prestazioni. Tuttavia, potresti provare a regolare manualmente le impostazioni degli interrupt per adattarle al tuo caso d'uso.
L'intervallo di 0-235 microsecondi fornisce un intervallo effettivo di 4,310-250,000 interrupt al secondo. Il valore di rx-μsecs-high può essere impostato indipendentemente da rx-μsecs e tx-μsecs nello stesso comando ethtool, ed è anche indipendente dall'algoritmo di moderazione degli interrupt adattivi. L'hardware sottostante supporta la granularità in intervalli di 2 microsecondi, quindi valori adiacenti potrebbero comportare la stessa frequenza di interrupt.
- Per disattivare la moderazione degli interrupt adattivi: ethtool -C ethX adaptive-rx off adaptive-tx off
- Per attivare la moderazione adattiva degli interrupt: ethtool -C ethX adaptive-rx on adaptive-tx on
Un buon punto di partenza per la messa a punto generale è 84 μs, o ~12000 interrupt/s. Se vedi che i contatori rx_dropped sono in esecuzione durante il traffico (usando ethtool -S ethX), allora probabilmente hai una CPU troppo lenta, non abbastanza buffer dalla dimensione dell'anello dell'adattatore (ethtool -G) per contenere i pacchetti per 84 μs o una frequenza di interrupt troppo bassa.
- Per impostare la moderazione degli interrupt a una frequenza di interrupt fissa di 84 μs tra gli interrupt (12000 interrupt/s): ethtool -C ethX adaptive-rx off adaptive-tx off rx-usecs 84 tx-usecs 84 Il valore successivo da provare, se non hai raggiunto il massimo utilizzo della CPU, è 62 μs. Questo utilizza più CPU, ma gestisce i buffer più velocemente e richiede meno descrittori (dimensione dell'anello, ethtool -G).
- Per impostare la moderazione degli interrupt a una velocità di interrupt fissa di 62 usecs tra gli interrupt (16000 interrupt/s). ethtool -C ethX adaptive-rx off adaptive-tx off rx-usecs 62 tx-usecs 62
Se i contatori rx_dropped aumentano durante il traffico (usando ethtool -S ethX), probabilmente hai una CPU troppo lenta, buffer insufficienti dalla dimensione dell'anello dell'adattatore (ethtool -G) o un tasso di interrupt troppo basso. Se non hai sfruttato al massimo l'utilizzo della CPU, puoi aumentare il tasso di interrupt abbassando il valore ITR. Questo usa più CPU, ma serve i buffer più velocemente e richiede meno descrittori (dimensione dell'anello, ethtool -G).
Se la tua CPU è al 100%, allora non è consigliabile aumentare la frequenza di interrupt. In determinate circostanze, come un carico di lavoro limitato alla CPU, potresti voler aumentare il valore μs per abilitare più tempo di CPU per altre applicazioni.
Se hai bisogno di prestazioni a bassa latenza e/o hai molta CPU da dedicare all'elaborazione di rete, puoi disattivare completamente la moderazione degli interrupt, che consente agli interrupt di attivarsi il più velocemente possibile. - Per disabilitare la moderazione degli interrupt ethtool -C ethX adaptive-rx off adaptive-tx off rx-usecs 0 tx-usecs 0
NOTA
Quando si esegue con la moderazione degli interrupt disabilitata, la frequenza degli interrupt su ogni coda può essere molto elevata. Si consideri di includere il parametro rx-usec-high per impostare un limite superiore alla frequenza degli interrupt. Il seguente comando disabilita la moderazione degli interrupt adattiva e consente un massimo di 5 microsecondi prima di indicare che una ricezione o una trasmissione è stata completata. Invece di generare fino a 200,000 interrupt al secondo, limita gli interrupt totali al secondo a 50,000 tramite il parametro rx-usec-high. # ethtool -C ethX adaptive-rx off adaptive-tx off rx-usecs-high 20 rx-usecs 5 txusecs 5 Provare a regolare il timer di coalescenza di trasmissione/ricezione/alta priorità più in alto (80/100/150/200) o più in basso (25/20/10/5) per trovare il valore ottimale per il carico di lavoro.
4.4 Misura dell'anello
Se vedi contatori rx_dropped in ethtool -S ethX (rx_dropped, rx_dropped.nic) o sospetti una pressione della cache con più code attive, potresti provare a regolare la dimensione dell'anello rispetto al valore predefinito. Il valore predefinito è 512, il massimo è 4096.
- Per controllare i valori correnti: ethtool -g ethX
Se si sospetta che la mancanza di buffering stia causando cali nella frequenza di interrupt corrente, si può provare prima il massimo, poi il minimo, quindi continuare con una ricerca binaria finché non si ottengono prestazioni ottimali.
Se si sospetta una pressione della cache (molte code attive), ridurre i buffer rispetto ai valori predefiniti può aiutare Intel ® Data Direct I/O (Intel ® DDIO) a funzionare in modo più efficiente. Intel consiglia di provare 128 o 256 per coda, tenendo presente che potrebbe essere necessario un aumento della frequenza di interrupt tramite ethtool -C per evitare un aumento di rx_dropped. - Per impostare la dimensione dell'anello su un valore fisso: ethtool -G eth12 rx 256 tx 256
NOTA
Per correggere le perdite di pacchetti Rx rilevate con ethtool -S ethX|grep drop, valutare di aumentare la dimensione dell'anello a 4096. Sperimentare per trovare l'impostazione migliore per il carico di lavoro, ma fare attenzione all'eccessivo utilizzo di memoria con valori più alti.
4.5 Controllo del flusso
Il controllo di flusso di livello 2 può avere un impatto considerevole sulle prestazioni TCP e si consiglia di disattivarlo per la maggior parte dei carichi di lavoro. Una potenziale eccezione è il traffico burst in cui i burst non sono di lunga durata.
Per impostazione predefinita, il controllo del flusso è disabilitato.
- Per abilitare il controllo del flusso: ethtool -A ethX rx on tx on
- Per disabilitare il controllo di flusso: ethtool -A ethX rx off tx off
NOTA
Per abilitare correttamente il controllo del flusso è necessario disporre di un partner di collegamento che supporti il controllo del flusso.
4.6 Jumbo frame
Quando l'ambiente di traffico previsto è costituito da grandi blocchi di dati trasferiti, potrebbe essere utile abilitare la funzionalità jumbo frame. Il supporto jumbo frame viene abilitato modificando l'unità di trasmissione massima (MTU) a un valore maggiore del valore predefinito di 1500. Ciò consente al dispositivo di trasferire dati in pacchetti più grandi all'interno dell'ambiente di rete. Questa impostazione potrebbe migliorare la produttività e ridurre l'utilizzo della CPU per carichi di lavoro I/O di grandi dimensioni. Tuttavia, potrebbe avere un impatto su carichi di lavoro sensibili a pacchetti di piccole dimensioni o latenza.
NOTA
I frame jumbo o un'impostazione MTU più elevata devono essere configurati correttamente nell'ambiente di rete.
Utilizzare il comando ifconfig per aumentare la dimensione MTU. Ad esempioample, inserisci quanto segue, dove è il numero dell'interfaccia: ifconfig mtu 9000 in su
In alternativa, è possibile utilizzare il comando ip come segue: ip link set mtu 9000 dev collegamento ip impostato dev
Ottimizzazione della piattaforma (i40e non specifico)
5.1 Impostazioni del BIOS
- Abilitare Intel® VT-d per carichi di lavoro di virtualizzazione.
- L'hyper-threading (processori logici) può influire sulle prestazioni. Sperimenta con esso acceso o spento per il tuo carico di lavoro.
- Intel® Turbo Boost consente ai core della CPU di funzionare a una frequenza più alta rispetto alla frequenza di base della CPU. Abilitare Intel® Turbo Boost può migliorare le prestazioni per molti carichi di lavoro, ma consuma più energia per mantenere i core a una frequenza più alta. Sperimenta con Turbo Boost off/on per il tuo carico di lavoro.
NOTA
Le frequenze turbo non sono garantite se la piattaforma sta riscontrando un elevato utilizzo complessivo della CPU. Le frequenze turbo core più elevate vengono ridotte all'aumentare dell'utilizzo complessivo della CPU.
5.2 Gestione dell'alimentazione
La gestione dell'alimentazione può avere un impatto sulle prestazioni, in particolare nei carichi di lavoro a bassa latenza. Se le prestazioni sono una priorità più alta rispetto alla riduzione del consumo energetico, Intel consiglia di sperimentare la limitazione degli effetti della gestione dell'alimentazione. Esistono molti modi diversi per limitare la gestione dell'alimentazione, tramite strumenti del sistema operativo, impostazioni del BIOS e parametri di avvio del kernel. Scegli il metodo e il livello migliori per adattarli al tuo ambiente.
5.2.1 Controllo dello stato C
Limitando l'ingresso nello stato C a CO o C1 si migliorano le prestazioni e si aumenta l'utilizzo di energia.
Disabilitare l'ingresso di stato del pacchetto CPU C6 può migliorare le prestazioni della rete. Tuttavia, ciò aumenta il consumo di energia.
Sono disponibili le seguenti opzioni:
- Controllare dinamicamente l'ingresso nello stato C:
Aprire
/dev/cpu_dma_latency e scrivervi la latenza massima consentita.
NOTA
Esiste un piccolo programma chiamato cpudmalatency.c che può essere scaricato dalla comunità open source, compilato ed eseguito dalla riga di comando per fare esattamente questo.
Il seguente esempioample consente cinque μs di tempo di riattivazione e quindi consente l'ingresso C1: cpudmalatency 5 &
- Limitare lo stato C massimo nelle impostazioni di avvio del kernel:
Per CPU Intel: intel_idle.max_cstates=1
Per CPU non Intel: processor.max_cstates=1 - Utilizzare il comando cpupower per controllare e disabilitare lo stato della CPU C6: Controllare: cpupower monitor o cpupower idle-info
Disabilita C6: cpupower idle-set -d3 o
Disabilita C-States: cpupower idle-set -D0
Note:
- Disabilita gli stati C sulla CPU se il server ha processori Intel® Xeon® Scalable di quarta generazione. Quando Hyper Threading è abilitato o disabilitato, disabilitare gli stati inattivi (-D4) impedisce ai core di entrare in stati di basso consumo durante i periodi di inattività e riduce la latenza della CPU per la transizione tra stati inattivi e attivi.
- La gestione dell'alimentazione del processore Intel® Xeon® Scalable di quarta generazione è estremamente aggressiva. Per evitare che i core entrino in stati di basso consumo, provare a ridurre il numero di core in uso per mantenerli attivi più a lungo (ethtool -L combinato ). Inoltre, associa gli interrupt a core specifici usando set irq affinity (il più delle volte con -x local o list of CPU cores) e assicurati che il carico di lavoro venga eseguito su quegli stessi core con taskset o numactl. Ciò migliora le prestazioni mantenendo attivi i core e ottimizzando la gestione degli interrupt.
Abilita C6:
cpupower idle-set -d3
Abilita C-Stati:
cpupower idle-set -E
- Un altro metodo è quello di utilizzare lo strumento ottimizzato (incluso in molte distribuzioni Linux) per impostare un pro delle prestazionifile. Questi professionistifiles modificano diverse impostazioni del sistema operativo che possono influire sulle prestazioni di molte applicazioni. È stato scoperto che il network-throughput profile apporta miglioramenti alla maggior parte dei carichi di lavoro.
Controllo:
tuned-adm attivo
Impostato:
sintonizzato-adm profile capacità di trasmissione della rete
NOTA
Il servizio Tuned deve essere in esecuzione per i comandi sopra. Per controllare/riavviare, tuned: systemctl status tuned systemctl restart tuned
È anche possibile impedire qualsiasi voce C-state aggiungendo quanto segue alla riga di avvio del kernel:
inattivo=sondaggio - Limitare lo stato C tramite le impostazioni di gestione dell'alimentazione del BIOS del sistema, che potrebbero avere un impatto negativo sulle prestazionifile disponibile.
Strumenti come turbostat o x86_energy_perf_policy possono essere utilizzati per controllare o configurare le impostazioni di gestione dell'alimentazione.
5.2.2 Gestione dell'alimentazione PCIe
Active-State Power Management (ASPM) abilita uno stato di alimentazione inferiore per i collegamenti PCIe quando non sono in uso attivo. Ciò può causare una latenza più elevata sui dispositivi di rete PCIe, quindi Intel consiglia di disabilitare ASPM per carichi di lavoro sensibili alla latenza. Disabilita ASPM aggiungendo quanto segue alla riga di avvio del kernel: pcie_aspm=off
5.2.3 Scala della frequenza della CPU
Il ridimensionamento della frequenza della CPU (o ridimensionamento della velocità della CPU) è una tecnica di gestione dell'alimentazione di Linux in cui la velocità di clock del sistema viene regolata al volo per risparmiare energia e calore. Proprio come gli stati C, questo può causare latenza indesiderata sulle connessioni di rete.
Lo strumento cpupower può essere utilizzato anche per controllare e modificare i valori predefiniti e i limiti delle prestazioni della CPU:
- Controllare: monitor CPUPower o
- Imposta le CPU in modalità prestazioni: cpupower frequency-set -g performance
NOTA
Le modifiche ai limiti di frequenza della CPU possono avere un impatto su molti carichi di lavoro e potrebbero disabilitare altre funzionalità, come la modalità turbo della CPU.
Per disattivare il ridimensionamento della frequenza della CPU, disattivare il servizio di alimentazione della CPU tramite i seguenti comandi:
systemctl arresta cpupower.service
systemctl disabilita cpupower.service
5.2.4 Ulteriori indicazioni sulla gestione dell'alimentazione
Ulteriori dettagli sono forniti in questo articolo di alto livelloview di molte delle funzionalità di gestione dell'alimentazione nei processori Intel® Xeon® Scalable di terza generazione, nonché indicazioni su come queste funzionalità possono essere integrate a livello di piattaforma: https://networkbuilders.intel.com/solutionslibrary/power-management-technologyoverview-technology-guide
5.3 Intel® Turbo Boost
Intel® Turbo Boost rende il processore più veloce quando necessario, ma può consumare energia aggiuntiva. Disattivando Turbo Boost il processore rimane a una velocità costante, offrendoti un livello di prestazioni costante per carichi di lavoro specifici.
5.4 Firewall
I firewall possono influire sulle prestazioni, in particolare sulla latenza.
Disattivare iptables/firewalld se non necessario.
5.5 Impostazioni dell'applicazione
Spesso un singolo thread (che corrisponde a una singola coda di rete) non è sufficiente per ottenere la massima larghezza di banda. Alcune architetture di piattaforma, come AMD, tendono a eliminare più pacchetti Rx con un singolo thread rispetto alle piattaforme con processori basati su Intel.
Si consideri l'utilizzo di strumenti come taskset o numactl per agganciare le applicazioni al nodo NUMA o ai core della CPU locali al dispositivo di rete. Per alcuni carichi di lavoro come l'I/O di storage, spostare l'applicazione su un nodo non locale offre dei vantaggi.
Se possibile, prova ad aumentare il numero di thread utilizzati dalla tua applicazione.
Versione del kernel 5.6
La maggior parte dei kernel moderni in-box sono ragionevolmente ben ottimizzati per le prestazioni ma, a seconda del caso d'uso, l'aggiornamento del kernel potrebbe fornire prestazioni migliorate. Scaricare il codice sorgente consente inoltre di abilitare/disabilitare determinate funzionalità prima di compilare il kernel.
5.7 Impostazioni del sistema operativo/kernel
Per maggiori informazioni sull'ottimizzazione generale del sistema operativo, consultare le guide all'ottimizzazione del sistema operativo, come la Red Hat Enterprise Linux Network Performance Tuning Guide.
Alcuni parametri comuni da regolare sono elencati nella tabella seguente. Si noti che questi sono solo punti di partenza suggeriti e modificarli rispetto ai valori predefiniti potrebbe aumentare le risorse utilizzate sul sistema. Sebbene aumentare i valori possa aiutare a migliorare le prestazioni, è necessario sperimentare valori diversi per determinare cosa funziona meglio per un dato sistema, carico di lavoro e tipo di traffico.
I parametri del kernel sono configurabili tramite l'utilità sysctl in Linux, come indicato di seguito.
A view i valori predefiniti per rmem e wmem sul sistema:
sysctl net.core.rmem_default
sysctl net.core.wmem_default
Imposta i valori al massimo (16 MB):
eseguire il comando sysctl -w net.core.rmem_max=16777216
eseguire il comando sysctl -w net.core.wmem_max=16777216
Le dimensioni del buffer socket, note anche come buffer di ricezione (rmem) e buffer di trasmissione (wmem), sono parametri di sistema che specificano la quantità di memoria riservata al traffico di rete in entrata e in uscita.
Eseguendo sysctl senza l'argomento -w viene elencato il parametro con la sua impostazione corrente.
Impostazione dello stack | Descrizione |
net.core.rmem_predefinito | Dimensione predefinita della finestra di ricezione |
net.core.wmem_predefinito | Dimensione predefinita della finestra di trasmissione |
rete.core.rmem_max | Dimensione massima della finestra di ricezione |
net.core.wmem_max | Dimensione massima della finestra di trasmissione |
net.core.optmem_max | Buffer di memoria opzionali massimi |
backlog di rete.core.netdev_max | Arretrati di pacchetti non elaborati prima che il kernel inizi a rilasciarli |
rete.ipv4.tcp_rmem | Riserva di memoria per buffer di lettura TCP |
rete.ipv4.tcp_wmem | Riserva di memoria per buffer di invio TCP |
Kernel, stack di rete, gestore di memoria, velocità della CPU e parametri di gestione dell'alimentazione possono avere un impatto notevole sulle prestazioni di rete. Una raccomandazione comune è quella di applicare al throughput di rete profile utilizzando il comando tuned. Questo modifica alcune impostazioni del sistema operativo per dare la preferenza alle applicazioni di rete.
Controllo:
tuned-adm attivo
Impostato:
sintonizzato-adm profile capacità di trasmissione della rete
5.8 Arretrati dei dispositivi di rete
Questa funzionalità aiuta a migliorare le prestazioni di rete gestendo efficacemente il traffico in entrata, riducendo la perdita di pacchetti, abbassando la latenza e aumentando la produttività. Ciò porta a una migliore esperienza utente e a una risposta più rapida del sistema.
Di default, è abilitato nella maggior parte dei sistemi operativi Linux. Per controllare il valore predefinito:
sysctl net.core.netdev_max_backlog
Il valore massimo per netdev_max_backlog può variare a seconda di fattori come la versione del kernel, l'hardware, la memoria e il carico di lavoro. In molti casi, 8192 è visto come un buon valore. sysctl -w net.core.netdev_max_backlog=8192
5.9 Configurazioni e ottimizzazione specifiche della piattaforma
5.9.1 Processori scalabili Intel® Xeon® di quarta generazione
La gestione dell'alimentazione del processore Intel® Xeon® Scalable di quarta generazione è estremamente aggressiva rispetto ai processori Intel® Xeon® Scalable di terza generazione. Per evitare che i core entrino in stati di basso consumo, provare a ridurre il numero di core in uso per mantenerli attivi più a lungo.
Impostazioni BIOS consigliate per le massime prestazioni
- Abilitazione/disabilitazione dell'Hyper-threading (in base ai requisiti del carico di lavoro e agli obiettivi prestazionali) sulla CPU.
- Imposta il sistema profile a Performance per le massime prestazioni.
NOTA
Ciò si traduce in un maggiore consumo energetico - Impostare la gestione dell'alimentazione della CPU su Prestazioni massime per dare priorità alle massime prestazioni della CPU rispetto all'efficienza energetica.
- Abilita Turbo Boost. La disabilitazione di Turbo Boost nelle impostazioni del BIOS di sistema in genere impedisce alla CPU di aumentare dinamicamente la sua velocità di clock oltre la sua frequenza di base.
- NOTA
La disattivazione del Turbo Boost può essere utile in determinati casi d'uso in cui prestazioni costanti, efficienza energetica o gestione termica hanno la priorità rispetto alle prestazioni massime. - Disattivare la funzionalità Single Root I/O Virtualization (SR-IOV) se il sistema non utilizza tecnologie di virtualizzazione.
- Disattivare gli stati C per indicare alla CPU di rimanere attiva ed evitare l'ingresso in stati di inattività più profondi.
- Disabilitare C1E per garantire che la CPU rimanga attiva e non entri nello stato di inattività C1E.
- Impostare la frequenza uncore al massimo per indicare al sistema di funzionare alla massima frequenza disponibile.
- Sulle piattaforme Dell, impostare l'emulazione del core MADT (Multiple APIC Description Table) su Lineare (o Round-Robin a seconda del BIOS) per fornire una mappatura chiara e prevedibile dei core della CPU.
Ottimizzazioni consigliate a livello di sistema operativo per prestazioni ottimizzate
- Imposta il regolatore di scala della frequenza della CPU su prestazioni. cpupower frequency-set -g performance cpupower frequency-info
- Disabilita gli stati C. cpupower idle-set -D0
- Imposta i buffer core Rx (rmem) e Tx (wmem) al valore massimo. sysctl -w net.core.rmem_max=16777216 sysctl -w net.core.wmem_max=16777216
- Imposta il backlog del dispositivo di rete. sysctl -w net.core.netdev_max_backlog=8192
- Impostato pro sintonizzatofile (dipende dal carico di lavoro in termini di produttività/latenza).
sintonizzato-adm profile capacità di trasmissione della rete
Ottimizzazioni del livello dell'adattatore consigliate per prestazioni ottimizzate
- Limita il numero di code da utilizzare per il traffico dell'applicazione. Utilizza il numero minimo di code necessarie per mantenere attivi i core della CPU associati per impedire loro di entrare in stati di inattività più profondi (adatta al carico di lavoro): ethtool -L combinato 32
- Imposta i tassi di moderazione degli interrupt. ethtool -C rx adattivo disattivato tx adattivo disattivato rx-usecs-alto 50 rx-usecs 50 tx-usecs 50
Provare a regolare il timer di trasmissione/ricezione/coalescenza ad alta priorità su un valore più alto (80/100/150/200) o più basso (25/20/10/5) per trovare il valore ottimale per il carico di lavoro. - Imposta le dimensioni dell'anello Rx/Tx. ethtool -G ricezione 4096 trasmissione 4096
NOTA
Se vedi pacchetti Rx persi con ethtool -S| grep drop, prova a ridurre la dimensione dell'anello a <4096. Prova a trovare il valore ottimale per il carico di lavoro in cui i pacchetti non vengono persi. - Imposta affinità IRQ. Utilizza core locali per NIC o una mappatura core specifica (dove # core è uguale al numero di code impostato in 1 a pagina 26. systemctl stop irqbalance set_irq_affinity -X local OPPURE imposta_irq_affinity -X
5.9.2 Processore AMD EPYC
I processori AMD EPYC sono potenti CPU realizzate per server e data center, basate sull'architettura Zen di AMD. Le impostazioni sottostanti provengono dalla serie EPYC di quarta generazione di AMD.
Impostazioni BIOS consigliate per le massime prestazioni
- Abilita la modalità personalizzata per consentire agli utenti di regolare le prestazioni della CPU, il consumo energetico e altre impostazioni. Ciò aiuta a mettere a punto il sistema per il miglior equilibrio tra prestazioni ed efficienza energetica.
- Abilita l'aumento delle prestazioni del core per consentire alla CPU di aumentare automaticamente la sua velocità per gestire attività più intensive, migliorando le prestazioni generali.
- Disattivare il controllo globale dello stato C per impedire alla CPU di entrare in stati di risparmio energetico più profondi, noti come stati C, che possono mantenere la reattività.
NOTA
La disattivazione degli stati C può causare un consumo di energia aggiuntivo e aumentare le temperature termiche. Monitorare entrambi per il carico di lavoro. - Abilita/disabilita Simultaneous Multithreading (SMT) sulla CPU, in base ai requisiti del carico di lavoro e agli obiettivi di prestazioni. SMT è equivalente a Hyper Threading sulle CPU Intel.
NOTA
Per prestazioni ottimizzate, fare riferimento a Ottimizzazione delle impostazioni del driver i40e a pagina 13 e Ottimizzazione della piattaforma (i40e non specifico) a pagina 19 per l'ottimizzazione consigliata del sistema operativo e del livello dell'adattatore.
Incollaggio dell'adattatore
Il bonding Linux è una potente funzionalità che può migliorare significativamente le prestazioni di rete, la ridondanza e la tolleranza agli errori negli ambienti server. Tuttavia, è importante notare che richiede hardware di rete compatibile e una configurazione corretta sia sul server che sullo switch per funzionare correttamente.
Il driver di bonding in Linux consente di aggregare più interfacce di rete fisiche in un'interfaccia bonded. Questa interfaccia bonded appare come un'unica interfaccia di rete virtuale per il sistema operativo e le applicazioni.
NOTA
Il legame è un'interfaccia logica, quindi non è possibile impostare l'affinità della CPU direttamente sull'interfaccia del legame (ad esempioample, bond0). Vale a dire, non ha alcun controllo diretto sulla gestione degli interrupt o sull'affinità della CPU. L'affinità della CPU deve essere configurata per le interfacce sottostanti che fanno parte del bond.
L'incollaggio prevede diverse modalità di funzionamento, ciascuna con caratteristiche proprie.
Modalità | Tipo |
0 | Girotondo |
1 | Backup attivo |
2 | XOR |
3 | Trasmissione |
4 | LACP |
5 | Trasmetti bilanciamento del carico |
6 | Bilanciamento del carico adattivo |
Esistono diversi metodi per creare un bonding in Linux. Uno dei metodi più comuni è usare la configurazione di rete files (per esempioample, /etc/network/ interfaces o /etc/sysconfig/network-scripts/ifcfg-bondX).
Configurazione tramite configurazione di rete Files
I seguenti passaggi creano il bonding attraverso la configurazione di rete files.
- Selezionare due o più porte NIC per il bonding (ad esempioample, ethX e ethY)
- Apri la configurazione NIC Files in /etc/sysconfig/network-scripts/ per l'interfaccia NIC richiesta (ad esempioample, vi ifcfg-ethX e vi ifcfg-ethY) e aggiungere il seguente testo:
MASTER=bondN [Nota: N è un numero intero per indicare il numero del legame.] SLAVE=yes - Creare uno script di rete obbligazionaria file utilizzando vi /etc/sysconfig/networkscripts/ifcfg-bondN e immettere il seguente testo:
DEVICE=bondN [Nota: N è un numero intero per indicare il numero di legame] ONBOOT=yes USERCTL=no BOOTPROTO=dhcp (o) none
IPADDR=200.20.2.4 [obbligatorio se BOOTPROTO=none] NETMASK=255.255.255.0 [obbligatorio se BOOTPROTO=none] NETWORK=200.20.2.0 [obbligatorio se BOOTPROTO=none] BROADCAST=200.20.2.255 [obbligatorio se BOOTPROTO=none] BONDING_OPTS=”mode=1 miimon=100″
NOTA
La modalità può essere un qualsiasi numero intero compreso tra 0 e 6, in base alle esigenze. - Riavviare i servizi di rete utilizzando il servizio network restart o systemctl restart NetworkManager.service
Risoluzione dei problemi relativi alle prestazioni
7.1 Utilizzo della CPU
Controllare l'utilizzo della CPU per core mentre il carico di lavoro è in esecuzione.
Si noti che l'utilizzo per core è più rilevante per le prestazioni rispetto all'utilizzo complessivo della CPU, poiché fornisce un'idea dell'utilizzo della CPU per coda di rete. Se si hanno solo pochi thread che eseguono traffico di rete, allora si potrebbero avere solo pochi core utilizzati. Tuttavia, se quei core sono al 100%, allora la produttività della rete è probabilmente limitata dall'utilizzo della CPU ed è il momento di eseguire quanto segue:
- Regolare la moderazione IRQ/dimensione dell'anello come descritto in Moderazione degli interrupt.
- Aumenta il numero di thread dell'applicazione per distribuire il carico della CPU su più core. Se tutti i core sono in esecuzione al 100%, la tua applicazione potrebbe essere vincolata alla CPU anziché alla rete.
Strumenti comunemente disponibili:
- superiore
— Premere 1 per espandere l'elenco delle CPU e verificare quali sono in uso.
— Notare il livello di utilizzo.
— Nota quali processi sono elencati come più attivi (in cima all'elenco). - stato di avanzamento
Il seguente esempioampla riga di comando è stata testata su Red Hat Enterprise Linux 7.x.
Visualizza l'utilizzo della CPU per core (trovando la percentuale totale di inattività e sottraendo da 100) ed evidenzia i valori superiori all'80% in rosso. mpstat -P ALL 1 1 | grep -v Media | tail -n +5 | head -n -1 | awk '{ print (100-$13)}' | egrep -color=always '[^\.][8-9][0-9][\.]?.*|^[8-9][0-9][\.]?.*| 100|' | colonna - perf top Cerca dove vengono spesi i cicli.
7.2 Contatori i40e
Il driver i40e fornisce un lungo elenco di contatori per il debug e il monitoraggio dell'interfaccia tramite il comando ethtool -S ethX. Può essere utile guardare l'output mentre un carico di lavoro è in esecuzione e/o confrontare i valori dei contatori prima e dopo l'esecuzione di un carico di lavoro.
- Per ottenere un dump completo dei contatori i40e: ethtool -S ethX
- Per guardare solo i contatori diversi da zero: watch -d (ethtool -S ethX) | egrep -v :\ 0 | column
Alcune cose da cercare: - rx_dropped significa che la CPU non gestisce i buffer con sufficiente rapidità.
- port.rx_dropped significa che qualcosa non è abbastanza veloce nello slot/memoria/sistema.
7.3 Contatori di rete
Controllare netstat -s prima/dopo l'esecuzione di un carico di lavoro.
Netstat raccoglie informazioni di rete da tutti i dispositivi di rete nel sistema. Pertanto, i risultati potrebbero essere influenzati da reti diverse dalla rete sottoposta a test. L'output di netstat -s può essere un buon indicatore di problemi di prestazioni nel sistema operativo Linux o nel kernel. Consulta le guide di ottimizzazione del sistema operativo, come Red Hat Enterprise Linux Network Performance Tuning Guide, per maggiori informazioni sull'ottimizzazione generale del sistema operativo.
7.4 Registri di sistema
Controllare i registri di sistema per errori e avvisi (/var/log/messages, dmesg).
7.5 Strumento Intel svr-info
Intel fornisce uno strumento svr-info (vedere https://github.com/intel/svr-info) per Linux che cattura dettagli hardware e software rilevanti da un server. L'output di svr-info può essere estremamente utile per identificare colli di bottiglia del sistema o impostazioni/accordature non ottimizzate per il carico di lavoro. Quando si apre un caso di supporto con Intel per problemi di prestazioni correlati a Ethernet, assicurarsi di includere l'output di svr-info (testo file) per ciascun server Linux nella configurazione di prova.
- Scarica e installa svr-info:
wget -qO- https://github.com/intel/svr-info/releases/latest/download/svrinfo.tgz| tar xvz cd svr-info
./svr-info
> nomehost.txt - Raccogli l'output:
./svr-info > nomehost.txt - Allega un testo (.txt) file per ogni server al tuo caso di supporto Intel per l'analisi.
Raccomandazioni per scenari di prestazioni comuni
8.1 Inoltro IP
- Aggiornare il kernel.
Alcuni recenti kernel in-distro hanno prestazioni di routing degradate a causa di modifiche del kernel nel codice di routing a partire dalla rimozione della cache di routing per motivi di sicurezza. I recenti kernel out-of-distro dovrebbero avere patch che alleviano l'impatto sulle prestazioni di queste modifiche e potrebbero fornire prestazioni migliorate. - Disattivare l'hyper-threading (core logici).
- Modifica i parametri di avvio del kernel.
— Forzare la disattivazione di iommu (intel_iommu=off o iommu=off) dalla riga di avvio del kernel a meno che non sia necessario per la virtualizzazione
— Disattiva la gestione dell'alimentazione: processor.max_cstates=1 idle=poll pcie_aspm=off - Limitare il numero di code in modo che sia uguale al numero di core sul socket locale (12 in questo esempioample). ethtool -L ethX combinato 12
- Interruzioni pin solo per socket locale. set_irq_affinity -X local ethX O set_irq_affinity -X local ethX
NOTA
A seconda del carico di lavoro, è possibile utilizzare -X o -x. - Modifica le dimensioni degli anelli Tx e Rx in base alle tue esigenze. Un valore più grande richiede più risorse ma può fornire velocità di inoltro migliori. ethtool -G ethX rx 4096 tx 4096
- Disattivare GRO durante il routing.
A causa di un noto problema del kernel, GRO deve essere disattivato durante il routing/forwarding. ethtool -K ethX gro off dove ethX è l'interfaccia Ethernet da modificare. - Disabilita la moderazione degli interrupt adattivi e imposta un valore statico. ethtool -C ethX adaptive-rx off adaptive-tx off ethtool -C ethX rx-usecs 64 tx-usecs 64
NOTA
A seconda del tipo di processore e del carico di lavoro, i parametri di coalescenza per RX e TX possono essere regolati per migliorare le prestazioni (o ridurre la perdita di frame).
- Disabilitare il firewall. sudo systemctl disable firewalld sudo systemctl stop firewalld
- Abilita l'inoltro IP. sysctl -w net.ipv4.ip_forward=1
- Configura i valori massimi per le dimensioni del buffer del socket di ricezione e invio. sysctl -w net.core.rmem_max=16777216 sysctl -w net.core.wmem_max=16777216
NOTA
A seconda del carico di lavoro o delle esigenze, è possibile modificare questi valori predefiniti.
8.2 Bassa latenza
- Disattivare l'hyper-threading (core logici).
- Assicurarsi che il dispositivo di rete sia locale sul core numa 0.
- Fissare il benchmark sul core 0 utilizzando taskset -c 0.
- Disattivare irqbalance usando systemctl stop irqbalance o systemctl disable irqbalance
- Esegui lo script di affinità per distribuire tra i core. Prova local o all.
- Disattiva la moderazione degli interrupt. ethtool -C ethX rx-usecs 0 tx-usecs 0 adaptive-rx off adaptive-tx off rxusecs- high 0
- Limita il numero di code in modo che sia uguale al numero di core sul socket locale (32 in questo esempio)ample). ethtool -L ethX combinato 32
- Interruzioni pin solo sul socket locale (script confezionato con il driver sorgente i40e). set_irq_affinity -X local ethX
- Utilizzare un benchmark consolidato come netperf -t TCP_RR, netperf -t UDP_RR o NetPipe. netperf -t TCP_RR o netperf -t UDP_RR
- Fissa il benchmark su un singolo core nel nodo NUMA locale. taskset -c
Serie Intel® Ethernet 700
Guida all'ottimizzazione delle prestazioni di Linux
Dicembre 2024
Doc. N.: 334019, Rev.: 1.2
Documenti / Risorse
![]() |
Ottimizzazione delle prestazioni Linux della serie Intel Ethernet 700 [pdf] Guida utente 334019, Ottimizzazione delle prestazioni Linux della serie Ethernet 700, Ottimizzazione delle prestazioni Linux della serie Ethernet 700, Ottimizzazione delle prestazioni Linux, Ottimizzazione delle prestazioni, Ottimizzazione |