Jakie obciążenia sieciowe wymagają odpytywania karty sieciowej a przerwań?


18

Czy ktoś ma jakieś dane lub podstawowe obliczenia, na które można odpowiedzieć, gdy wymagane jest łączenie ramek (NAPI) i kiedy wystarczy pojedyncze przerwanie na ramkę?

Mój sprzęt: IBM BladeServer HS22, sprzęt Broadcom 5709 Gigabit NIC (MSI-X), z dwoma czterordzeniowymi procesorami Xeon E5530. Głównym celem jest serwer proxy Squid. Switch to niezła seria Cisco 6500.

Naszym podstawowym problemem jest to, że w godzinach szczytu (ruch 100 Mb / s, tylko 10 000 pps) zwiększa się opóźnienie i utrata pakietów. Zrobiłem wiele tuningu i aktualizacji jądra do wersji 2.6.38 i poprawiło to utratę pakietów, ale opóźnienia są nadal słabe. Pingi są sporadyczne; przeskakuje nawet do 200ms w lokalnej sieci Gbps LAN. Średnia odpowiedź Squid wzrasta z 30ms do 500 + ms, mimo że obciążenie procesora / pamięci jest w porządku.

Przerwy wznoszą się do około 15 000 na sekundę w szczycie. Ksoftirqd nie używa dużo procesora; Zainstalowałem nierównowagę, aby zrównoważyć przerwania IRQ (8 dla eth0 i eth1) we wszystkich rdzeniach, ale to niewiele pomogło.

Wydaje się, że Intel NIC nigdy nie ma tego rodzaju problemów, ale faktem jest, że system kasetowy i sprzęt do stałej konfiguracji są w pewnym sensie utknęli z Broadcom.

Wszystko wskazuje na to, że NIC jest głównym winowajcą. Najlepszym pomysłem, jaki mam teraz, jest zmniejszenie przerwania przy jednoczesnym utrzymaniu niskiego opóźnienia i wysokiej przepustowości.

Bnx2 niestety nie obsługuje adaptive-rx ani tx.

Odpowiedź wątku NAPI vs Adaptive Interrupts zapewnia doskonały przegląd moderacji przerwań, ale nie ma konkretnych informacji na temat sposobu obliczania optymalnych ustawień koalescencji ettoolu dla danego obejścia. Czy istnieje lepsze podejście niż tylko próba i błąd?

Czy wyżej wymienione obciążenie i konfiguracja sprzętowa w ogóle wymagają NAPI? A może powinien być w stanie przeżyć pojedyncze przerwanie na pakiet?


To musi być trudne pytanie ... Dzięki za nagrodę, @Holocryptic! Wypróbowałem kilka ustawień „ethtool -c” do koalescencji, ale jeszcze żadnych znaczących różnic.
Wim Kerkhoff,

Nie ma problemu. Po prostu widziałem, jak to trwało przez kilka dni i wydawało się, że to dobre pytanie. Mam nadzieję, że ktoś ma coś dla ciebie.
Holocryptic

Kolejna aktualizacja ... przenieśliśmy się do serwerów IBM HS23 z kartami sieciowymi Emulex 10 Gb / s. W tym tygodniu osiągnęliśmy ponad 800 000 pakietów na sekundę, bez spadków. Musieliśmy dużo dostroić (łatanie sterowników jądra Linuksa), aby wyrównać obciążenie IRQ, ale teraz działa fantastycznie.
Wim Kerkhoff

Odpowiedzi:


6

Świetne pytanie, które sprawiło, że zacząłem czytać, żeby to rozgryźć. Chciałbym móc powiedzieć, że mam odpowiedź ... ale może jakieś wskazówki.

Mogę przynajmniej odpowiedzieć na twoje pytanie, „czy powinno być w stanie przeżyć pojedyncze przerwanie na pakiet”. Myślę, że odpowiedź brzmi tak, w oparciu o bardzo obciążoną zaporę, do której mam dostęp:

Wydajność Sar:

