W teście przepustowości WLAN iperf TCP wiele równoległych strumieni da mi większą przepustowość niż 1 strumień. Próbowałem zwiększyć rozmiar okna TCP, ale nadal nie mogę osiągnąć maksymalnej przepustowości za pomocą tylko 1 strumienia. Czy w warstwie TCP jest coś jeszcze, co uniemożliwia wykorzystanie pełnej przepustowości łącza?
12
Odpowiedzi:
Z mojego doświadczenia wynika, że jeśli widzisz znacząco różne wyniki między 1 strumieniem TCP a wieloma strumieniami TCP, zwykle problem polega na utracie pakietów; więc „czymś innym” w warstwie TCP jest retransmisja (z powodu utraty pakietów niższej warstwy).
Przykład, który przygotowałem, aby zilustrować wpływ utraty pakietów na przepustowość pojedynczego strumienia ...
To jest tabela, która podsumowuje wyniki 60-sekundowego
iperf
testu między klientem a serwerem ... możesz zobaczyć niewielką zmienność wyników iperf z jittera RTT (tj. Wyższe odchylenie standardowe RTT); jednak najbardziej znacząca różnica pojawiła się, gdy zasymulowałem 2% straty, pozostawiając przewodową kartę sieciową klienta. 172.16.1.56 i 172.16.1.80 to ten sam laptop (z systemem Ubuntu). Serwer to 172.16.1.5 z uruchomionym Debianem. Użyłem netem na przewodowej karcie sieciowej klienta do symulacji utraty pakietów ...EDYCJA odpowiedzi na komentarze :
Większość implementacji TCP zmniejsza okno przeciążenia po wykryciu utraty pakietu. Ponieważ używamy Netem, aby wymusić utratę 2% pakietów od klienta do serwera, niektóre dane klienta są usuwane . Efekt netto netem w tym przykładzie to średnia szybkość transmisji pojedynczego strumienia wynosząca 730 Mb / s. Dodanie wielu strumieni oznacza, że poszczególne strumienie TCP mogą ze sobą współpracować, aby nasycić łącze.
tak
Naprawdę nie potrafię odpowiedzieć na to pytanie bez dalszych eksperymentów, ale dla łączy 1GE nigdy nie miałem problemu z nasyceniem łącza 5 równoległymi strumieniami. Aby dać ci wyobrażenie o tym, jak skalowalny jest TCP, serwery linux mogą obsłużyć ponad 1500 jednoczesnych gniazd TCP we właściwych okolicznościach. To kolejna dyskusja SO, która dotyczy skalowania równoczesnych gniazd TCP, ale moim zdaniem wszystko powyżej 20 gniazd równoległych byłoby przesadzone, jeśli tylko próbujesz nasycić łącze.
Nie korzystałem
iperf -w
, więc myślę, że istnieje nieporozumienie. Ponieważ masz tak wiele pytań na temat przypadku Wi-Fi, dołączam wykres Wireshark przepustowości TCP dla przypadku pojedynczego strumienia Wi-Fi TCP.Dane testowe
Podaję również surowe dane testowe, na wypadek gdybyś chciał zobaczyć, jak mierzyłem te rzeczy ...
802.11g, 1 strumień TCP
802.11g, 5 strumieni TCP
1000BaseT, 1 strumień, 0,0% straty
1000BaseT, 5 strumieni, 0,0% straty
1000BaseT, 1 strumienie, 2,0% straty
1000BaseT, 5 strumieni, 2,0% straty
Usuń symulację utraty pakietów
źródło
Oto obliczenie maksymalnej przepustowości pojedynczego strumienia TCP.
Więc masz wąskie gardło i opóźnienia odgrywają dużą rolę.
źródło
Prawdopodobnie wynika to z wielu procesów vs. jednego procesu. w iperf 2.0.9 można to przetestować przez -P 2 na kliencie. Spowoduje to rozwidlenie dwóch wątków zamiast jednego. Większość współczesnych procesorów ma wiele rdzeni, więc użycie wielu wątków będzie w stanie je wykorzystać.
źródło