Seria Intel® Ethernet 700
Przewodnik po dostrajaniu wydajności systemu Linux
Grupa sieciowa NEX Cloud (NCNG)
Wersja 1.2
Grudzień 2024
Historia rewizji
Rewizja | Data | Uwagi |
1.2 | Grudzień 2024 | · Dodano dodatkowe wskazówki dotyczące zarządzania energią. · Dodano technologię Intel* Turbo Boost. · Dodano listę zaległości urządzeń sieciowych. · Dodano konfiguracje i dostrajanie specyficzne dla platformy. · Dodano procesory Intel* %eon* Scalable czwartej generacji. · Dodano AMD EPYC. · Zaktualizowano możliwości sprzętowe systemu kontroli. · Zaktualizowano iPerf2. · Zaktualizowano iPerf3. · Zaktualizowano kolejki Tx/Rx. · Zaktualizowano moderowanie przerw. · Zaktualizowano rozmiar pierścionka. · Zaktualizowane dostrajanie platformy (i40e, niespecyficzne). · Zaktualizowane ustawienia BIOS-u. · Zaktualizowano kontrolę stanu C. · Zaktualizowano skalowanie częstotliwości procesora. · Zaktualizowane ustawienia aplikacji. · Zaktualizowano ustawienia systemu operacyjnego/jądra. · Zaktualizowano przekazywanie IP. · Zaktualizowano funkcję niskiego opóźnienia. |
Sierpień 2023 | Zmiany w tym dokumencie obejmują: · Dodano powiązane odniesienia. · Dodano opcję Sprawdź, czy pakiet DDP ładuje się prawidłowo. · Dodano iPerf2. · Dodano iPerf3. · Dodano netperf. · Zaktualizowano powinowactwo IRQ. · Dodano kolejki Tx/Rx. · Zaktualizowano rozmiar pierścionka. · Dodano ramki Jumbo. · Dodano łączenie adapterów. · Dodano narzędzie Intel svr-info. |
|
1.0 | Marzec 2016 | Pierwsze wydanie (Intel Public). |
Wstęp
Niniejszy przewodnik ma na celu zapewnienie wskazówek dotyczących dostrajania środowisk w celu uzyskania optymalnej wydajności sieciowej przy użyciu kart sieciowych Intel ® Ethernet 700 Series w środowiskach Linux. Skupia się na sprzęcie, sterownikach i warunkach systemu operacyjnego oraz ustawieniach, które mogą poprawić wydajność sieci. Należy zauważyć, że wydajność sieciowa może być dotknięta przez dowolną liczbę zewnętrznych wpływów, w tym przewodniku omówiono tylko najczęstsze i najbardziej dramatyczne z nich.
1.1 Odniesienia powiązane
- Instrukcja obsługi wszystkich kart sieciowych i urządzeń Intel ® Ethernet obsługujących systemy Windows i Linux:
Podręcznik użytkownika adapterów i urządzeń Intel® Ethernet - Karta danych technicznych:
Karta katalogowa kontrolera Intel® Ethernet X710/XXV710/XL710 - Kompletny pakiet oprogramowania dla wszystkich produktów Intel ® Ethernet (pobierz wszystkie sterowniki, pamięci NVM, narzędzia itp.):
Kompletny pakiet sterowników do karty sieciowej Intel® Ethernet - Pakiet aktualizacji NVM (pamięć nieulotna):
Narzędzie do aktualizacji pamięci nieulotnej (NVM) dla karty sieciowej Intel® Ethernet Network Adapter serii 700 - Narzędzie svr-info dla systemu Linux, które przechwytuje istotne szczegóły dotyczące sprzętu i oprogramowania z serwera: https://github.com/intel/svr-info
- Przewodnik po technologii DDP:
Przewodnik po technologii Intel® Ethernet serii 700 Dynamic Device Personalization (DDP)
Wstępna lista kontrolna
2.1 Aktualizacja wersji sterownika/oprogramowania układowego
Sprawdź wersję sterownika/oprogramowania sprzętowego za pomocą polecenia ethtool -i ethx.
W razie potrzeby zaktualizuj poniższe informacje:
- Zaktualizuj sterownik 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 - Aktualizacja oprogramowania układowego
https://downloadcenter.intel.com/download/24769/NVM-Update-Utility-for-Intel-Ethernet-ConvergedNetwork-Adapter-XL710-X710-Series
2.2 Przeczytaj plik README
Sprawdź znane problemy i pobierz najnowsze instrukcje dotyczące konfiguracji z pliku README file zawarte w pakiecie źródłowym i40e.
2.3 Sprawdź, czy gniazdo PCI Express (PCIe) jest x8
Niektóre gniazda PCIe x8 są w rzeczywistości skonfigurowane jako gniazda x4. Te gniazda mają niewystarczającą przepustowość dla pełnej szybkości łącza z urządzeniami dwu- i czteroportowymi. Ponadto, jeśli umieścisz adapter obsługujący PCIe v3.0 w gnieździe PCIe v2.x, nie możesz uzyskać pełnej przepustowości. Sterownik urządzenia programowego wykrywa tę sytuację i zapisuje następujący komunikat w dzienniku systemowym:
Przepustowość PCI-Express dostępna dla tej karty nie jest wystarczająca dla optymalnej wydajności. Aby uzyskać optymalną wydajność, wymagane jest gniazdo PCI-Express x8.
Jeśli wystąpi ten błąd, przenieś kartę do prawdziwego gniazda PCIe v3.0 x8, aby rozwiązać problem.
2.4 Sprawdź możliwości sprzętu systemowego
Przy 10 Gbps, 25 Gbps i 40 Gbps Ethernet istnieją pewne minimalne wymagania dotyczące procesora i systemu. Ogólnie rzecz biorąc, nowoczesny procesor klasy serwerowej i optymalna konfiguracja pamięci dla Twojej platformy powinny być wystarczające, ale potrzeby różnią się w zależności od obciążenia. Wszystkie kanały pamięci powinny być zapełnione, a tryb wydajności pamięci powinien być włączony w BIOS-ie. Sprawdź, czy Twoja konfiguracja procesora i pamięci jest w stanie obsłużyć poziom wydajności sieci wymagany dla Twojego obciążenia.
NOTATKA
XL710 to kontroler 40 GbE. Adapter 2 x 40 GbE wykorzystujący ten kontroler nie jest przeznaczony do 2 x 40 GbE, ale 1 x 40 GbE z aktywnym portem zapasowym. Podczas próby użycia ruchu o szybkości łącza obejmującego oba porty, wewnętrzny przełącznik jest nasycony, a łączna przepustowość między dwoma portami jest ograniczona do łącznej wartości SO Gbps.
2.4.1 Parametry rozruchu jądra
Jeśli w BIOS-ie włączono Intel® Virtualization Technology for Directed I/O (Intel® VT-d), Intel zaleca, aby IOMMU był w trybie pass-through w celu zapewnienia optymalnej wydajności sieci hosta. Eliminuje to obciążenie DMA w ruchu hosta, umożliwiając jednocześnie maszynom wirtualnym (VM) korzystanie z zalet Intel® VT-d. Można to osiągnąć, dodając następujący wiersz do parametrów rozruchu jądra: fommu-pt.
2.5 Upewnij się, że pakiet DDP ładuje się prawidłowo
Sterowniki bazowe 140ea i 140eb nie mają bezpośredniego wsparcia dla Dynamic Device Personalization (DDP). Aby użyć DDP z urządzeniami serii 700, należy zainstalować program DDP profile można zastosować przy pomocy aplikacji testpmd.
Aby uzyskać szczegółowe informacje na temat DDP profilei jak stosować DDP profile w przypadku testpmd na urządzeniach serii 700 zapoznaj się z Przewodnikiem po technologii dynamicznej personalizacji urządzeń (DDP) Intel® Ethernet serii 700.
Aby sprawdzić, czy DDP Profile został pomyślnie załadowany:
testpmd> ddp pobierz listę 0 Profile liczba to: 1
NOTATKA
Jeśli profesjonalistafile liczba wynosi 0, nie załadowano żadnego pakietu DDP. W przypadku błędu ładowania pakietu DDP urządzenie domyślnie przechodzi w tryb awaryjny, a wiele funkcji wydajnościowych jest niedostępnych. Jeśli występują błędy związane z ładowaniem pakietu DDP, spowoduje to problemy z wydajnością. Aby uzyskać instrukcje dotyczące rozwiązywania problemów, zapoznaj się z Inte/* Ethernet 700 Series Dynamic Device Personalization (DDP) Technology Guide.
Pomiary wydajności bazowej i metodologia dostrajania
3.1 Testy wydajności sieci
Przed rozpoczęciem ćwiczenia dostrajania ważne jest, aby mieć dobry pomiar bazowy wydajności sieci. Zazwyczaj oprócz uzyskania wstępnego pomiaru wydajności konkretnej aplikacji/obciążenia, dobrym pomysłem jest również użycie standardowego benchmarku wydajności sieci, aby zweryfikować, czy urządzenie sieciowe jest w dobrym stanie.
Jeśli chodzi o optymalizację pojedynczego systemu, netperf lub iperf i NetPIPE to solidne, bezpłatne narzędzia typu open source, które umożliwiają obciążanie połączenia i diagnozowanie problemów z wydajnością.
Netperf jest silny zarówno w testach przepustowości, jak i opóźnień. NetPIPE to narzędzie specyficzne dla opóźnień, ale może być kompilowane dla dowolnego rodzaju środowiska.
NOTATKA
Test TCP_RR w netperf zwraca opóźnienie w wartości transakcji/sek. Jest to liczba w obie strony. Opóźnienie w jedną stronę można obliczyć, używając następującego równania:
Opóźnienie (usec) = (1⁄2) / [Transakcje/sek] * 1,000,000 XNUMX XNUMX
3.1.1 iPerf2
Firma Intel zaleca iperf2 zamiast iperf3 w większości sytuacji testowania porównawczego ze względu na łatwość użycia i obsługę wielu wątków w pojedynczej instancji aplikacji. Firma Intel zaleca uruchamianie z opcją -P z 2-4 wątkami dla połączeń 25G i około 4-6 wątkami dla połączeń 40G.
- Aby uruchomić ruch jednokierunkowy od klienta do serwera: polecenie serwera exampczytaj: iperf2 -s
Polecenie klienta exampczytaj: iperf2 -c -P - Aby uruchomić ruch dwukierunkowy od klienta do serwera (i odwrotnie): polecenie serwera exampczytaj: iperf2 –s –p
Polecenie klienta exampna:
iperf2 -c -P -P -–pełny dupleks LUB
iperf2 -c -P -P -D
NOTATKA
Zarówno opcja –full-duplex, jak i -d w iperf2 pozwalają użytkownikowi na przeprowadzanie testów dwukierunkowych. Jednak opcja –full-duplex koncentruje się konkretnie na testach pełnego dupleksu.
NOTATKA
Podczas testowania iperf2 na wielu portach serwera, można dodać flagę -d do polecenia server, aby uruchomić wszystkie sesje serwera w tle z tego samego okna terminala. Flaga -d może być również używana, gdy polecenie server jest osadzone wewnątrz pętli for w skrypcie.
NOTATKA
Podczas przeprowadzania testu przepustowości sieci z pojedynczym strumieniem/wątkiem (np.ample: P1), procesory AMD mogą nie zapewniać oczekiwanej przepustowości, szczególnie karty sieciowe o większej przepustowości (jeśli prędkość jest >= 25G przepustowości). W rezultacie, przypinanie aplikacji do określonych rdzeni jest wymagane, aby osiągnąć większą przepustowość. Zobacz Ustawienia aplikacji na stronie 22.
3.1.2 iPerf3
W przypadku użycia iperf3 wymagane jest wykonanie wielu wystąpień aplikacji w celu wykonania zaawansowanych czynnościtage wielowątkowych, RSS i kolejek sprzętowych. Intel zaleca uruchamianie z 2-4 sesjami aplikacji dla połączeń 25G i około 4-6 sesjami dla połączeń 40G. Każda sesja powinna określać unikalną wartość portu TCP za pomocą opcji -p.
- Aby uruchomić ruch jednokierunkowy od klienta do serwera:
Polecenie serwera exampna:
iperf3 -s -p
Polecenie klienta exampna:
iperf3 -c -P - Aby uruchomić ruch dwukierunkowy od klienta do serwera (i odwrotnie):
Polecenie serwera exampna:
iperf3 –s –p
Polecenie klienta exampczytaj: iperf3 -c -P -P –-bidir - Aby uruchomić wiele wystąpień (wątków) iperf3, zaleca się użycie pętli for w celu zamapowania wątków na porty TCP i uruchomienie iperf3 w tle za pomocą & w celu utworzenia wielu procesów równolegle.
Polecenie serwera example, uruchom 4 wątki: port=””; for i in {0..3}; do port=520$i; bash -c “iperf3 -s -p $port &”; done; Polecenie klienta example, uruchom 4 wątki – Prześlij test portu=””; dla i w {0..3}; do portu=520$i; bash -c “iperf3 -c $serverIP -p $port &”; gotowe; Polecenie klienta example, uruchom 4 wątki – Odbierz port testowy=””; for i in {0..3}; do port=520$i; bash -c “iperf3 -R -c $serverIP -p $port &”; gotowe; W przypadku połączeń 40G zwiększ pętlę for, aby utworzyć do 6 instancji/wątków.
NOTATKA
Podczas przeprowadzania testu przepustowości sieci z pojedynczym strumieniem/wątkiem (np.ample: P1), procesory AMD mogą nie zapewniać oczekiwanej przepustowości, zwłaszcza większej przepustowości
Karty sieciowe (jeśli prędkość jest >= 25G pasma). W rezultacie, aby osiągnąć wyższą przepustowość, wymagane jest przypinanie aplikacji do określonych rdzeni. Zobacz Ustawienia aplikacji na stronie 22 i AMD EPYC na stronie 26.
3.1.3 perf sieciowy
Narzędzie netperf jest doskonałym wyborem do testowania przepustowości i opóźnień.
- Test TCP_STREAM w netperf mierzy możliwości przepustowości urządzenia. Polecenie serwera example: polecenie klienta netserver, npampczytaj: netperf -t TCP_STREAM -l 30 -H
- Test TCP_RR w netperf zwraca opóźnienie w wartości transakcji/sekundę. Jest to liczba w obie strony. Zaleca się użycie opcji -T x,x, gdzie x jest lokalnym procesorem urządzenia. Jednokierunkowe opóźnienie można obliczyć za pomocą: Latency(usec)=(1⁄2)/ [Transactions/sec]*1,000,\ Polecenie serwera example: serwer sieciowy
Polecenie klienta exampczytaj: netperf -t TCP_RR -l 30 -H -T x,x - Aby uruchomić wiele wystąpień (wątków) netperf, zaleca się użycie pętli for w celu zamapowania wątków na porty TCP i uruchomienie netperf w tle za pomocą & w celu utworzenia wielu procesów równolegle.
Polecenie serwera example, rozpocznij 8 wątki:
port=””; dla i w {0..7}; wykonaj port=520$i; bash -c “netserver -L $serverIP -p $port &”; gotowe;
Polecenie klienta example, uruchom 8 wątków: port=””; dla i w {0..7}; do port=520$i; bash -c “netperf -H $serverIP -p $port -t TCP_STREAM -l 30 &”; gotowe;
3.2 Metodologia dostrajania
Skup się na jednej zmianie strojenia na raz, aby wiedzieć, jaki wpływ każda zmiana ma na Twój test. Im bardziej metodycznie będziesz podchodzić do procesu strojenia, tym łatwiej będzie Ci zidentyfikować i rozwiązać przyczyny wąskich gardeł wydajności.
Strojenie ustawień sterownika i40e
4.1 Powinowactwo IRQ
Skonfigurowanie powinowactwa IRQ w taki sposób, aby przerwania dla różnych kolejek sieciowych były powiązane z różnymi rdzeniami procesora, może mieć ogromny wpływ na wydajność, szczególnie w przypadku testów przepustowości wielowątkowej.
Aby skonfigurować powinowactwo IRQ, zatrzymaj irqbalance, a następnie użyj skryptu set_irq_affinity z pakietu źródłowego i40e lub przypnij kolejki ręcznie. Wyłącz równoważenie IRQ przestrzeni użytkownika, aby włączyć przypinanie kolejek:
- systemctl wyłącz irqbalance
- systemctl stop irqbalance
Użycie skryptu set_irq_affinity z pakietu źródłowego i40e (zalecane): - Aby wykorzystać wszystkie rdzenie:
[ścieżka-do-i40epackage]/scripts/set_irq_affinity -X all ethX - Aby używać tylko rdzeni na lokalnym gnieździe NUMA: [ścieżka-do-pakietu-i40e]/scripts/set_irq_affinity -X local ethX
- Możesz również wybrać zakres rdzeni. Unikaj używania cpu0, ponieważ uruchamia zadania timera. [ścieżka-do-i40epackage]/scripts/set_irq_affinity 1-2 ethX
NOTATKA
Skrypt powinowactwa włącza Transmit Packet Steering (XPS) jako część procesu przypinania, gdy określona jest opcja -x. Gdy włączony jest XPS, Intel zaleca wyłączenie irqbalance, ponieważ moduł równoważenia jądra z XPS może powodować nieprzewidywalną wydajność. Skrypt powinowactwa wyłącza XPS, gdy określona jest opcja -X. Wyłączenie XPS i włączenie kolejek symetrycznych jest korzystne dla obciążeń, w których najlepszą wydajność uzyskuje się, gdy ruch Tx i Rx jest obsługiwany w tej samej parze kolejek.
Konfigurowanie kolejek symetrycznych w systemie Linux polega na dostrojeniu parametrów sterownika interfejsu sieciowego w celu włączenia kolejek odbioru symetrycznego (Rx) i kolejek transmisji symetrycznej (Tx) dla obsługiwanych kart sieciowych.
NOTATKA
- Kolejki symetryczne to zaawansowana funkcja sieciowa, której nie obsługują wszystkie karty sieciowe i sterowniki serii 700.
- Przed próbą skonfigurowania kolejek symetrycznych upewnij się, że masz niezbędne sterowniki i wsparcie sprzętowe.
Aby skonfigurować kolejki symetryczne, wykonaj następujące ogólne kroki:
- Edytuj konfigurację interfejsu sieciowego File:Użyj edytora tekstu (np.ample, vi, nano lub gedit) do edycji konfiguracji interfejsu sieciowego file. Ten file zwykle znajduje się w katalogu /etc/sysconfig/network-scripts/ i ma nazwę taką jak ifcfg-ethX, gdzie ethX jest nazwą interfejsu sieciowego.
- Dodaj parametry kolejki symetrycznej. Dodaj następujące wiersze do konfiguracji interfejsu sieciowego file: ETHTOOL_OPTS=”kolejki odbiorcze 8 kolejki transmisyjne 8″
- Uruchom ponownie usługę sieciową.
Po wprowadzeniu zmian uruchom ponownie usługę sieciową, aby zastosować nową konfigurację. sudo systemctl restart network
Ręcznie:
-
Znajdź procesory podłączone do każdego węzła za pomocą: numactl –hardware lscpu
-
Znajdź maski bitowe dla każdego z procesorów:
- Zakładając rdzenie 0-11 dla węzła 0: [1,2,4,8,10,20,40,80,100,200,400,800]
- Znajdź IRQ przypisane do portu, który ma zostać przypisany: grep ethX /proc/interrupts i zanotuj wartości IRQ. Na przykładample, 181-192 dla 12 załadowanych wektorów.
- Echo wartości powinowactwa SMP do odpowiadającego wpisu IRQ. Należy pamiętać, że należy to zrobić dla każdego wpisu IRQ: echo 1 > /proc/irq/181/smp_affinity echo 2 > /proc/irq/182/smp_affinity echo 4 > /proc/irq/183/smp_affinity Pokaż powinowactwo IRQ:
- Aby wyświetlić powinowactwo IRQ dla wszystkich rdzeni: /scripts/set_irq_affinity -s ethX
- Aby wyświetlić tylko rdzenie lokalnego gniazda NUMA: /scripts/set_irq_affinity -s lokalny ethX
- Można również wybrać zakres rdzeni: /skrypty/set_irq_affinity -s 40-0-8,16 ethX
NOTATKA
Skrypt set_irq_affinity obsługuje flagę -s w sterowniku i40e w wersji 2.16.11 i nowszych.
4.2 Kolejki Tx/Rx
Domyślna liczba kolejek włączonych dla każdego portu Ethernet przez sterownik podczas inicjalizacji jest równa całkowitej liczbie procesorów dostępnych na platformie. Działa to dobrze na wielu platformach i konfiguracjach obciążeń. Jednak na platformach z dużą liczbą rdzeni i/lub dużą gęstością portów Ethernet ta konfiguracja może powodować konflikty zasobów. Dlatego w niektórych przypadkach może być konieczne zmodyfikowanie wartości domyślnej dla każdego portu w systemie.
Domyślna liczba kolejek Tx/Rx może się różnić w zależności od konkretnego modelu i wersji sterownika. Liczbę kolejek można dostosować za pomocą polecenia ethtool -L wymienionego poniżej.
NOTATKA
W takich przypadkach Intel zaleca zmniejszenie domyślnej liczby kolejek dla każdego portu do nie więcej niż liczba procesorów dostępnych w węźle NUMA lokalnym dla portu adaptera. W niektórych przypadkach, podczas próby zrównoważenia zasobów w implementacjach o dużej liczbie portów, może być konieczne dalsze zmniejszenie tej liczby.
Aby zmodyfikować konfigurację kolejki:
Następujący example ustawia port na 32 kolejki Tx/Rx: ethtool -L ethX combined 32
Exampplik wyjściowy:
ethtool -l ethX
Parametry kanału dla ethX: Wstępnie ustawione maksima:
Odbiornik: 96
TX: 96 XNUMX XNUMX
Inne: 1
Łącznie: 96
Aktualne ustawienia sprzętowe:
Odbiornik: 0
TX: 0 XNUMX XNUMX
Inne: 1
Łącznie: 32
4.3 Moderowanie przerw
Adaptacyjne moderowanie przerwań jest domyślnie włączone i ma na celu zapewnienie zrównoważonego podejścia między niskim wykorzystaniem procesora a wysoką wydajnością. Możesz jednak spróbować ręcznie dostroić ustawienia przerwań, aby dopasować je do swojego przypadku użycia.
Zakres 0–235 mikrosekund zapewnia efektywny zakres od 4,310 do 250,000 2 przerwań na sekundę. Wartość rx-μsecs-high można ustawić niezależnie od rx-μsecs i tx-μsecs w tym samym poleceniu ethtool, a także jest ona niezależna od adaptacyjnego algorytmu moderowania przerwań. Podstawowy sprzęt obsługuje granularność w odstępach XNUMX mikrosekund, więc sąsiadujące wartości mogą skutkować taką samą częstotliwością przerwań.
- Aby wyłączyć adaptacyjne moderowanie przerwań: ethtool -C ethX adaptive-rx off adaptive-tx off
- Aby włączyć adaptacyjne moderowanie przerwań: ethtool -C ethX adaptive-rx on adaptive-tx on
Dobrym punktem wyjścia do ogólnego strojenia jest 84 μs lub ~12000 przerwań/s. Jeśli widzisz, że liczniki rx_dropped działają podczas ruchu (używając ethtool -S ethX), prawdopodobnie masz zbyt wolny procesor, za mało buforów z rozmiaru pierścienia adaptera (ethtool -G), aby utrzymać pakiety przez 84 μs lub zbyt niską częstotliwość przerwań.
- Aby ustawić moderowanie przerwań na stałą częstotliwość przerwań 84 μs między przerwaniami (12000 przerwań/s): ethtool -C ethX adaptive-rx off adaptive-tx off rx-usecs 84 tx-usecs 84 Następna wartość do wypróbowania, jeśli nie wykorzystałeś maksymalnie wykorzystania procesora, to 62 μs. Używa to więcej procesora, ale obsługuje bufory szybciej i wymaga mniej deskryptorów (rozmiar pierścienia, ethtool -G).
- Aby ustawić moderowanie przerwań na stałą częstotliwość przerwań równą 62 usecs między przerwaniami (16000 przerwań/s). ethtool -C ethX adaptive-rx off adaptive-tx off rx-usecs 62 tx-usecs 62
Jeśli liczniki rx_dropped zwiększają się podczas ruchu (używając ethtool -S ethX), prawdopodobnie masz zbyt wolny procesor, za mało buforów z rozmiaru pierścienia adaptera (ethtool -G) lub zbyt niską częstotliwość przerwań. Jeśli nie wykorzystujesz maksymalnie wykorzystania procesora, możesz zwiększyć częstotliwość przerwań, obniżając wartość ITR. Używa to więcej procesora, ale bufory są obsługiwane szybciej i wymaga mniej deskryptorów (rozmiar pierścienia, ethtool -G).
Jeśli Twój procesor jest na poziomie 100%, zwiększanie częstotliwości przerwań nie jest zalecane. W pewnych okolicznościach, takich jak obciążenie pracą ograniczone przez procesor, możesz chcieć zwiększyć wartość μs, aby umożliwić więcej czasu procesora dla innych aplikacji.
Jeśli potrzebujesz wydajności o niskim opóźnieniu i/lub dysponujesz dużą ilością mocy obliczeniowej procesora do wykorzystania w przetwarzaniu sieciowym, możesz całkowicie wyłączyć moderowanie przerwań. Dzięki temu przerwania będą uruchamiane tak szybko, jak to możliwe. - Aby wyłączyć moderowanie przerwań ethtool -C ethX adaptive-rx off adaptive-tx off rx-usecs 0 tx-usecs 0
NOTATKA
Podczas pracy z wyłączoną moderacją przerwań, częstotliwość przerwań w każdej kolejce może być bardzo wysoka. Rozważ uwzględnienie parametru rx-usec-high, aby ustawić górny limit częstotliwości przerwań. Poniższe polecenie wyłącza adaptacyjną moderację przerwań i zezwala na maksymalnie 5 mikrosekund przed wskazaniem, że odbiór lub transmisja zostały zakończone. Zamiast powodować 200,000 50,000 przerwań na sekundę, ogranicza całkowitą liczbę przerwań na sekundę do 20 5 za pomocą parametru rx-usec-high. # ethtool -C ethX adaptive-rx off adaptive-tx off rx-usecs-high 5 rx-usecs 80 txusecs 100 Spróbuj dostosować timer łączenia transmisji/odbioru/wysokiego priorytetu wyżej (150/200/25/20) lub niżej (10/5/XNUMX/XNUMX), aby znaleźć optymalną wartość dla obciążenia.
4.4 Rozmiar pierścionka
Jeśli widzisz liczniki rx_dropped w ethtool -S ethX (rx_dropped, rx_dropped.nic) lub podejrzewasz obciążenie pamięci podręcznej przy wielu aktywnych kolejkach, możesz spróbować dostosować rozmiar pierścienia z wartości domyślnej. Wartość domyślna to 512, maksymalna to 4096.
- Aby sprawdzić bieżące wartości: ethtool -g ethX
Jeśli podejrzewasz, że brak buforowania powoduje spadki częstotliwości przerwań, możesz najpierw spróbować wartości maksymalnej, potem minimalnej, a potem kontynuować wyszukiwanie binarne, aż do uzyskania optymalnej wydajności.
Jeśli podejrzewa się obciążenie pamięci podręcznej (wiele kolejek aktywnych), zmniejszenie buforów z domyślnych może pomóc Intel ® Data Direct I/O (Intel ® DDIO) działać wydajniej. Intel zaleca wypróbowanie 128 lub 256 na kolejkę, pamiętając, że zwiększenie częstotliwości przerwań za pomocą ethtool -C może być konieczne, aby uniknąć wzrostu rx_dropped. - Aby ustawić rozmiar dzwonka na stałą wartość: ethtool -G eth12 rx 256 tx 256
NOTATKA
Aby naprawić utratę pakietów Rx wykrytą za pomocą polecenia ethtool -S ethX|grep drop, należy rozważyć zwiększenie rozmiaru pierścienia do 4096. Poeksperymentuj, aby znaleźć najlepsze ustawienie dla danego obciążenia, ale uważaj na nadmierne wykorzystanie pamięci przy wyższych wartościach.
4.5 Kontrola przepływu
Kontrola przepływu warstwy 2 może znacząco wpłynąć na wydajność TCP i zaleca się jej wyłączenie w przypadku większości obciążeń. Potencjalnym wyjątkiem jest ruch bursty, w którym bursty nie trwają długo.
Kontrola przepływu jest domyślnie wyłączona.
- Aby włączyć kontrolę przepływu: ethtool -A ethX rx on tx on
- Aby wyłączyć kontrolę przepływu: ethtool -A ethX rx off tx off
NOTATKA
Aby pomyślnie włączyć kontrolę przepływu, konieczne jest posiadanie partnera łącza obsługującego kontrolę przepływu.
4.6 Duże ramki
Gdy oczekiwane środowisko ruchu składa się z dużych bloków przesyłanych danych, korzystne może być włączenie funkcji Jumbo Frame. Obsługa Jumbo Frames jest włączana poprzez zmianę maksymalnej jednostki transmisji (MTU) na wartość większą niż domyślna wartość 1500. Umożliwia to urządzeniu przesyłanie danych w większych pakietach w środowisku sieciowym. To ustawienie może poprawić przepustowość i zmniejszyć wykorzystanie procesora w przypadku dużych obciążeń wejścia/wyjścia. Może jednak mieć wpływ na obciążenia wrażliwe na małe pakiety lub opóźnienia.
NOTATKA
Ramki Jumbo lub większe ustawienia MTU muszą być prawidłowo skonfigurowane w całym środowisku sieciowym.
Użyj polecenia ifconfig, aby zwiększyć rozmiar MTU. Na przykładample, wprowadź następujące, gdzie jest numerem interfejsu: ifconfig mtu 9000 w górę
Alternatywnie możesz użyć polecenia ip w następujący sposób: ip link set mtu 9000 dev konfiguracja łącza ip dev
Strojenie platformy (i40e niespecyficzne)
5.1 Ustawienia BIOS-u
- Włącz technologię Intel® VT-d dla obciążeń wirtualizacyjnych.
- Hyper-threading (procesory logiczne) może mieć wpływ na wydajność. Eksperymentuj z nim włączonym lub wyłączonym dla swojego obciążenia.
- Intel® Turbo Boost pozwala rdzeniom procesora na pracę z wyższą częstotliwością niż częstotliwość bazowa procesora. Włączenie Intel® Turbo Boost może poprawić wydajność dla wielu obciążeń, ale zużywa więcej energii, aby utrzymać rdzenie na wyższej częstotliwości. Eksperymentuj z Turbo Boost wyłączonym/włączonym dla swojego obciążenia.
NOTATKA
Częstotliwości turbo nie są gwarantowane, jeśli platforma doświadcza wysokiego ogólnego wykorzystania procesora. Wyższe częstotliwości turbo rdzenia są zmniejszane w miarę wzrostu ogólnego wykorzystania procesora.
5.2 Zarządzanie energią
Zarządzanie energią może mieć wpływ na wydajność, szczególnie w przypadku obciążeń o niskim opóźnieniu. Jeśli wydajność jest ważniejsza niż obniżenie zużycia energii, Intel zaleca eksperymentowanie z ograniczaniem efektów zarządzania energią. Istnieje wiele różnych sposobów ograniczania zarządzania energią, za pomocą narzędzi systemu operacyjnego, ustawień BIOS-u i parametrów rozruchu jądra. Wybierz najlepszą metodę i poziom, aby dopasować je do swojego środowiska.
5.2.1 Kontrola stanu C
Ograniczenie wejścia do stanu C do CO lub C1 poprawia wydajność i zwiększa wykorzystanie energii.
Wyłączenie wejścia stanu pakietu CPU C6 może poprawić wydajność sieci. Jednak zwiększa to zużycie energii.
Dostępne są następujące opcje:
- Dynamiczne sterowanie wejściem do stanu C:
Otwarte
/dev/cpu_dma_latency i zapisz w nim maksymalne dozwolone opóźnienie.
NOTATKA
Istnieje niewielki program o nazwie cpudmalatency.c, który można pobrać ze strony społeczności open source, skompilować i uruchomić z wiersza poleceń, aby wykonać dokładnie to samo.
Następujący example pozwala na pięć μs czasu czuwania, a tym samym umożliwia wejście C1: cpudmalatency 5 &
- Ogranicz maksymalny stan C w ustawieniach rozruchu jądra:
Dla procesorów Intel: intel_idle.max_cstates=1
W przypadku procesorów innych niż Intel: processor.max_cstates=1 - Użyj polecenia cpupower, aby sprawdzić i wyłączyć stan CPU C6: Sprawdź: cpupower monitor lub cpupower idle-info
Wyłącz C6: cpupower idle-set -d3 lub
Wyłącz C-States: cpupower idle-set -D0
Uwagi:
- Wyłącz stany C na procesorze, jeśli serwer ma procesor Intel® 4th Gen Intel® Xeon® Scalable. Gdy Hyper Threading jest włączony lub wyłączony, wyłączenie stanów bezczynności (-D0) zapobiega przechodzeniu rdzeni w stany niskiego poboru mocy w okresach bezczynności i zmniejsza opóźnienie dla procesora w przechodzeniu między stanami bezczynności i aktywności.
- Zarządzanie energią procesora Intel® 4th Gen Intel® Xeon® Scalable jest niezwykle agresywne. Aby zapobiec przechodzeniu rdzeni w stan niskiego poboru mocy, spróbuj zmniejszyć liczbę używanych rdzeni, aby utrzymać je w stanie czuwania przez dłuższy czas (ethtool -L łączny ). Powiąż przerwania z konkretnymi rdzeniami za pomocą set irq affinity (najczęściej z -x local lub list of CPU cores) i upewnij się, że obciążenie działa na tych samych rdzeniach za pomocą tasket lub numactl. Poprawia to wydajność poprzez utrzymywanie rdzeni aktywnych i optymalizację obsługi przerwań.
Włącz C6:
cpupower idle-set -d3
Włącz C-States:
cpupower idle-set -E
- Inną metodą jest wykorzystanie dostrojonego narzędzia (dołączonego do wielu dystrybucji Linuksa) do ustawienia wydajnościfile. Ci profesjonaliścifiles modyfikuje kilka ustawień systemu operacyjnego, które mogą mieć wpływ na wydajność wielu aplikacji. Odkryto, że przepustowość sieci profile zapewnia poprawę większości obciążeń.
Sprawdzać:
dostrojony-adm aktywny
Ustawić:
dostrojony-adm profile przepustowość sieci
NOTATKA
Usługa Tuned musi być uruchomiona dla powyższych poleceń. Aby sprawdzić/ponownie uruchomić, tuned: systemctl status tuned systemctl restart tuned
Można również zabronić jakiegokolwiek wejścia do stanu C, dodając następujący kod do wiersza rozruchowego jądra:
bezczynny=ankieta - Ogranicz stan C za pomocą ustawień zarządzania energią w systemie BIOS, które mogą mieć wpływ na wydajnośćfile dostępny.
Do sprawdzenia lub skonfigurowania ustawień zarządzania energią można użyć narzędzi takich jak turbostat czy x86_energy_perf_policy.
5.2.2 Zarządzanie energią PCIe
Active-State Power Management (ASPM) umożliwia niższy stan zasilania dla łączy PCIe, gdy nie są one aktywnie używane. Może to powodować większe opóźnienia w urządzeniach sieciowych PCIe, dlatego Intel zaleca wyłączenie ASPM w przypadku obciążeń wrażliwych na opóźnienia. Wyłącz ASPM, dodając następujące polecenie do wiersza rozruchowego jądra: pcie_aspm=off
5.2.3 Skalowanie częstotliwości procesora
Skalowanie częstotliwości procesora (lub skalowanie szybkości procesora) to technika zarządzania energią w systemie Linux, w której prędkość zegara systemowego jest dostosowywana w locie, aby oszczędzać energię i ciepło. Podobnie jak stany C, może to powodować niepożądane opóźnienia w połączeniach sieciowych.
Narzędzie cpupower można również wykorzystać do sprawdzenia i modyfikacji domyślnych ustawień i limitów wydajności procesora:
- Sprawdź: monitor cpupower lub
- Ustaw procesory w trybie wydajności: cpupower frequency-set -g performance
NOTATKA
Zmiany limitów częstotliwości procesora mogą mieć wpływ na wiele obciążeń i mogą wyłączyć inne funkcje, np. tryb turbo procesora.
Aby wyłączyć skalowanie częstotliwości procesora, wyłącz usługę zasilania procesora za pomocą następujących poleceń:
systemctl stop cpupower.service
systemctl wyłącz cpupower.service
5.2.4 Dodatkowe wskazówki dotyczące zarządzania energią
Więcej szczegółów podano w tym przeglądzie wysokiego szczeblaview wielu funkcji zarządzania energią w procesorach Intel® Xeon® Scalable trzeciej generacji, a także wskazówki dotyczące sposobu integracji tych funkcji na poziomie platformy: https://networkbuilders.intel.com/solutionslibrary/power-management-technologyoverview-technology-guide
5.3 Technologia Intel® Turbo Boost
Intel® Turbo Boost przyspiesza procesor, gdy jest to potrzebne, ale może zużywać dodatkową moc. Wyłączenie Turbo Boost utrzymuje procesor na stałej prędkości, zapewniając stały poziom wydajności dla określonych obciążeń.
5.4 Zapory sieciowe
Zapory sieciowe mogą mieć wpływ na wydajność, zwłaszcza na opóźnienia.
Wyłącz iptables/firewalld, jeśli nie jest to wymagane.
5.5 Ustawienia aplikacji
Często pojedynczy wątek (odpowiadający pojedynczej kolejce sieciowej) nie wystarcza do osiągnięcia maksymalnej przepustowości. Niektóre architektury platform, takie jak AMD, mają tendencję do gubienia większej liczby pakietów Rx za pomocą pojedynczego wątku w porównaniu do platform z procesorami opartymi na Intel.
Rozważ użycie narzędzi takich jak taskset lub numactl, aby przypiąć aplikacje do węzła NUMA lub rdzeni procesora lokalnego dla urządzenia sieciowego. W przypadku niektórych obciążeń, takich jak wejście/wyjście pamięci masowej, przeniesienie aplikacji do węzła nielokalnego przynosi korzyści.
Jeżeli to możliwe, poeksperymentuj ze zwiększeniem liczby wątków używanych przez Twoją aplikację.
Wersja jądra 5.6
Większość nowoczesnych jąder in-box jest dość dobrze zoptymalizowana pod kątem wydajności, ale w zależności od przypadku użycia, aktualizacja jądra może zapewnić lepszą wydajność. Pobranie źródła umożliwia również włączenie/wyłączenie niektórych funkcji przed zbudowaniem jądra.
5.7 Ustawienia systemu operacyjnego/jądra
Aby uzyskać więcej informacji na temat ogólnego dostrajania systemu operacyjnego, skorzystaj z poradników dotyczących dostrajania systemu operacyjnego, takich jak Red Hat Enterprise Linux Network Performance Tuning Guide.
Niektóre typowe parametry do dostrojenia są wymienione w poniższej tabeli. Należy pamiętać, że są to tylko sugerowane punkty początkowe, a zmiana ich domyślnych wartości może zwiększyć zasoby używane w systemie. Chociaż zwiększenie wartości może pomóc poprawić wydajność, konieczne jest eksperymentowanie z różnymi wartościami, aby określić, co działa najlepiej dla danego systemu, obciążenia i typu ruchu.
Parametry jądra można konfigurować za pomocą narzędzia sysctl w systemie Linux, jak pokazano poniżej.
Do view domyślne wartości dla rmem i wmem w systemie:
sysctl net.core.rmem_default
sysctl net.core.wmem_default
Ustaw wartości na maks. (16 MB):
sysctl -w net.core.rmem_max=16777216
sysctl -w net.core.wmem_max=16777216
Rozmiary bufora gniazda, znane również jako bufor odbiorczy (rmem) i bufor transmisyjny (wmem), to parametry systemowe określające ilość pamięci zarezerwowanej dla ruchu sieciowego przychodzącego i wychodzącego.
Uruchomienie sysctl bez argumentu -w wyświetla parametr z jego bieżącym ustawieniem.
Ustawienie stosu | Opis |
net.core.rmem_default | Domyślny rozmiar okna odbioru |
net.core.wmem_default | Domyślny rozmiar okna transmisji |
net.core.rmem_max | Maksymalny rozmiar okna odbioru |
net.core.wmem_max | Maksymalny rozmiar okna transmisji |
net.core.optmem_max | Maksymalna liczba buforów pamięci opcji |
net.core.netdev_max_backlog | Zaległości nieprzetworzonych pakietów przed rozpoczęciem usuwania jądra |
sieć.ipv4.tcp_rmem | Rezerwator pamięci dla buforów odczytu TCP |
sieć.ipv4.tcp_wmem | Rezerwator pamięci dla buforów wysyłania TCP |
Kernel, stos sieciowy, obsługa pamięci, prędkość procesora i parametry zarządzania energią mogą mieć duży wpływ na wydajność sieci. Częstą rekomendacją jest zastosowanie do przepustowości sieci profile używając polecenia tuned. To modyfikuje kilka ustawień systemu operacyjnego, aby zapewnić preferencje aplikacjom sieciowym.
Sprawdzać:
dostrojony-adm aktywny
Ustawić:
dostrojony-adm profile przepustowość sieci
5.8 Zaległości urządzeń sieciowych
Ta funkcja pomaga poprawić wydajność sieci poprzez skuteczne zarządzanie ruchem przychodzącym, zmniejszanie utraty pakietów, obniżanie opóźnień i zwiększanie przepustowości. Prowadzi to do lepszego doświadczenia użytkownika i szybszej reakcji systemu.
Domyślnie jest włączona w większości systemów operacyjnych Linux. Aby sprawdzić wartość domyślną:
sysctl net.core.netdev_max_backlog
Maksymalna wartość dla netdev_max_backlog może się różnić w zależności od czynników takich jak wersja jądra, sprzęt, pamięć i obciążenie. W wielu przypadkach 8192 jest postrzegane jako dobra wartość. sysctl -w net.core.netdev_max_backlog=8192
5.9 Konfiguracje i dostrajanie specyficzne dla platformy
5.9.1 Procesory skalowalne Intel® Xeon® czwartej generacji
Zarządzanie energią procesora Intel® 4th Generation Intel® Xeon® Scalable jest wyjątkowo agresywne w porównaniu do procesorów Intel® Xeon® Scalable 3rd Generation. Aby zapobiec przechodzeniu rdzeni w stan niskiego poboru mocy, spróbuj zmniejszyć liczbę używanych rdzeni, aby utrzymać je w stanie czuwania przez dłuższy czas.
Zalecane ustawienia BIOS-u dla najwyższej wydajności
- Włączanie/wyłączanie funkcji Hyper-Threading (w zależności od wymagań obciążenia i celów wydajnościowych) na procesorze.
- Ustaw system profile do Performance, aby uzyskać maksymalną wydajność.
NOTATKA
Powoduje to większe zużycie energii - Ustaw zarządzanie energią procesora na Maksymalna wydajność, aby priorytetowo traktować maksymalną wydajność procesora, a nie efektywność energetyczną.
- Włącz Turbo Boost. Wyłączenie Turbo Boost w ustawieniach BIOS-u systemowego zazwyczaj zapobiega dynamicznemu zwiększaniu częstotliwości taktowania procesora poza częstotliwość bazową.
- NOTATKA
Wyłączenie funkcji Turbo Boost może okazać się wskazane w pewnych przypadkach użycia, w których ważniejsza jest stała wydajność, energooszczędność lub zarządzanie temperaturą niż maksymalna wydajność. - Wyłącz funkcję Single Root I/O Virtualization (SR-IOV), jeśli system nie wykorzystuje technologii wirtualizacji.
- Wyłącz stany C, aby nakazać procesorowi pozostanie aktywnym i zapobiec przechodzeniu w głębsze stany bezczynności.
- Wyłącz C1E, aby mieć pewność, że procesor pozostanie aktywny i nie przejdzie w stan bezczynności C1E.
- Ustaw częstotliwość nierdzeniową na maksymalną, aby system działał na najwyższej dostępnej częstotliwości.
- Na platformach Dell należy ustawić emulację rdzeni Multiple APIC Description Table (MADT) na Linear (lub Round-Robin, w zależności od systemu BIOS), aby zapewnić przejrzyste i przewidywalne mapowanie rdzeni procesora.
Zalecane dostrajanie na poziomie systemu operacyjnego w celu zoptymalizowania wydajności
- Ustaw regulator skalowania częstotliwości procesora na wydajność. cpupower frequency-set -g performance cpupower frequency-info
- Wyłącz C-States. cpupower idle-set -D0
- Ustaw bufory rdzenia Rx (rmem) i Tx (wmem) na wartość maksymalną. sysctl -w net.core.rmem_max=16777216 sysctl -w net.core.wmem_max=16777216
- Ustaw zaległości urządzeń sieciowych. sysctl -w net.core.netdev_max_backlog=8192
- Ustaw dostrojonego profile (obciążenie zależne od przepustowości/opóźnienia).
dostrojony-adm profile przepustowość sieci
Zalecane ustawienia poziomu adaptera w celu zoptymalizowania wydajności
- Ogranicz liczbę kolejek do użycia dla ruchu aplikacji. Użyj minimalnej liczby kolejek wymaganych do utrzymania aktywności powiązanych rdzeni procesora, aby zapobiec ich przechodzeniu w głębsze stany bezczynności (dostosuj do obciążenia): ethtool -L łącznie 32
- Ustaw współczynniki moderowania przerwań. ethtool -C adaptive-rx off adaptive-tx off rx-usecs-high 50 rx-usecs 50 tx-usecs 50
Spróbuj ustawić wyższą (80/100/150/200) lub niższą (25/20/10/5) wartość timera łączenia transmisji/odbioru/wysokiego priorytetu, aby znaleźć optymalną wartość dla danego obciążenia. - Ustaw rozmiary pierścienia Rx/Tx. ethtool -G odb. 4096 nadaw. 4096
NOTATKA
Jeśli zauważysz utratę pakietów Rx po poleceniu ethtool -S| grep drop, spróbuj zmniejszyć rozmiar pierścienia do <4096. Spróbuj znaleźć optymalną wartość dla obciążenia, przy której pakiety nie będą tracone. - Ustaw powinowactwo IRQ. Użyj rdzeni lokalnych dla NIC lub określonego mapowania rdzeni (gdzie # rdzeni jest równe liczbie kolejek ustawionych w 1 na stronie 26. systemctl stop irqbalance set_irq_affinity -X local LUB set_irq_affinity -X
5.9.2 Procesor AMD EPYC
Procesory AMD EPYC to wydajne procesory przeznaczone do serwerów i centrów danych, zbudowane na architekturze Zen firmy AMD. Poniższe ustawienia pochodzą z serii AMD EPYC czwartej generacji.
Zalecane ustawienia BIOS-u zapewniające najwyższą wydajność
- Włącz tryb niestandardowy, aby umożliwić użytkownikom dostosowanie wydajności procesora, zużycia energii i innych ustawień. Pomaga to w dostrojeniu systemu w celu uzyskania najlepszej równowagi między wydajnością a efektywnością energetyczną.
- Włącz funkcję zwiększania wydajności rdzenia, aby umożliwić procesorowi automatyczne zwiększenie szybkości w celu obsługi bardziej intensywnych zadań, co przełoży się na poprawę ogólnej wydajności.
- Wyłącz globalną kontrolę stanu C, aby zapobiec przechodzeniu procesora w głębsze stany oszczędzania energii, znane jako stany C, które mogą utrzymać responsywność.
NOTATKA
Wyłączenie stanów C może spowodować dodatkowe zużycie energii i wzrost temperatur termicznych. Monitoruj oba pod kątem obciążenia. - Włącz/wyłącz Simultaneous Multithreading (SMT) na CPU, w zależności od wymagań obciążenia i celów wydajnościowych. SMT jest odpowiednikiem Hyper Threading na procesorach Intel.
NOTATKA
Aby uzyskać optymalną wydajność, zapoznaj się z sekcjami Strojenie ustawień sterownika i40e na stronie 13 i Strojenie platformy (i40e, niespecyficzne) na stronie 19, gdzie znajdziesz zalecane strojenie systemu operacyjnego i poziomu karty.
Łączenie adapterów
Łączenie Linuksa to potężna funkcja, która może znacznie poprawić wydajność sieci, redundancję i tolerancję błędów w środowiskach serwerowych. Należy jednak pamiętać, że wymaga ona zgodnego sprzętu sieciowego i prawidłowej konfiguracji zarówno na serwerze, jak i przełączniku, aby działać prawidłowo.
Sterownik bonding w systemie Linux umożliwia agregację wielu fizycznych interfejsów sieciowych w interfejs bonded. Ten interfejs bonded pojawia się jako pojedynczy wirtualny interfejs sieciowy dla systemu operacyjnego i aplikacji.
NOTATKA
Bond jest interfejsem logicznym, więc nie można ustawić powinowactwa procesora bezpośrednio na interfejsie bond (np.ample, bond0). Oznacza to, że nie ma bezpośredniej kontroli nad obsługą przerwań ani powinowactwem CPU. Powinowactwo CPU musi być skonfigurowane dla podstawowych interfejsów, które są częścią bond.
Łączenie umożliwia kilka trybów działania, z których każdy ma swoje własne cechy charakterystyczne.
Tryb | Typ |
0 | Round Robin |
1 | Aktywna kopia zapasowa |
2 | XOR |
3 | Audycja |
4 | LACP |
5 | Równoważenie obciążenia transmisji |
6 | Adaptacyjne równoważenie obciążenia |
Istnieją różne metody tworzenia wiązania w systemie Linux. Jedną z najczęstszych metod jest użycie konfiguracji sieciowej files (np.ample, /etc/network/interfaces lub /etc/sysconfig/network-scripts/ifcfg-bondX).
Konfiguracja za pomocą konfiguracji sieciowej Files
Poniższe kroki tworzą wiązanie poprzez konfigurację sieci files.
- Wybierz dwa lub więcej portów NIC do połączenia (np.ample, ethX i ethY)
- Otwórz konfigurację karty sieciowej Files w /etc/sysconfig/network-scripts/ dla wymaganego interfejsu NIC (np.ample, vi ifcfg-ethX i vi ifcfg-ethY) i dołącz następujący tekst:
MASTER=bondN [Uwaga: N jest liczbą całkowitą określającą numer obligacji.] SLAVE=tak - Utwórz skrypt sieciowy obligacji file używając vi /etc/sysconfig/networkscripts/ifcfg-bondN i wprowadź następujący tekst:
DEVICE=bondN [Uwaga: N jest liczbą całkowitą, która określa numer obligacji] ONBOOT=tak USERCTL=nie BOOTPROTO=dhcp (lub) brak
IPADDR=200.20.2.4 [wymagane jeśli BOOTPROTO=brak] NETMASK=255.255.255.0 [wymagane jeśli BOOTPROTO=brak] NETWORK=200.20.2.0 [wymagane jeśli BOOTPROTO=brak] BROADCAST=200.20.2.255 [wymagane jeśli BOOTPROTO=brak] BONDING_OPTS=”mode=1 miimon=100″
NOTATKA
Moda może być dowolną liczbą całkowitą od 0 do 6, w zależności od wymagań. - Uruchom ponownie usługi sieciowe za pomocą polecenia service network restart lub systemctl restart NetworkManager.service
Rozwiązywanie problemów z wydajnością
7.1 Wykorzystanie procesora
Sprawdź wykorzystanie procesora na rdzeń podczas działania obciążenia.
Należy zauważyć, że wykorzystanie na rdzeń jest bardziej istotne dla wydajności niż ogólne wykorzystanie procesora, ponieważ daje pojęcie o wykorzystaniu procesora na kolejkę sieciową. Jeśli masz tylko kilka wątków obsługujących ruch sieciowy, możesz mieć tylko kilka rdzeni używanych. Jednak jeśli rdzenie te są w 100%, przepustowość sieci jest prawdopodobnie ograniczona przez wykorzystanie procesora i nadszedł czas, aby wykonać następujące czynności:
- Dostosuj moderację IRQ/rozmiar pierścienia zgodnie ze szczegółowymi informacjami w sekcji Moderowanie przerwań.
- Zwiększ liczbę wątków aplikacji, aby rozłożyć obciążenie procesora na więcej rdzeni. Jeśli wszystkie rdzenie działają na 100%, Twoja aplikacja może być ograniczona przez procesor, a nie przez sieć.
Narzędzia powszechnie dostępne:
- szczyt
— Naciśnij 1, aby rozwinąć listę procesorów i sprawdzić, które z nich są używane.
— Zwróć uwagę na poziom wykorzystania.
— Zwróć uwagę, które procesy są wymienione jako najbardziej aktywne (na górze listy). - mpstat
Następujący exampWiersz poleceń został przetestowany na systemie Red Hat Enterprise Linux 7.x.
Wyświetla wykorzystanie procesora na rdzeń (poprzez znalezienie całkowitego procentu bezczynności i odjęcie od 100) i podświetla wartości powyżej 80% na czerwono. mpstat -P ALL 1 1 | grep -v Average | tail -n +5 | head -n -1 | awk '{ print (100-$13)}' | egrep -color=always '[^\.][8-9][0-9][\.]?.*|^[8-9][0-9][\.]?.*| 100|' | column - perf top Sprawdź, gdzie zużywane są cykle.
7.2 i40e Liczniki
Sterownik i40e udostępnia długą listę liczników do debugowania interfejsu i monitorowania za pomocą polecenia ethtool -S ethX. Może być pomocne obserwowanie danych wyjściowych podczas działania obciążenia i/lub porównywanie wartości liczników przed i po uruchomieniu obciążenia.
- Aby uzyskać pełny zrzut liczników i40e: ethtool -S ethX
- Aby obserwować tylko liczniki różne od zera: watch -d (ethtool -S ethX) | egrep -v :\ 0 | column
Na co zwrócić uwagę: - rx_dropped oznacza, że procesor nie obsługuje buforów dostatecznie szybko.
- port.rx_dropped oznacza, że coś w slocie/pamięci/systemie nie jest dostatecznie szybkie.
7.3 Liczniki sieciowe
Sprawdź netstat -s przed/po uruchomieniu obciążenia.
Netstat zbiera informacje o sieci ze wszystkich urządzeń sieciowych w systemie. Dlatego wyniki mogą być zakłócone przez sieci inne niż sieć testowana. Dane wyjściowe netstat -s mogą być dobrym wskaźnikiem problemów z wydajnością w systemie operacyjnym Linux lub jądrze. Zapoznaj się z przewodnikami dostrajania systemu operacyjnego, takimi jak Red Hat Enterprise Linux Network Performance Tuning Guide, aby uzyskać więcej informacji na temat ogólnego dostrajania systemu operacyjnego.
7.4 Dzienniki systemowe
Sprawdź logi systemowe pod kątem błędów i ostrzeżeń (/var/log/messages, dmesg).
7.5 Narzędzie Intel svr-info
Firma Intel udostępnia narzędzie svr-info (zobacz https://github.com/intel/svr-info) dla systemu Linux, który przechwytuje istotne szczegóły dotyczące sprzętu i oprogramowania z serwera. Dane wyjściowe svr-info mogą być niezwykle pomocne w identyfikowaniu wąskich gardeł systemu lub ustawień/strojeń, które nie są zoptymalizowane pod kątem obciążenia. Otwierając sprawę pomocy technicznej do firmy Intel w związku z problemami z wydajnością Ethernetu, pamiętaj o dołączeniu danych wyjściowych svr-info (tekst file) dla każdego serwera Linux w konfiguracji testowej.
- Pobierz i zainstaluj svr-info:
wget -qO- https://github.com/intel/svr-info/releases/latest/download/svrinfo.tgz| tar xvz cd svr-info
./svr-info
> nazwa_hosta.txt - Zbierz dane wyjściowe:
./svr-info > nazwa_hosta.txt - Dołącz jeden tekst (.txt) file dla każdego serwera do analizy zgłoszenia do pomocy technicznej firmy Intel.
Zalecenia dotyczące typowych scenariuszy wydajnościowych
8.1 Przekierowanie IP
- Zaktualizuj jądro.
Niektóre ostatnie kernele w dystrybucji obniżyły wydajność routingu z powodu zmian kernela w kodzie routingu, zaczynając od usunięcia pamięci podręcznej routingu ze względów bezpieczeństwa. Ostatnie kernele poza dystrybucją powinny mieć poprawki, które łagodzą wpływ tych zmian na wydajność i mogą zapewnić lepszą wydajność. - Wyłącz technologię Hyper-Threading (rdzeni logicznych).
- Edytuj parametry rozruchowe jądra.
— Wymuś wyłączenie iommu (intel_iommu=off lub iommu=off) z wiersza rozruchowego jądra, chyba że jest to wymagane do wirtualizacji
— Wyłącz zarządzanie energią: processor.max_cstates=1 idle=poll pcie_aspm=off - Ogranicz liczbę kolejek tak, aby była równa liczbie rdzeni w gnieździe lokalnym (w tym przykładzie 12).ample). ethtool -L ethX połączone 12
- Przerwania przypięciowe tylko do gniazda lokalnego. set_irq_affinity -X local ethX LUB set_irq_affinity -X local ethX
NOTATKA
-X lub -x można użyć w zależności od obciążenia. - Zmień rozmiary pierścienia Tx i Rx w razie potrzeby. Większa wartość wymaga więcej zasobów, ale może zapewnić lepsze szybkości przekazywania. ethtool -G ethX rx 4096 tx 4096
- Wyłącz GRO podczas routingu.
Ze względu na znany problem z jądrem, GRO musi być wyłączone podczas routingu/przekazywania. ethtool -K ethX gro off gdzie ethX jest interfejsem Ethernet, który ma zostać zmodyfikowany. - Wyłącz adaptacyjne moderowanie przerwań i ustaw wartość statyczną. ethtool -C ethX adaptive-rx off adaptive-tx off ethtool -C ethX rx-usecs 64 tx-usecs 64
NOTATKA
W zależności od typu procesora i obciążenia można dostosować parametry łączenia dla RX i TX w celu zwiększenia wydajności (lub zmniejszenia utraty ramek).
- Wyłącz zaporę. sudo systemctl disable firewalld sudo systemctl stop firewalld
- Włącz przekazywanie IP. sysctl -w net.ipv4.ip_forward=1
- Skonfiguruj maksymalne wartości rozmiarów bufora gniazda odbiorczego i nadawczego. sysctl -w net.core.rmem_max=16777216 sysctl -w net.core.wmem_max=16777216
NOTATKA
W zależności od obciążenia pracą lub wymagań wartości domyślne można zmienić.
8.2 Niskie opóźnienie
- Wyłącz technologię Hyper-Threading (rdzeni logicznych).
- Upewnij się, że urządzenie sieciowe jest lokalne dla numa core 0.
- Przypnij test porównawczy do rdzenia 0 za pomocą polecenia taskset -c 0.
- Wyłącz irqbalance za pomocą systemctl stop irqbalance lub systemctl disable irqbalance
- Uruchom skrypt powinowactwa, aby rozprzestrzenić się po rdzeniach. Spróbuj albo lokalnie, albo we wszystkich.
- Wyłącz moderowanie przerwań. ethtool -C ethX rx-usecs 0 tx-usecs 0 adaptive-rx off adaptive-tx off rxusecs- high 0
- Ogranicz liczbę kolejek do liczby rdzeni w gnieździe lokalnym (w tym przykładzie 32).ample). ethtool -L ethX połączone 32
- Przypnij przerwania tylko do lokalnego gniazda (skrypt spakowany ze źródłem sterownika i40e). set_irq_affinity -X local ethX
- Użyj sprawdzonego testu porównawczego, takiego jak netperf -t TCP_RR, netperf -t UDP_RR lub NetPipe. netperf -t TCP_RR lub netperf -t UDP_RR
- Przypnij test porównawczy do pojedynczego rdzenia w lokalnym węźle NUMA. taskset -c
Seria Intel® Ethernet 700
Przewodnik po dostrajaniu wydajności systemu Linux
Grudzień 2024
Numer dokumentu: 334019, Wersja: 1.2
Dokumenty / Zasoby
![]() |
Intel Ethernet 700 Series Linux Performance Tuning [plik PDF] Instrukcja użytkownika 334019, Ethernet 700 Series Linux Performance Tuning, Ethernet 700 Series, Linux Performance Tuning, Strojenie wydajności, Strojenie |