03:04:53 PM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
03:04:54 PM        lo     93.00     93.00      6.12      6.12      0.00      0.00      0.00
03:04:54 PM      eth0 115263.00 134750.00  13280.63  41633.46      0.00      0.00      5.00
03:04:54 PM      eth8  70329.00  55480.00  20132.62   6314.51      0.00      0.00      0.00
03:04:54 PM      eth9  53907.00  66669.00   5820.42  21123.55      0.00      0.00      0.00
03:04:54 PM     eth10      0.00      0.00      0.00      0.00      0.00      0.00      0.00
03:04:54 PM     eth11      0.00      0.00      0.00      0.00      0.00      0.00      0.00
03:04:54 PM      eth1      0.00      0.00      0.00      0.00      0.00      0.00      0.00
03:04:54 PM      eth2 146520.00 111904.00  45228.32  12251.48      0.00      0.00     10.00
03:04:54 PM      eth3    252.00  23446.00     21.34   4667.20      0.00      0.00      0.00
03:04:54 PM      eth4      8.00     10.00      0.68      0.76      0.00      0.00      0.00
03:04:54 PM      eth5      0.00      0.00      0.00      0.00      0.00      0.00      0.00
03:04:54 PM      eth6   3929.00   2088.00   1368.01    183.79      0.00      0.00      1.00
03:04:54 PM      eth7     13.00     17.00      1.42      1.19      0.00      0.00      0.00
03:04:54 PM     bond0 169170.00 201419.00  19101.04  62757.00      0.00      0.00      5.00
03:04:54 PM     bond1 216849.00 167384.00  65360.94  18565.99      0.00      0.00     10.00

Jak widać, liczy się kilka bardzo wysokich pakietów na sekundę, a na tym komputerze nie dokonano żadnych specjalnych modyfikacji ettoolu. Och ... Chipset Intela. : \

Jedyne, co zostało zrobione, to ręczne równoważenie IRQ z / proc / irq / XXX / smp_affinity, dla poszczególnych interfejsów. Nie jestem pewien, dlaczego zdecydowali się pójść tą drogą zamiast z nierównowagą, ale wydaje się, że to działa.

Myślałem również o matematyce wymaganej do odpowiedzi na twoje pytanie, ale myślę, że jest zbyt wiele zmiennych. Więc ... Podsumowując, moim zdaniem odpowiedź brzmi: nie, nie sądzę, że możesz przewidzieć wyniki tutaj, ale przy wystarczającej ilości przechwytywania danych powinieneś być w stanie dostosować go do lepszego poziomu.

Powiedziawszy to wszystko, mam przeczucie, że jesteś tutaj w jakiś sposób związany sprzętowo ... jak w oprogramowaniu wewnętrznym lub jakimś błędzie międzyoperacyjnym.



1
Zgadzam się z podstawowym stwierdzeniem „tak, nie powinno mieć problemów”, ale biorąc pod uwagę ich problemy, prawdopodobnie jest to problem z oprogramowaniem lub sterownikiem. W ogóle nie „dostroiłem” mojej stacji roboczej i może ona ciągnąć 65 kilogramów bez potu; 15kips nie powinno być niczym dla nowoczesnego procesora. Używam wyłącznie kart sieciowych Broadcom, przy czym zdecydowanie najbardziej popularny jest model 5709. Ten test został jednak uruchomiony na FreeBSD, a nie na Linuksie.
Chris S

Dzięki za pomysły. Próbowałem nierównowagi, ale nie zauważyłem żadnej różnicy. Grałem z większą ilością ustawień koalescencji (ethtool -c), ale nie zauważyłem żadnej różnicy. Jednym z ostrzy jest moduł równoważenia obciążenia, który przesuwa do 120 000 pakietów na sekundę. Zauważyłem, że jeśli NAT i conntrack iptables są załadowane, użycie procesora ksoftirqd spada do 100%. Zwolnij te moduły i załaduj spadki do zera. Na serwerach Squid (maks. 10 000 pakietów / s) opróżniłem 17 000 (!!!) reguł iptables i natychmiast spadły opóźnienia. Myślałem, że już tego próbowałem, ale najwyraźniej nie ...
Wim Kerkhoff

3

Z pewnością biorąc pod uwagę możliwości procesora, mikroukładu i magistrali w porównaniu z tak małym natężeniem ruchu, nie ma powodu, aby POTRZEBOWAĆ jakiegokolwiek zarządzania przerwaniami. Mamy wiele 64-bitowych maszyn RHEL 5.3 z kartami sieciowymi 10 Gb / s, a ich przerwania wcale nie są takie złe, to 100 razy mniej.

