Kontrola przeciążenia TCP dla sieci o niskim opóźnieniu 10GbE -> 1GbE?

11

Mam serwer z połączeniem 10GbE do przełącznika i 10 klientów, każdy z połączeniem 1GbE do tego samego przełącznika.

Uruchamiając nuttcp równolegle na każdym kliencie, mogę przesyłać jednocześnie 10 strumieni TCP danych do serwera z prędkością zbliżoną do prędkości drutu (tj. Po prostu 100 megabajtów na sekundę dla wszystkich 10 klientów jednocześnie).

Jednak gdy odwracam kierunek i wysyłam dane z serwera do klientów - tj. 10 strumieni TCP, jeden do każdego klienta - retransmisje TCP gwałtownie rosną, a wydajność spada do 30, 20, a nawet 10 megabajtów na sekundę na klienta. Chcę zwiększyć te liczby, ponieważ ten wzorzec ruchu jest reprezentatywny dla niektórych aplikacji, na których mi zależy.

Sprawdziłem, czy mój serwer jest w stanie nasycić łącze 10GbE, wykonując ten sam eksperyment na połączeniu 10GbE z podobnym serwerem. Sprawdziłem, czy nie ma błędów na żadnym z moich portów.

Wreszcie, kiedy siłą zamykam (ograniczam) rozmiar okna TCP odbiornika, mogę uzyskać nieco większą przepustowość (30-40 megabajtów / sek); a jeśli ustawię go bardzo nisko, mogę wyzerować retransmisje (z absurdalnie niską przepustowością).

Dlatego jestem dość pewny, że przekraczam bufory mojego przełącznika, co powoduje utratę pakietów z powodu przeciążenia. Myślałem jednak, że kontrola przeciążenia TCP powinna sobie z tym poradzić, ostatecznie stabilizując się na poziomie powyżej 50% prędkości drutu.

Moje pierwsze pytanie jest więc bardzo proste: który algorytm kontroli przeciążenia TCP byłby najlepszy w mojej sytuacji? Dostępnych jest ich mnóstwo, ale w większości wydają się być ukierunkowane na sieci stratne, sieci o dużych opóźnieniach lub sieciach bezprzewodowych ... Żadne z nich nie dotyczy mojej sytuacji.

Drugie pytanie: czy jest coś jeszcze, co mogę spróbować?

Nemo
źródło
1
Pomocne byłoby wiedzieć, jaki model przełącznika. Różne przełączniki obsługują kolejkowanie na różne sposoby i pomogłyby zawęzić rozwiązanie.
scottm32768
2
Również różne przełączniki mają różne rozmiary buforów, więc znajomość modelu przełącznika pomoże wyeliminować problemy sprzętowe z twoim problemem.
cpt_fink
1
Ponadto modele NIC, sterowniki, wersja Linux, jądro, dystrybucja itp. Moje odpowiedzi dla karty sieciowej Myricom lub Solarflare z Cisco 4900M byłyby inne niż przełącznik Dell Powerconnect i karty sieciowe Intel.
ewwhite

Odpowiedzi:

2
  1. Potrzebujesz algorytmu, w którym rozmiar okna nie jest drastycznie zmniejszony, gdy występuje spadek pakietu. Jest to drastyczny spadek wielkości okna, który powoduje nagły spadek przepustowości w ruchu TCP.

  2. Jeśli przełącznik i serwer obsługują kontrolę przepływu, spróbuj włączyć kontrolę przepływu. To, jak dobrze to działa, zależy prawie całkowicie od krzemu i oprogramowania układowego Switcha. Zasadniczo przełącznik wykryje przeciążenie wyjścia na porcie podłączonym do klienta, określi, skąd pochodzą pakiety, i wyśle ​​ramki kontroli przepływu z portu wejściowego (tj. Z powrotem na serwer). Jeśli serwer rozumie ramki kontroli przepływu, zmniejszy prędkość transmisji. Jeśli wszystko działa dobrze, uzyskasz optymalną przepustowość przy praktycznie zerowych spadkach pakietów występujących w buforze wyjściowym przełącznika.

wookie919
źródło