Oficjalny dokument dostawcy mówi: 5Mpps bez problemu. Już uderzam w ścianę przy 120kpps. Gdzie jest wąskie gardło?

17

Oficjalny dokument HP na temat adapterów NetLtreme II QLogic (np. Broadcom) , w tym konkretnej karty sieciowej , którą testuję , stwierdza (strona 7), że ich wydajność małych pakietów dla pakietów do 256 bajtów / pakiet przekracza 5 000 000 pakietów / s.

W moich testach z aplikacją, w której wyłączyłem wszystkie przetwarzanie oprócz samej części odbierania UDP, mogę przejść do 120 000 pakietów tylko na sekundę. Pakiety są równomiernie rozmieszczone w 12 grupach multiemisji.

Zauważyłem, że jest jeden rdzeń (z 12 rdzeni każdy na 2 gniazdach), którego obciążenie stopniowo wzrasta, kiedy zwiększam szybkość wysyłania UDP i osiąga wartość około 120 000 . Ale nie wiem, co robi ten rdzeń i dlaczego. W mojej aplikacji nie jest to wąskie gardło w jednym wątku, ponieważ nie ma znaczenia, czy uruchomię jedną instancję aplikacji dla wszystkich grup multiemisji, czy 12 instancji, które obsługują 1 grupę multiemisji. Więc wąskie gardło nie jest moją aplikacją odbiornika.

MSI jest włączony (weryfikowany poprzez widok „zasobów według typu” w menedżerze urządzeń ), a także RSS jest włączony w ustawieniach NIC, z 8 kolejkami. Więc co trzyma się tego jednego rdzenia? Wszystkie funkcje rozładowywania karty sieciowej są obecnie włączone, ale ich wyłączenie nie pomogło.

Więc gdzie może być wąskie gardło?

Szczegóły systemu:

  • ProLiant BL460c Gen9
  • Intel Xeon E5-2670 v3 (2 x 12 rdzeni)
  • Karta sieciowa HP FlexFabric 10 Gb 2 porty 536FLB
  • Windows 2012 R2
Eugene Beresovsky
źródło
2
Prawdopodobnie wszystkie przerwania rx i tx są obsługiwane przez ten sam rdzeń. Nie wiem dużo o systemie Windows, ale powinno być pewne powinowactwo SMP do skonfigurowania, aby równomiernie rozprowadzać odpowiednie IRQ.
Xavier Lucas,

Odpowiedzi:

13

Również RSS jest włączony w ustawieniach NIC, z 8 kolejkami.

Co niestety nie oznaczało, że RSS był używany, as

netsh int tcp show global

pokazał:

TCP Global Parameters
----------------------------------------------
Receive-Side Scaling State : disabled

Po uruchomieniu (btw bez ponownego uruchamiania)

netsh int tcp set global rss=enabled

RSS zaczął działać, a obciążenie, które poprzednio gromadziło się na tym jednym słabym rdzeniu, teraz jest równomiernie rozłożone na wiele rdzeni na jednym z 2 węzłów NUMA.

Nie sprawdziłem, czy to pozwoli mi poradzić sobie z reklamowanymi ładunkami Mps / s, ale sufit został podniesiony na tyle, aby zmierzyć się z tym, czego potrzebowałem.

Eugene Beresovsky
źródło