Oczywiście masz ustaloną konfigurację (używam ostrzy HP, które są dość podobne), więc zamiana kart sieciowych na Intels jest teraz łatwą opcją, ale powiedziałbym, że zaczynam dostrzegać wiele podobnych problemów na tym forum i gdzie indziej z tą konkretną kartą sieciową Broadcom. Kiedykolwiek same witryny SE miały pewne problemy z tego rodzaju niekonsekwencją, a zamiana na karty sieciowe Intel całkowicie pomogła.

To, co zaleciłbym, to wybranie jednego bloku i dodanie adaptera opartego na procesorze Intel do tego jednego komputera, oczywiście będziesz musiał dodać interkonekt lub jakkolwiek go nazywają IBM, aby uzyskać sygnał, ale wypróbuj tę samą konfigurację oprogramowania, ale z tym drugim Karta sieciowa (prawdopodobnie wyłącz Broadcom, jeśli możesz). Przetestuj to i przekonaj się, jak sobie radzisz. Wiem, że to, co opisałem, wymaga kilku dodatkowych elementów, ale wyobrażam sobie, że twój przedstawiciel IBM chętnie Ci je pożyczy. To jedyny sposób, aby wiedzieć na pewno. Daj nam znać, co się dowiesz, jestem naprawdę zainteresowany, jeśli występuje problem z tymi kartami sieciowymi, nawet jeśli jest to dziwny przypadek. Na bok spotykam się z Intelem i Broadcomem w przyszłym tygodniu, aby omówić coś całkowicie niezwiązanego, ale z pewnością omówię to z nimi i dam ci znać, jeśli coś mnie zainteresuje.


1

Pytanie o przerwania dotyczy tego, w jaki sposób wpływają one na ogólną wydajność systemu. Przerwania mogą zapobiegać przetwarzaniu ziemi przez użytkownika i jądro i chociaż procesor może nie być zbyt obciążony, występuje duża zmiana kontekstu, co jest dużym spadkiem wydajności. Możesz użyć vmstati sprawdzić systemkolumnę, csnagłówek przerwań i przełączniki kontekstu na sekundę (przerwania obejmują zegar, więc musisz to zważyć), warto też to sprawdzić.


1

Krótka bezpośrednia odpowiedź:

Jeśli włączysz odpytywanie, zmniejszysz przełączniki kontekstu (zwykle z powodu przerwań) z tego, czym są teraz (15 kps w twoim przypadku) do z góry określonej liczby (zwykle 1k do 2k).

Jeśli aktualnie masz ruch powyżej z góry określonej liczby, powinieneś mieć lepszy czas reakcji, włączając odpytywanie. Odwrotna jest również prawda. Nie powiedziałbym, że jest to „konieczne”, chyba że przełączniki kontekstu wpływają na wydajność.


1

Kontynuacja: po rozładowaniu modułów NAT i conntrack oraz zminimalizowanym zestawie reguł iptables uzyskujemy doskonałą wydajność. Moduł równoważenia obciążenia IPVS osiągnął ponad 900 Mb / s / 150 kpps. Dzieje się tak, gdy nadal używa się tych samych chipsetów Broadcom bnx2.

Podsumowując: obsługa przerwań wydaje się być w porządku, a domyślne ustawienia dla jądra Debiana z wersją 2.6.38 / 3.0.x wydają się działać poprawnie.

Zdecydowanie wolałbym używać kart sieciowych Intel, abyśmy mogli używać standardowych pakietów Debiana. Walka z niewolnym oprogramowaniem bnx2 była ogromną stratą czasu.


Po prostu kolejna aktualizacja. Ostatnio wydajność znów się pogarszała bez wyraźnego powodu. Sprawdziliśmy wszystkie poprzednie optymalizacje bez powodzenia. Karty sieciowe Intel nadal nie są ekonomiczną opcją (inwestycja 30–40 000 USD w nowe interkonekty, przełączniki 10 GB itp.). ALE, znaleźliśmy nieco nowsze ostrza IBM HS22, które nadal używają kiepskiego bnx2, ale z nowszym oprogramowaniem. Wydajność jest znacznie lepsza - przełamaliśmy barierę 150 000 pakietów / s.
Wim Kerkhoff,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.