Logo IntelSeria Intel ® Ethernet 700
Ghid de reglare a performanței Linux
NEX Cloud Networking Group (NCNG)
Rev. 1.2
decembrie 2024

Istoricul revizuirilor

Revizuire Data Comentarii
1.2 decembrie 2024 · S-au adăugat instrucțiuni suplimentare de gestionare a energiei.
· S-a adăugat Intel* Turbo Boost.
· S-a adăugat Backlog pentru dispozitive de rețea.
· S-au adăugat configurații și reglaje specifice platformei.
· S-au adăugat procesoare scalabile Intel* %eon* de a 4-a generație.
· S-a adăugat AMD EPYC.
· Verificare actualizată a capacităților hardware ale sistemului.
· iPerf2 actualizat.
· iPerf3 actualizat.
· Cozi Tx/Rx actualizate.
· Moderare întrerupere actualizată.
· Dimensiune inel actualizată.
· Ajustarea platformei actualizată (i40e nespecific).
· Setări BIOS actualizate.
· Control C-State actualizat.
· Scalarea frecvenței CPU actualizată.
· Setări actualizate ale aplicației.
· Setări actualizate ale sistemului de operare/kernel.
· Redirecționare IP actualizată.
· Latență scăzută actualizată.
august 2023 Modificările aduse acestui document includ:
· S-au adăugat referințe înrudite.
· Adăugat Asigurați-vă că pachetul DDP se încarcă corect.
· S-a adăugat iPerf2.
· S-a adăugat iPerf3.
· Netperf adăugat.
· Afinitate IRQ actualizată.
· S-au adăugat cozi Tx/Rx.
· Dimensiune inel actualizată.
· Cadre Jumbo adăugate.
· Adăugarea adaptorului.
· S-a adăugat Intel svr-info Tool.
1.0 martie 2016 Lansare inițială (Intel Public).

Introducere

Acest ghid are scopul de a oferi îndrumări pentru reglarea mediilor pentru performanța optimă a rețelei utilizând o NIC Intel ® Ethernet seria 700 în mediile Linux. Se concentrează pe hardware, driver și condițiile și setările sistemului de operare care ar putea îmbunătăți performanța rețelei. Trebuie remarcat faptul că performanța rețelei poate fi afectată de orice număr de influențe externe, doar cele mai comune și dramatice dintre acestea sunt tratate în acest ghid.
1.1 Referințe înrudite

Lista de verificare inițială

2.1 Actualizați versiunile de driver/firmware
Verificați versiunile de driver/firmware folosind ethtool -i ethx.
Actualizați următoarele după cum este necesar:

