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?
źródło
Odpowiedzi:
Ś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:
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.
źródło
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.
źródło
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ć
vmstat
i sprawdzićsystem
kolumnę,cs
nagłówek przerwań i przełączniki kontekstu na sekundę (przerwania obejmują zegar, więc musisz to zważyć), warto też to sprawdzić.źródło
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ść.
źródło
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.
źródło