2.2 Citiți README
Verificați problemele cunoscute și obțineți cele mai recente instrucțiuni de configurare din README file incluse în pachetul sursă i40e.
2.3 Verificați dacă slotul PCI Express (PCIe) este x8
Unele sloturi PCIe x8 sunt de fapt configurate ca sloturi x4. Aceste sloturi au o lățime de bandă insuficientă pentru rata de linie completă cu dispozitive cu două porturi și cu patru porturi. În plus, dacă puneți un adaptor compatibil PCIe v3.0 într-un slot PCIe v2.x, nu puteți obține lățime de bandă completă. Driverul de dispozitiv software detectează această situație și scrie următorul mesaj în jurnalul de sistem:
Lățimea de bandă PCI-Express disponibilă pentru acest card nu este suficientă pentru o performanță optimă. Pentru o performanță optimă este necesar un slot PCI-Express x8.
Dacă apare această eroare, mutați adaptorul într-un slot PCIe v3.0 x8 adevărat pentru a rezolva problema.
2.4 Verificați capabilitățile hardware ale sistemului
La 10 Gbps, 25 Gbps și 40 Gbps Ethernet, există unele cerințe minime pentru CPU și sistem. În general, un procesor modern de clasă server și o configurație optimă a memoriei pentru platforma dvs. ar trebui să fie suficiente, dar nevoile variază în funcție de volumul de lucru. Toate canalele de memorie ar trebui să fie populate, iar modul de performanță a memoriei ar trebui să fie activat în BIOS. Verificați dacă CPU și configurația memoriei sunt capabile să suporte nivelul de performanță al rețelei de care aveți nevoie pentru sarcina dvs. de lucru.
NOTA
XL710 este un controler de 40 GbE. Adaptorul 2 x 40 GbE care utilizează acest controler nu este destinat să fie un 2 x 40 GbE, ci un 1 x 40 GbE cu un port de rezervă activ. Când încercați să utilizați traficul cu rată de linie care implică ambele porturi, comutatorul intern este saturat și lățimea de bandă combinată dintre cele două porturi este limitată la un total de SO Gbps.
2.4.1 Parametrii de pornire a kernelului
Dacă tehnologia Intel® Virtualization for Directed I/O (Intel® VT-d) este activată în BIOS, Intel recomandă ca IOMMU să fie în modul pass-through pentru performanța optimă a rețelei gazdă. Acest lucru elimină supraîncărcarea DMA pentru traficul gazdă, permițând în același timp mașinilor virtuale (VM) să beneficieze în continuare de beneficiile Intel® VT-d. Acest lucru se realizează prin adăugarea următoarei linii la parametrii de boot al nucleului: fommu-pt.
2.5 Asigurați-vă că pachetul DDP se încarcă corect
Driverele de bază 140ea și 140eb nu au suport direct pentru personalizarea dispozitivelor dinamice (DDP). Pentru a utiliza DDP cu dispozitive din seria 700, un DDP profile poate fi aplicat cu aplicația testpmd.
Pentru detalii despre DDP profiles și cum să aplicați un DDP profile cu testpmd pe dispozitivele din seria 700, consultați Ghidul tehnologic Intel® Ethernet 700 Dynamic Device Personalization (DDP).
Pentru a verifica dacă un DDP profile a fost încărcat cu succes:
testpmd> ddp get list 0 Profile numarul este: 1
NOTA
Dacă profile numărul este 0, nu este încărcat niciun pachet DDP. În cazul unei erori de încărcare a pachetului DDP, dispozitivul va fi implicit în modul sigur și multe caracteristici de performanță nu sunt disponibile. Dacă există erori legate de încărcarea pachetului DDP, acestea vor cauza probleme de performanță. Pentru pașii de depanare, consultați Ghidul tehnologiei Inte/* Ethernet 700 Series Dynamic Device Personalizare (DDP).

Măsurătorile de bază ale performanței și metodologia de reglare

3.1 Benchmarkuri de performanță a rețelei
Înainte de a începe un exercițiu de reglare, este important să aveți o măsură bună de bază a performanței rețelei dvs. De obicei, pe lângă măsurarea inițială a performanței aplicației/sarcinii de lucru specifice, este o idee bună să utilizați și un standard de referință de performanță a rețelei pentru a verifica dacă dispozitivul dvs. de rețea este într-o stare bună.
Pentru optimizarea unui singur sistem, netperf sau iperf și NetPIPE sunt instrumente solide, gratuite, opensource, care vă permit să accentuați o conexiune și să diagnosticați problemele de performanță.
Netperf este puternic atât pentru testarea debitului, cât și a latenței. NetPIPE este un instrument specific latenței, dar poate fi compilat pentru orice fel de mediu.
NOTA
Testul TCP_RR din netperf returnează latența într-o valoare de tranzacții/sec. Acesta este un număr dus-întors. Latența unidirecțională poate fi calculată folosind următoarea ecuație:
Latență (usec) = (1⁄2) / [Tranzacții/sec] * 1,000,000
3.1.1 iPerf2
Intel recomandă iperf2 față de iperf3 pentru majoritatea situațiilor de benchmarking datorită ușurinței de utilizare și suportului pentru mai multe fire într-o singură instanță de aplicație. Intel recomandă rularea cu opțiunea -P cu 2-4 fire pentru conexiuni 25G și aproximativ 4-6 fire pentru conexiuni 40G.

  • Pentru a rula trafic unidirecțional de la client la server: Comanda server example: iperf2 -s
    Comanda client example: iperf2 -c -P
  • Pentru a rula trafic bidirecțional de la client la server (și invers): Comanda server example: iperf2 –s –p
    Comanda client examppe:
    iperf2 -c -p -P -–SAU full-duplex
    iperf2 -c -p -P –d

NOTA
Ambele opțiuni –full-duplex și -d din iperf2 permit utilizatorului să efectueze teste bidirecționale. Cu toate acestea, opțiunea –full-duplex se concentrează în mod special pe testarea full duplex.
NOTA
Când testați iperf2 pe mai multe porturi de server, indicatorul -d poate fi adăugat la comanda server pentru a rula toate sesiunile de server în fundal din aceeași fereastră de terminal. Indicatorul -d poate fi folosit și atunci când comanda serverului este încorporată într-o buclă for într-un script.
NOTA
Când rulați testul de debit al rețelei cu un singur flux/fir (example: P1), este posibil ca procesoarele AMD să nu ofere debitul așteptat, în special NIC-uri cu lățime de bandă mai mare (dacă viteza este >= 25 G lățime de bandă). Ca rezultat, fixarea aplicației la anumite nuclee este necesară pentru a obține un randament mai mare. Consultați Setările aplicației la pagina 22.
3.1.2 iPerf3
Dacă se folosește iperf3, sunt necesare mai multe instanțe ale aplicației pentru a avansatage dintre cozile multi-thread-uri, RSS și hardware. Intel recomandă rularea cu cele 2-4 sesiuni de aplicație pentru conexiunile 25G și aproximativ 4-6 sesiuni pentru conexiunile 40G. Fiecare sesiune ar trebui să specifice o valoare unică de port TCP folosind opțiunea -p.

  • Pentru a rula trafic unidirecțional de la client la server:
    Comanda server examppe:
    iperf3 -s -p
    Comanda client examppe:
    iperf3 -c -p
  • Pentru a rula trafic bidirecțional de la client la server (și invers):
    Comanda server examppe:
    iperf3 –s –p
    Comanda client example: iperf3 -c -p -P –-bidir
  • Pentru a porni mai multe instanțe (threads) ale iperf3, recomandarea este să utilizați o buclă for pentru a mapa firele de execuție la porturile TCP și să rulați iperf3 în fundal folosind & pentru a crea mai multe procese în paralel.
    Comanda server example, începe 4 fire: port="”; pentru i în {0..3}; do port=520$i; bash -c „iperf3 -s -p $port &”; făcut; Comanda client example, start 4 fire – Transmit test port="”; pentru i în {0..3}; do port=520$i; bash -c „iperf3 -c $serverIP -p $port &”; făcut; Comanda client example, start 4 fire – Receive test port="”; pentru i în {0..3}; do port=520$i; bash -c „iperf3 -R -c $serverIP -p $port &”; făcut; Pentru conexiunile 40G, creșteți bucla for pentru a crea până la 6 instanțe/firuri.

NOTA
Când rulați testul de debit al rețelei cu un singur flux/fir (example: P1), este posibil ca procesoarele AMD să nu ofere debitul așteptat, în special o lățime de bandă mai mare
NIC-uri (dacă viteza este >= 25G lățime de bandă). Ca rezultat, fixarea aplicației la anumite nuclee este necesară pentru a obține un randament mai mare. Consultați Setările aplicației la pagina 22 și AMD EPYC la pagina 26.
3.1.3 netperf
Instrumentul netperf este o alegere puternică atât pentru testarea debitului, cât și a latenței.

  • Testul TCP_STREAM din netperf măsoară capacitățile de transfer ale dispozitivului. Comanda server example: netserver Comanda client example: netperf -t TCP_STREAM -l 30 -H
  • Testul TCP_RR din netperf returnează latența într-o valoare de tranzacții/secundă. Acesta este un număr dus-întors. Se recomandă utilizarea opțiunii -T x,x, în cazul în care x este CPU local pe dispozitiv. Latența unidirecțională poate fi calculată folosind: Latency(usec)=(1⁄2)/ [Transactions/sec]*1,000,\ Server command example: netserver
    Comanda client example: netperf -t TCP_RR -l 30 -H -T x,x
  • Pentru a porni mai multe instanțe (threads) de netperf, recomandarea este să utilizați o buclă for pentru a mapa firele de execuție la porturile TCP și să rulați netperf în fundal folosind & pentru a crea mai multe procese în paralel.
    Comanda server example, începe 8 fire:
    port=""; pentru i în {0..7}; do port=520$i; bash -c „netserver -L $serverIP -p $port &”; făcut;
    Comanda client example, începe 8 fire: port="”; pentru i în {0..7}; do port=520$i; bash -c „netperf -H $serverIP -p $port -t TCP_STREAM -l 30 &”; făcut;

3.2 Metodologia de acordare
Concentrați-vă pe o modificare de reglare la un moment dat, astfel încât să știți ce impact are fiecare modificare asupra testului dvs. Cu cât sunteți mai metodic în procesul de reglare, cu atât va fi mai ușor să identificați și să abordați cauzele blocajelor de performanță.

Reglarea setărilor driverului i40e

4.1 Afinitate IRQ
Configurarea afinității IRQ astfel încât întreruperile pentru diferite cozi de rețea să fie afinizate cu diferite nuclee ale procesorului poate avea un impact enorm asupra performanței, în special asupra testelor de debit multithread.
Pentru a configura afinitatea IRQ, opriți irqbalance și apoi fie utilizați scriptul set_irq_affinity din pachetul sursă i40e, fie fixați manual cozile. Dezactivați echilibrul IRQ pentru spațiul utilizatorului pentru a activa fixarea cozii:

  • systemctl dezactivează irqbalance
  • systemctl stop irqbalance
    Folosind scriptul set_irq_affinity din pachetul sursă i40e (recomandat):
  • Pentru a utiliza toate nucleele:
    [path-to-i40epackage]/scripts/set_irq_affinity -X all ethX
  • Pentru a utiliza numai nuclee pe socket-ul NUMA local: [path-to-i40epackage]/scripts/set_irq_affinity -X local ethX
  • De asemenea, puteți selecta o gamă de nuclee. Evitați utilizarea cpu0, deoarece rulează sarcini de temporizator. [path-to-i40epackage]/scripts/set_irq_affinity 1-2 ethX

NOTA
Scriptul de afinitate activează Transmit Packet Steering (XPS) ca parte a procesului de fixare atunci când este specificată opțiunea -x. Când XPS este activat, Intel vă recomandă să dezactivați irqbalance, deoarece echilibrarea nucleului cu XPS poate cauza performanțe imprevizibile. Scriptul de afinitate dezactivează XPS când este specificată opțiunea -X. Dezactivarea XPS și activarea cozilor simetrice este benefică pentru sarcinile de lucru în care se obține cea mai bună performanță atunci când traficul Tx și Rx este deservit pe aceeași pereche(e) de coadă.
Configurarea cozilor simetrice în Linux implică reglarea parametrilor driverului de interfață de rețea pentru a activa cozile de primire simetrice (Rx) și cozile de transmisie simetrice (Tx) pentru adaptoarele de rețea acceptate.
NOTA

  • Cozile simetrice sunt o caracteristică avansată de rețea și nu toate adaptoarele sau driverele de rețea din seria 700 le acceptă.
  • Asigurați-vă că aveți driverul și suportul hardware necesar înainte de a încerca să configurați cozi simetrice.

Pentru a configura cozi simetrice, urmați acești pași generali:

  1. Editați configurația interfeței de rețea File: Folosiți un editor de text (de example, vi, nano sau gedit) pentru a edita configurația interfeței de rețea file. The file se află de obicei în directorul /etc/sysconfig/network-scripts/ și are un nume precum ifcfg-ethX, unde ethX este numele interfeței de rețea.
  2. Adăugați parametrii de coadă simetrici. Adăugați următoarele linii la configurația interfeței de rețea file: ETHTOOL_OPTS=”rx-queues 8 tx-queues 8″
  3. Reporniți serviciul de rețea.
    După efectuarea modificărilor, reporniți serviciul de rețea pentru a aplica noua configurație. sudo systemctl reporniți rețeaua

Manual:

  • Găsiți procesoarele atașate fiecărui nod folosind: numactl –hardware lscpu
  • Găsiți măștile de biți pentru fiecare dintre procesoare:
  • Presupunând nuclee 0-11 pentru nodul 0: [1,2,4,8,10,20,40,80,100,200,400,800]
  • Găsiți IRQ-urile alocate portului care este atribuit: grep ethX /proc/interrupts și notați valorile IRQ De ex.ample, 181-192 pentru cei 12 vectori încărcați.
  • Ecou valoarea afinității SMP în intrarea IRQ corespunzătoare. Rețineți că acest lucru trebuie făcut pentru fiecare intrare IRQ: echo 1 > /proc/irq/181/smp_affinity echo 2 > /proc/irq/182/smp_affinity echo 4 > /proc/irq/183/smp_affinity Afișați afinitatea IRQ:
  • Pentru a afișa afinitatea IRQ pentru toate nucleele: /scripts/set_irq_affinity -s ethX
  • Pentru a afișa numai nuclee pe soclu-ul NUMA local: /scripts/set_irq_affinity -s local ethX
  • De asemenea, puteți selecta o gamă de nuclee: /scripts/set_irq_affinity -s 40-0-8,16 ethX

NOTA
Scriptul set_irq_affinity acceptă marcajul -s în driverul i40e versiunea 2.16.11 și ulterioară.
4.2 Cozi Tx/Rx
Numărul implicit de cozi activate pentru fiecare port Ethernet de către driver la inițializare este egal cu numărul total de procesoare disponibile pe platformă. Acest lucru funcționează bine pentru multe platforme și configurații ale sarcinilor de lucru. Cu toate acestea, în platformele cu număr mare de nuclee și/sau densitate mare de porturi Ethernet, această configurație poate provoca conflicte de resurse. Prin urmare, ar putea fi necesară în unele cazuri modificarea implicită pentru fiecare port din sistem.
Numărul implicit de cozi Tx/Rx poate varia în funcție de modelul specific și versiunea driverului. Numărul de cozi poate fi ajustat folosind comanda ethtool -L enumerată mai jos.
NOTA
În aceste cazuri, Intel recomandă să reduceți numărul de cozi implicite pentru fiecare port la cel mult numărul de procesoare disponibile în nodul NUMA local pe portul adaptorului. În unele cazuri, atunci când se încearcă echilibrarea resurselor pe implementări cu un număr mare de porturi, ar putea fi necesar să se reducă și mai mult acest număr.
Pentru a modifica configurația cozii:
Următorul example setează portul la 32 cozi Tx/Rx: ethtool -L ethX combinat 32
Exampieșire le:
ethtool -l ethX
Parametri de canal pentru ethX: Maxime prestabilite:
RX: 96
TX: 96
Altele: 1
Combinat: 96
Setări hardware curente:
RX: 0
TX: 0
Altele: 1
Combinat: 32
4.3 Moderarea întreruperii
Moderarea adaptivă a întreruperilor este activată în mod implicit și este concepută pentru a oferi o abordare echilibrată între utilizarea scăzută a CPU și performanță ridicată. Cu toate acestea, puteți încerca să reglați manual setările de întrerupere pentru a se potrivi cu cazul dvs. de utilizare.
Intervalul de 0-235 microsecunde oferă un interval efectiv de 4,310 până la 250,000 de întreruperi pe secundă. Valoarea lui rx-μsecs-high poate fi setată independent de rx-μsecs și tx-μsecs în aceeași comandă ethtool și este, de asemenea, independentă de algoritmul adaptiv de moderare a întreruperilor. Hardware-ul de bază acceptă granularitatea în intervale de 2 microsecunde, astfel încât valorile adiacente ar putea duce la aceeași rată de întrerupere.

  • Pentru a dezactiva moderarea întreruperilor adaptive: ethtool -C ethX adaptive-rx off adaptive-tx off
  • Pentru a activa moderarea întreruperilor adaptive: ethtool -C ethX adaptive-rx on adaptive-tx on

Un loc bun de început pentru reglarea generală este 84 μs sau ~12000 întreruperi/s. Dacă vedeți că contoarele rx_dropped rulează în timpul traficului (folosind ethtool -S ethX), atunci probabil că aveți un procesor prea lent, nu sunt suficiente buffer-uri din dimensiunea inelului adaptorului (ethtool -G) pentru a reține pachete timp de 84 μs sau la o rată de întrerupere scăzută.

  • Pentru a seta moderarea întreruperilor la o rată fixă ​​de întrerupere de 84 μs între întreruperi (12000 întreruperi/s): ethtool -C ethX adaptive-rx off adaptive-tx off rx-usecs 84 tx-usecs 84 Următoarea valoare pe care trebuie să o încercați, dacă nu aveți o utilizare maximă a CPU, este 62 μs. Acest lucru folosește mai mult CPU, dar deservește bufferele mai rapid și necesită mai puțini descriptori (dimensiunea inelului, ethtool -G).
  • Pentru a seta moderarea întreruperilor la o rată fixă ​​de întreruperi de 62 de utilizări între întreruperi (16000 de întreruperi/s). ethtool -C ethX adaptive-rx off adaptive-tx off rx-usecs 62 tx-usecs 62
    Dacă contoarele rx_dropped cresc în timpul traficului (folosind ethtool -S ethX), probabil că aveți un procesor prea lent, nu sunt suficiente buffer-uri din dimensiunea inelului adaptorului (ethtool -G) sau o rată de întrerupere prea mică. Dacă nu sunteți la maxim de utilizare a CPU, puteți crește rata de întrerupere prin scăderea valorii ITR. Aceasta utilizează mai mult CPU, dar serviciile tamponează mai repede și necesită mai puțini descriptori (dimensiunea inelului, ethtool -G).
    Dacă procesorul dumneavoastră este la 100%, nu este recomandată creșterea ratei de întrerupere. În anumite circumstanțe, cum ar fi o sarcină de lucru legată de CPU, este posibil să doriți să creșteți valoarea μs pentru a permite mai mult timp CPU pentru alte aplicații.
    Dacă aveți nevoie de performanță cu latență scăzută și/sau aveți o mulțime de CPU de alocat procesării în rețea, puteți dezactiva complet moderarea întreruperilor, ceea ce permite întreruperilor să se declanșeze cât mai repede posibil.
  • Pentru a dezactiva moderarea întreruperii ethtool -C ethX adaptive-rx off adaptive-tx off rx-usecs 0 tx-usecs 0

NOTA
Când rulați cu moderarea întreruperilor dezactivată, rata de întrerupere pe fiecare coadă poate fi foarte mare. Luați în considerare includerea parametrului rx-usec-high pentru a seta o limită superioară a ratei de întrerupere. Următoarea comandă dezactivează moderarea adaptivă a întreruperilor și permite un maxim de 5 microsecunde înainte de a indica că recepția sau transmisia a fost finalizată. În loc să rezulte până la 200,000 de întreruperi pe secundă, limitează întreruperile totale pe secundă la 50,000 prin parametrul rx-usec-high. # ethtool -C ethX adaptive-rx off adaptive-tx off rx-usecs-high 20 rx-usecs 5 txusecs 5 Încercați să ajustați temporizatorul de coalescere de transmisie/recepție/prioritate mare mai mare (80/100/150/200) sau mai mică (25/20/10) sau mai mică (5/XNUMX/XNUMX) pentru a găsi valoarea optimă pentru sarcina de lucru.
4.4 Dimensiunea inelului
Dacă vedeți contoare rx_dropped în ethtool -S ethX (rx_dropped, rx_dropped.nic) sau suspectați presiunea cache-ului cu mai multe cozi active, puteți încerca să ajustați dimensiunea inelului de la valoarea implicită. Valoarea implicită este 512, valoarea maximă este 4096.

  • Pentru a verifica valorile curente: ethtool -g ethX
    Dacă se suspectează că lipsa tamponării cauzează scăderi la rata de întrerupere curentă, ați putea încerca mai întâi maximul, apoi minimul, apoi continuați într-o căutare binară până când vedeți performanța optimă.
    Dacă se suspectează presiunea cache-ului (multe cozi active), reducerea buffer-urilor implicite poate ajuta Intel ® Data Direct I/O (Intel ® DDIO) să funcționeze mai eficient. Intel recomandă să încercați 128 sau 256 per coadă, știind că o creștere a ratei de întrerupere prin ethtool -C ar putea fi necesară pentru a evita o creștere a rx_dropped.
  • Pentru a seta dimensiunea inelului la o valoare fixă: ethtool -G eth12 rx 256 tx 256

NOTA
Pentru a remedia pierderile de pachete Rx găsite cu ethtool -S ethX|grep drop, luați în considerare creșterea dimensiunii inelului la 4096. Experimentați pentru a găsi cea mai bună setare pentru volumul de lucru, dar aveți grijă la utilizarea excesivă a memoriei cu valori mai mari.
4.5 Controlul debitului
Controlul fluxului Layer 2 poate afecta considerabil performanța TCP și se recomandă să fie dezactivat pentru majoritatea sarcinilor de lucru. O posibilă excepție este traficul în rafală, în cazul în care exploziile nu sunt de lungă durată.
Controlul fluxului este dezactivat implicit.

  • Pentru a activa controlul fluxului: ethtool -A ethX rx on tx on
  • Pentru a dezactiva controlul fluxului: ethtool -A ethX rx off tx off

NOTA
Trebuie să aveți un partener de legătură capabil de controlul fluxului pentru a activa cu succes controlul fluxului.
4.6 Cadre Jumbo
Când mediul de trafic așteptat constă în blocuri mari de date transferate, ar putea fi benefic să activați caracteristica cadru jumbo. Suportul Jumbo Frames este activat prin schimbarea Unității de transmisie maximă (MTU) la o valoare mai mare decât valoarea implicită de 1500. Acest lucru permite dispozitivului să transfere date în pachete mai mari în mediul de rețea. Această setare ar putea îmbunătăți debitul și poate reduce utilizarea CPU pentru sarcini mari de lucru I/O. Cu toate acestea, ar putea afecta pachetele mici sau sarcinile de lucru sensibile la latență.
NOTA
Cadrele Jumbo sau setarea MTU mai mare trebuie să fie configurate corect în mediul dvs. de rețea.
Utilizați comanda ifconfig pentru a crește dimensiunea MTU. De example, introduceți următoarele, unde este numărul interfeței: ifconfig mtu 9000 în sus
Alternativ, puteți utiliza comanda ip după cum urmează: ip link set mtu 9000 dev ip link set up dev

Reglare platformă (i40e nespecific)

5.1 Setări BIOS

  • Activați Intel® VT-d pentru sarcinile de lucru de virtualizare.
  • Hyper-threadingul (procesoare logice) poate afecta performanța. Experimentați cu el activat sau dezactivat pentru volumul dvs. de lucru.
  • Intel® Turbo Boost permite nucleelor ​​CPU să funcționeze la o frecvență mai mare decât frecvența de bază a procesorului. Activarea Intel® Turbo Boost poate îmbunătăți performanța pentru multe sarcini de lucru, dar consumă mai multă energie pentru a menține nucleele la o frecvență mai mare. Experimentați cu Turbo Boost dezactivat/pornit pentru volumul dvs. de lucru.

NOTA
Frecvențele turbo nu sunt garantate dacă platforma se confruntă cu o utilizare generală ridicată a procesorului. Frecvențele turbo de bază mai înalte sunt reduse pe măsură ce utilizarea generală a procesorului crește.
5.2 Gestionarea energiei
Gestionarea energiei poate afecta performanța, în special în sarcinile de lucru cu latență scăzută. Dacă performanța este o prioritate mai mare decât reducerea consumului de energie, Intel vă recomandă să experimentați cu limitarea efectelor gestionării energiei. Există multe moduri diferite de a limita gestionarea energiei, prin instrumentele sistemului de operare, setările BIOS și parametrii de pornire a kernelului. Alegeți cea mai bună metodă și nivel pentru a se potrivi mediului dvs.
5.2.1 Controlul C-State
Limitarea intrării în starea C la CO sau C1 îmbunătățește performanța și crește utilizarea energiei.
Dezactivarea introducerii stării pachetului CPU C6 poate îmbunătăți performanța rețelei. Cu toate acestea, acest lucru crește consumul de energie.
Sunt disponibile următoarele opțiuni:

  • Controlați dinamic intrarea în starea C:
    Deschide
    /dev/cpu_dma_latency și scrieți latența maximă admisă.

NOTA
Există un mic program numit cpudmalatency.c care poate fi descărcat din comunitatea open source, compilat și rulat din linia de comandă pentru a face exact acest lucru.
Următorul example permite cinci μs de timp de trezire și, astfel, permite intrarea C1: cpudmalatency 5 &

  • Limitați starea C maximă în setările de pornire a nucleului:
    Pentru procesoarele Intel: intel_idle.max_cstates=1
    Pentru procesoarele non-Intel: procesor.max_cstates=1
  • Utilizați comanda cpupower pentru a verifica și dezactiva starea CPU C6: Verificați: cpupower monitor sau cpupower idle-info
    Dezactivați C6: cpupower idle-set -d3 sau
    Dezactivați C-States: cpupower idle-set -D0

Note:

  1. Dezactivați stările C pe procesor dacă serverul are procesor(e) scalabil(e) Intel® a patra generație Intel® Xeon®. Când Hyper Threading este activat sau dezactivat, dezactivarea stărilor inactiv (-D4) împiedică nucleele să intre în stări de consum redus în perioadele de inactivitate și reduce latența CPU pentru tranziția între stările inactiv și active.
  2. Gestionarea puterii procesorului scalabil Intel® de a patra generație Intel® Xeon® este extrem de agresivă. Pentru a evita ca nucleele să intre în stări de putere redusă, încercați să reduceți numărul de nuclee în uz pentru a le menține treji mai mult timp (ethtool -L combinate ). De asemenea, legați întreruperile la anumite nuclee folosind afinitatea irq setată (cel mai adesea cu -x local sau listă de nuclee CPU) și asigurați-vă că volumul de lucru rulează pe aceleași nuclee cu taskset sau numactl. Acest lucru îmbunătățește performanța prin menținerea nucleelor ​​active și prin optimizarea gestionării întreruperilor.

Activați C6:
cpupower idle-set -d3
Activați C-States:
cpupower idle-set -E

  • O altă metodă este să utilizați instrumentul reglat (inclus în multe distribuții Linux) pentru a seta un profesionist de performanțăfile. Aceste profiles modifica mai multe setări ale sistemului de operare care pot afecta performanța multor aplicații. S-a constatat că network-throughput profile oferă îmbunătățiri pentru majoritatea sarcinilor de lucru.
    Verifica:
    tuned-adm activ
    Set:
    tuned-adm profile debitul rețelei
    NOTA
    Serviciul ajustat trebuie să ruleze pentru comenzile de mai sus. Pentru a verifica/reporni, tuned: systemctl status tuned systemctl restart tuned
    De asemenea, puteți interzice orice intrare C-state adăugând următoarele la linia de pornire a nucleului:
    inactiv = sondaj
  • Limitați starea C prin setările de gestionare a energiei BIOS ale sistemului, care ar putea avea un profesionist de performanțăfile disponibil.
    Instrumente precum turbostat sau x86_energy_perf_policy pot fi folosite pentru a verifica sau a seta setările de gestionare a energiei.

5.2.2 Gestionarea energiei PCIe
Active-State Power Management (ASPM) permite o stare de putere mai scăzută pentru legăturile PCIe atunci când acestea nu sunt în utilizare activă. Acest lucru poate cauza o latență mai mare pe dispozitivele de rețea PCIe, așa că Intel vă recomandă să dezactivați ASPM pentru sarcinile de lucru sensibile la latență. Dezactivați ASPM adăugând următoarele la linia de pornire a nucleului: pcie_aspm=off
5.2.3 Scalarea frecvenței procesorului
Scalarea frecvenței CPU (sau scalarea vitezei procesorului) este o tehnică de gestionare a energiei Linux în care viteza ceasului sistemului este ajustată din mers pentru a economisi energie și căldură. La fel ca și stările C, acest lucru poate provoca latență nedorită pe conexiunile de rețea.
Instrumentul cpupower poate fi folosit și pentru a verifica și modifica valorile implicite și limitele de performanță ale procesorului:

  • Verificați: monitor de putere cpu sau
  • Setați procesoarele în modul de performanță: cpupower frequency-set -g performance

NOTA
Modificările limitelor de frecvență ale procesorului pot avea un impact asupra multor sarcini de lucru și pot dezactiva alte caracteristici, cum ar fi modul turbo CPU.
Pentru a dezactiva scalarea frecvenței CPU, dezactivați serviciul de alimentare a CPU prin următoarele comenzi:
systemctl stop cpupower.service
systemctl dezactivați cpupower.service
5.2.4 Ghid suplimentar de gestionare a energiei
Detalii suplimentare sunt furnizate în acest over la nivel înaltview dintre multe dintre funcțiile de gestionare a energiei din procesoarele scalabile Intel® Xeon® de a treia generație, precum și îndrumări despre modul în care aceste funcții pot fi integrate la nivel de platformă: https://networkbuilders.intel.com/solutionslibrary/power-management-technologyoverview-technology-guide
5.3 Intel® Turbo Boost
Intel® Turbo Boost face procesorul mai rapid atunci când este necesar, dar poate consuma energie suplimentară. Oprirea Turbo Boost menține procesorul la o viteză constantă, oferindu-vă un nivel de performanță constant pentru anumite sarcini de lucru.
5.4 Firewall-uri
Firewall-urile pot afecta performanța, în special performanța latenței.
Dezactivați iptables/firewalld dacă nu este necesar.
5.5 Setări aplicație
Adesea, un singur fir (care corespunde unei singure coazi de rețea) nu este suficient pentru a obține lățimea de bandă maximă. Unele arhitecturi de platformă, cum ar fi AMD, tind să arunce mai multe pachete Rx cu un singur fir în comparație cu platformele cu procesoare bazate pe Intel.
Luați în considerare utilizarea unor instrumente precum taskset sau numactl pentru a fixa aplicațiile la nodul NUMA sau nucleele CPU locale pe dispozitivul de rețea. Pentru unele sarcini de lucru, cum ar fi I/O de stocare, mutarea aplicației pe un nod non-local oferă beneficii.
Experimentați cu creșterea numărului de fire utilizate de aplicația dvs., dacă este posibil.
5.6 Versiunea Kernel
Cele mai multe nuclee moderne din cutie sunt optimizate în mod rezonabil pentru performanță, dar, în funcție de cazul dvs. de utilizare, actualizarea nucleului ar putea oferi performanțe îmbunătățite. Descărcarea sursei vă permite, de asemenea, să activați/dezactivați anumite funcții înainte de a construi nucleul.
5.7 Setări sistem de operare/kernel
Consultați ghidurile de reglare a sistemului de operare, cum ar fi Ghidul de reglare a performanței rețelei Red Hat Enterprise Linux, pentru mai multe informații despre reglarea generală a sistemului de operare.
Câțiva parametri comuni de reglat sunt enumerați în tabelul următor. Rețineți că acestea sunt doar puncte de pornire sugerate, iar schimbarea acestora față de valorile implicite poate crește resursele utilizate în sistem. Deși creșterea valorilor poate ajuta la îmbunătățirea performanței, este necesar să experimentați cu diferite valori pentru a determina ce funcționează cel mai bine pentru un anumit sistem, volum de lucru și tip de trafic.
Parametrii nucleului sunt configurabili folosind utilitarul sysctl în Linux, așa cum este indicat mai jos.
La view valorile implicite pentru rmem și wmem pe sistem:
sysctl net.core.rmem_default
sysctl net.core.wmem_default
Setați valorile la maxim (16 MB):
sysctl -w net.core.rmem_max=16777216
sysctl -w net.core.wmem_max=16777216
Dimensiunile bufferului de socket, cunoscute și sub numele de buffer de recepție (rmem) și buffer de transmisie (wmem), sunt parametri de sistem care specifică cantitatea de memorie rezervată pentru traficul de rețea de intrare și de ieșire.
Rularea sysctl fără argumentul -w listează parametrul cu setarea curentă.

Setarea stivei Descriere
net.core.rmem_default Dimensiunea implicită a ferestrei de primire
net.core.wmem_default Dimensiunea implicită a ferestrei de transmisie
net.core.rmem_max Dimensiunea maximă a ferestrei de recepție
net.core.wmem_max Dimensiunea maximă a ferestrei de transmisie
net.core.optmem_max Opțiuni maxime de memorie tampon
net.core.netdev_max_backlog Întârziere de pachete neprocesate înainte ca nucleul să înceapă să cadă
net.ipv4.tcp_rmem Rezervor de memorie pentru bufferele de citire TCP
net.ipv4.tcp_wmem Rezervor de memorie pentru bufferele de trimitere TCP

Kernel-ul, stiva de rețea, gestionarea memoriei, viteza CPU și parametrii de gestionare a energiei pot avea un impact mare asupra performanței rețelei. O recomandare obișnuită este să se aplice rețelei de transfer profile folosind comanda tuned. Aceasta modifică câteva setări ale sistemului de operare pentru a oferi preferință aplicațiilor de rețea.
Verifica:
tuned-adm activ
Set:
tuned-adm profile debitul rețelei
5.8 Backlog dispozitiv de rețea
Această caracteristică ajută la îmbunătățirea performanței rețelei prin gestionarea eficientă a traficului de intrare, reducerea pierderii de pachete, scăderea latenței și creșterea debitului. Acest lucru duce la o experiență de utilizator mai bună și un răspuns mai rapid al sistemului.
În mod implicit, este activat în majoritatea sistemelor de operare Linux. Pentru a verifica valoarea implicită:
sysctl net.core.netdev_max_backlog
Valoarea maximă pentru netdev_max_backlog poate varia în funcție de factori precum versiunea kernelului, hardware-ul, memoria și volumul de lucru. În multe cazuri, 8192 este văzut ca o valoare bună. sysctl -w net.core.netdev_max_backlog=8192
5.9 Configurații și reglaje specifice platformei
5.9.1 Procesoare scalabile Intel® Xeon® de a patra generație

Gestionarea puterii procesorului Intel® a 4-a generație Intel® Xeon® Scalable este extrem de agresivă în comparație cu procesoarele Intel® Xeon® Scalable a 3-a generație. Pentru a evita ca nucleele să intre în stări de putere redusă, încercați să reduceți numărul de nuclee utilizate pentru a le menține treji mai mult timp.
Setări Bios recomandate pentru cea mai înaltă performanță

  1. Activarea/dezactivarea hyperthreading-ului (pe baza cerințelor de sarcină de lucru și a obiectivelor de performanță) pe CPU.
  2. Setați sistemul profile la Performanță pentru performanță maximă.
    NOTA
    Acest lucru duce la un consum mai mare de energie
  3. Setați gestionarea puterii procesorului la Performanță maximă pentru a acorda prioritate performanței maxime a procesorului față de eficiența energetică.
  4. Activați Turbo Boost. Dezactivarea Turbo Boost în setările BIOS-ului sistemului împiedică, de obicei, CPU-ul să-și mărească dinamic viteza ceasului dincolo de frecvența de bază.
  5. NOTA
    Dezactivarea Turbo Boost poate fi potrivită pentru anumite cazuri de utilizare în care performanța consecventă, eficiența energetică sau gestionarea termică sunt prioritare față de performanța maximă.
  6. Dezactivați caracteristica SR-IOV (Single Root I/O Virtualization), dacă sistemul nu utilizează tehnologii de virtualizare.
  7. Dezactivați stările C pentru a instrui procesorul să rămână activ și să împiedice intrarea în stări de inactivitate mai profunde.
  8. Dezactivați C1E, pentru a vă asigura că CPU rămâne activ și nu intră în starea inactivă C1E.
  9. Setați frecvența uncore la maxim pentru a instrui sistemul să funcționeze la cea mai înaltă frecvență disponibilă.
  10. Pe platformele Dell, setați emularea nucleului Multiple APIC Description Table (MADT) la Linear (sau Round-Robin, în funcție de BIOS) pentru a oferi o mapare clară și previzibilă a nucleelor ​​CPU.

Reglaje recomandate la nivel de sistem de operare pentru performanță optimizată

  1. Setați regulatorul de scalare a frecvenței CPU la performanță. cpupower frequency-set -g performance cpupower frequency-info
  2. Dezactivați C-States. cpupower idle-set -D0
  3. Setați bufferele de bază Rx (rmem) și Tx (wmem) la valoarea maximă. sysctl -w net.core.rmem_max=16777216 sysctl -w net.core.wmem_max=16777216
  4. Setați întârzierea dispozitivului de rețea. sysctl -w net.core.netdev_max_backlog=8192
  5. Set tuned profile (în funcție de sarcina de lucru pentru debit/latență).
    tuned-adm profile debitul rețelei

Reglaje recomandate la nivel de adaptor pentru performanță optimizată

  1. Limitați numărul de cozi de utilizat pentru traficul aplicației. Utilizați numărul minim de cozi necesare pentru a menține active nucleele CPU asociate pentru a le împiedica să intre în stări de inactivitate mai profunde (ajustați pentru volumul de lucru): ethtool -L combinat 32
  2. Setați ratele de moderare a întreruperilor. ettool -C adaptive-rx off adaptive-tx off rx-usecs-high 50 rx-usecs 50 tx-usecs 50
    Încercați să reglați temporizatorul de coalescere de transmisie/recepție/prioritate înaltă mai mare (80/100/150/200) sau mai mic (25/20/10/5) pentru a găsi valoarea optimă pentru volumul de lucru.
  3. Setați dimensiunile inelului Rx/Tx. ethtool -G rx 4096 tx 4096
    NOTA
    Dacă vedeți că pachetul Rx scade cu ethtool -S| grep drop, încercați să reduceți dimensiunea inelului la <4096. Încercați să găsiți valoarea optimă pentru volumul de lucru în care pachetele nu sunt aruncate.
  4. Setați afinitatea IRQ. Utilizați nuclee locale la NIC sau mapare specifică nuclee (unde # nuclee este egal cu numărul de cozi setat în 1 la pagina 26. systemctl stop irqbalance set_irq_affinity -X local SAU set_irq_affinity -X

5.9.2 AMD EPYC
Procesoarele AMD EPYC sunt procesoare puternice create pentru servere și centre de date, construite pe arhitectura Zen AMD. Setările de mai jos sunt din seria AMD EPYC de a 4-a generație.
Setări BIOS recomandate pentru cea mai înaltă performanță

  1. Activați modul personalizat pentru a permite utilizatorilor să ajusteze performanța procesorului, consumul de energie și alte setări. Acest lucru ajută la reglarea fină a sistemului pentru cel mai bun echilibru între performanță și eficiență energetică.
  2. Activați creșterea performanței de bază pentru a permite procesorului să își mărească automat viteza pentru a face față sarcinilor mai intense, îmbunătățind performanța generală.
  3. Dezactivați controlul global C-state, pentru a preveni intrarea CPU în stări mai profunde de economisire a energiei cunoscute sub numele de C-states, care pot menține capacitatea de răspuns.
    NOTA
    Dezactivarea stărilor C poate cauza un consum suplimentar de energie și poate crește temperaturile termice. Monitorizați ambele pentru volumul de muncă.
  4. Activați/dezactivați Simultaneous Multithreading (SMT) pe CPU, în funcție de cerințele de sarcină de lucru și de obiectivele de performanță. SMT este echivalent cu Hyper Threading pe procesoarele Intel.
    NOTA
    Pentru performanță optimizată, consultați Reglarea setărilor driverului i40e la pagina 13 și Reglarea platformei (i40e nespecifică) la pagina 19 pentru reglarea la nivel de adaptor și OS recomandată.

Lipirea adaptorului

Legătura Linux este o caracteristică puternică care poate îmbunătăți semnificativ performanța rețelei, redundanța și toleranța la erori în mediile server. Cu toate acestea, este important să rețineți că necesită hardware de rețea compatibil și configurație adecvată atât pe server, cât și pe comutator pentru a funcționa corect.
Driverul de legătură în Linux vă permite să agregați mai multe interfețe fizice de rețea într-o interfață legată. Această interfață legată apare ca o singură interfață de rețea virtuală pentru sistemul de operare și aplicații.
NOTA
Legătura este o interfață logică, deci nu este posibil să setați afinitatea CPU direct pe interfața de legătură (de ex.ample, bond0). Adică, nu are control direct asupra gestionării întreruperilor sau asupra afinității CPU. Afinitatea CPU trebuie configurată pentru interfețele de bază care fac parte din legătura.
Lipirea oferă mai multe moduri de operare, fiecare cu propriile sale caracteristici.

Modul  Tip
0 Round Robin
1 Backup activ
2 XOR
3 Difuzare
4 LACP
5 Transmite echilibrul de sarcină
6 Echilibrul de sarcină adaptiv

Există diferite metode de a crea o legătură în Linux. Una dintre cele mai comune metode este utilizarea configurației rețelei files (de example, /etc/network/interfaces sau /etc/sysconfig/network-scripts/ifcfg-bondX).
Configurare utilizând Configurarea rețelei Files
Următorii pași creează legături prin configurația rețelei files.

  1. Selectați două sau mai multe porturi NIC pentru conectare (de example, ethX și ethY)
  2. Deschideți Configurarea NIC Files sub /etc/sysconfig/network-scripts/ pentru interfața NIC necesară (de exempluample, vi ifcfg-ethX și vi ifcfg-ethY) și adăugați următorul text:
    MASTER=bondN [Notă: N este un număr întreg pentru a menționa numărul legăturii.] SLAVE=da
  3. Creați un script de rețea de obligațiuni file folosind vi /etc/sysconfig/networkscripts/ifcfg-bondN și introduceți următorul text:
    DEVICE=bondN [Notă: N este un număr întreg pentru a menționa numărul de legătură] ONBOOT=da USERCTL=no BOOTPROTO=dhcp (sau) niciunul
    IPADDR=200.20.2.4 [necesar dacă BOOTPROTO=niciunul] NETMASK=255.255.255.0 [necesar dacă BOOTPROTO=niciunul] NETWORK=200.20.2.0 [obligatoriu dacă BOOTPROTO=niciunul] BROADCAST=200.20.2.255. BOOTPROTO=none] BONDING_OPTS="mode=1 miimon=100″
    NOTA
    Modul poate fi orice număr întreg de la 0 la 6 în funcție de cerință.
  4. Reporniți serviciile de rețea utilizând service network restart sau systemctl restart NetworkManager.service

Depanare de performanță

7.1 Utilizarea CPU
Verificați utilizarea CPU pe nucleu în timp ce volumul de lucru rulează.
Rețineți că utilizarea pe nucleu este mai relevantă pentru performanță decât utilizarea generală a CPU, deoarece oferă o idee despre utilizarea CPU pe coada de rețea. Dacă aveți doar câteva fire de execuție care rulează trafic de rețea, atunci este posibil să aveți doar câteva nuclee utilizate. Cu toate acestea, dacă acele nuclee sunt la 100%, atunci debitul rețelei este probabil limitat de utilizarea CPU și este timpul să efectuați următoarele:

  1. Reglați moderarea IRQ/dimensiunea soneriei așa cum este detaliat în Moderare întrerupere.
  2. Creșteți numărul de fire de execuție a aplicației pentru a împărți sarcina procesorului pe mai multe nuclee. Dacă toate nucleele rulează la 100%, atunci aplicația dvs. ar putea fi legată de CPU și nu de rețea.

Instrumente disponibile în mod obișnuit:

  • top
    — Apăsați 1 pentru a extinde lista de procesoare și a verifica care sunt utilizate.
    — Observați nivelul de utilizare.
    — Observați care procese sunt listate ca fiind cele mai active (în partea de sus a listei).
  • mpstat
    Următorul exampLinia de comandă a fost testată pe Red Hat Enterprise Linux 7.x.
    Afișează utilizarea procesorului per nucleu (găsind procentul total inactiv și scăzând din 100) și evidențiază valorile de peste 80% în roșu. mpstat -P TOATE 1 1 | grep -v Medie | coada -n +5 | cap -n -1 | awk '{ print (100-$13)}' | egrep -color=întotdeauna „[^\.][8-9][0-9][\.]?.*|^[8-9][0-9][\.]?.*| 100|' | coloană
  • perf top Căutați unde sunt petrecute ciclurile.

7.2 Contoare i40e
Driverul i40e oferă o listă lungă de contoare pentru depanarea și monitorizarea interfeței prin comanda ethtool -S ethX. Poate fi util să urmăriți rezultatul în timp ce o sarcină de lucru rulează și/sau să comparați valorile contorului înainte și după rularea unei sarcini de lucru.

  • Pentru a obține o descărcare completă a contoarelor i40e: ethtool -S ethX
  • Pentru a urmări doar contoare diferite de zero: watch -d (ethtool -S ethX) | egrep -v :\ 0 | coloană
    Câteva lucruri de căutat:
  • rx_dropped înseamnă că procesorul nu deservește bufferele suficient de rapid.
  • port.rx_dropped înseamnă că ceva nu este suficient de rapid în slot/memorie/sistem.

7.3 Contoare de rețea
Verificați netstat -s înainte/după rularea unei sarcini de lucru.
Netstat colectează informații de rețea de la toate dispozitivele de rețea din sistem. Prin urmare, rezultatele ar putea fi afectate de alte rețele decât rețeaua testată. Ieșirea de la netstat -s poate fi un bun indicator al problemelor de performanță în sistemul de operare Linux sau kernel. Consultați ghidurile de reglare a sistemului de operare, cum ar fi Ghidul de reglare a performanței rețelei Red Hat Enterprise Linux, pentru mai multe informații despre reglarea generală a sistemului de operare.
7.4 Jurnalele de sistem
Verificați jurnalele de sistem pentru erori și avertismente (/var/log/messages, dmesg).
7.5 Instrumentul Intel svr-info
Intel oferă un instrument svr-info (vezi https://github.com/intel/svr-info) pentru Linux care captează detalii relevante hardware și software de pe un server. Ieșirea svr-info poate fi extrem de utilă pentru a identifica blocajele sistemului sau setările/ajustările care nu sunt optimizate pentru volumul de lucru. Când deschideți un caz de asistență cu Intel pentru probleme de performanță legate de Ethernet, asigurați-vă că includeți ieșirea svr-info (text file) pentru fiecare server Linux din configurația de testare.

  1. Descărcați și instalați svr-info:
    wget -qO- https://github.com/intel/svr-info/releases/latest/download/svrinfo.tgz| tar xvz cd svr-info
    ./svr-info
    > hostname.txt
  2. Colectați rezultatul:
    ./svr-info > hostname.txt
  3. Atașați un text (.txt) file pentru fiecare server la cazul dumneavoastră de asistență Intel pentru analiză.

Recomandări pentru scenarii comune de performanță

8.1 Redirecționare IP

  • Actualizați nucleul.
    Unele nuclee recente din distribuție au performanță de rutare degradată din cauza modificărilor nucleului în codul de rutare, începând cu eliminarea cache-ului de rutare din cauza securității. Nucleele recente din afara distribuției ar trebui să aibă patch-uri care atenuează impactul asupra performanței al acestor modificări și ar putea oferi performanțe îmbunătățite.
  • Dezactivați hyper-threading (nuclee logice).
  • Editați parametrii de pornire a nucleului.
    — Forțați iommu dezactivat (intel_iommu=off sau iommu=off) din linia de pornire a kernelului, cu excepția cazului în care este necesar pentru virtualizare
    — Opriți gestionarea energiei: processor.max_cstates=1 idle=poll pcie_aspm=off
  • Limitați numărul de cozi pentru a fi egal cu numărul de nuclee de pe soclul local (12 în acest example). ethtool -L ethX combinat 12
  • Pin întreruperi numai la priza locală. set_irq_affinity -X local ethX SAU set_irq_affinity -X local ethX
    NOTA
    -X sau -x pot fi folosite în funcție de volumul de lucru.
  • Schimbați dimensiunile inelului Tx și Rx după cum este necesar. O valoare mai mare necesită mai multe resurse, dar poate oferi rate de expediere mai bune. ethtool -G ethX rx 4096 tx 4096
  • Dezactivați GRO la rutare.
    Din cauza unei probleme cunoscute de kernel, GRO trebuie dezactivat la rutare/redirecționare. ethtool -K ethX gro off unde ethX este interfața Ethernet care trebuie modificată.
  • Dezactivați moderarea întreruperilor adaptive și setați o valoare statică. ethtool -C ethX adaptive-rx off adaptive-tx off ethtool -C ethX rx-usecs 64 tx-usecs 64

NOTA
În funcție de tipul de procesor și de sarcina de lucru, parametrii de coalescere pentru RX și TX pot fi ajustați pentru o performanță îmbunătățită (sau o pierdere mai mică a cadrelor).

  • Dezactivează firewall-ul. sudo systemctl dezactivați firewalld sudo systemctl opri firewalld
  • Activați redirecționarea IP. sysctl -w net.ipv4.ip_forward=1
  • Configurați valorile maxime pentru dimensiunile bufferului socketului de primire și trimitere. sysctl -w net.core.rmem_max=16777216 sysctl -w net.core.wmem_max=16777216

NOTA
În funcție de volumul de lucru sau de cerință, aceste valori pot fi modificate față de valorile implicite.
8.2 Latență scăzută

  • Dezactivați hyper-threading (nuclee logice).
  • Asigurați-vă că dispozitivul de rețea este local pentru numa core 0.
  • Fixați benchmark-ul la core 0 folosind setul de activități -c 0.
  • Dezactivați irqbalance folosind systemctl stop irqbalance sau systemctl disable irqbalance
  • Rulați scriptul de afinitate pentru a se răspândi în nuclee. Încercați fie local, fie toate.
  • Dezactivați moderarea întreruperii. ethtool -C ethX rx-usecs 0 tx-usecs 0 adaptive-rx off adaptive-tx off rxusecs- high 0
  • Limitați numărul de cozi pentru a fi egal cu numărul de nuclee de pe soclul local (32 în acest example). ethtool -L ethX combinat 32
  • Pin întreruperi numai la soclul local (script pachet cu sursa driverului i40e). set_irq_affinity -X local ethX
  • Utilizați un benchmark stabilit, cum ar fi netperf -t TCP_RR, netperf -t UDP_RR sau NetPipe. netperf -t TCP_RR sau netperf -t UDP_RR
  • Fixați benchmark la un singur nucleu în nodul local NUMA. set de sarcini -c

Seria Intel ® Ethernet 700
Ghid de reglare a performanței Linux
decembrie 2024
Doc. Nr.: 334019, Rev.: 1.2

Documente/Resurse

Reglarea performanței Linux Intel Ethernet seria 700 [pdfGhid de utilizare
334019, Ethernet 700 Series Linux Performance Tuning, Ethernet 700 Series, Linux Performance Tuning, Performance Tuning, Tuning

Referințe

Lasă un comentariu

Adresa ta de e-mail nu va fi publicată. Câmpurile obligatorii sunt marcate *