In einem WLAN-iperf-TCP-Durchsatztest erzielen mehrere parallele Streams einen höheren Durchsatz als ein Stream. Ich habe versucht, das TCP-Fenster zu vergrößern, kann aber immer noch nicht mit nur 1 Stream den maximalen Durchsatz erzielen. Gibt es noch etwas in der TCP-Schicht, das verhindert, dass die volle Verbindungskapazität genutzt wird?
12
Antworten:
Nach meiner Erfahrung liegt das Problem normalerweise beim Paketverlust, wenn Sie zwischen 1 TCP-Stream und mehreren TCP-Streams signifikant unterschiedliche Ergebnisse sehen. Das "andere" Element in der TCP-Schicht ist also die erneute Übertragung (aufgrund des Paketverlusts in der unteren Schicht).
Ein Beispiel, das ich zusammengestellt habe, um zu veranschaulichen, wie Paketverlust den Durchsatz eines einzelnen Streams beeinflusst ...
Dies ist eine Tabelle, die die Testergebnisse eines 60-Sekunden-
iperf
Tests zwischen einem Client und einem Server zusammenfasst. Es kann sein, dass die Iperf-Ergebnisse durch RTT-Jitter (dh höhere RTT-Standardabweichung) geringfügig abweichen. Der größte Unterschied ergab sich jedoch, als ich einen Verlust von 2% simulierte und die Client-Netzwerkkarte verdrahtete. 172.16.1.56 und 172.16.1.80 sind der gleiche Laptop (unter Ubuntu). Der Server ist 172.16.1.5 und läuft unter Debian. Ich habe netem auf dem Client-NIC verwendet, um den Paketverlust zu simulieren ...BEARBEITEN für Kommentarantworten :
Die meisten TCP-Implementierungen verringern ihr Überlastungsfenster, wenn ein Paketverlust festgestellt wird. Da wir netem verwenden , um einen Paketverlust von 2% vom Client zum Server zu erzwingen, werden einige Daten des Clients gelöscht. Der Nettoeffekt von netem in diesem Beispiel ist eine durchschnittliche Übertragungsrate von 730 Mbit / s für einen Datenstrom. Durch das Hinzufügen mehrerer Streams können die einzelnen TCP-Streams zusammenarbeiten, um die Verbindung zu sättigen.
Ja
Ohne weitere Experimente kann ich das nicht wirklich beantworten, aber bei 1GE-Verbindungen hatte ich nie ein Problem damit, eine Verbindung mit 5 parallelen Strömen zu sättigen. Damit Sie einen Eindruck davon bekommen, wie skalierbar TCP ist, können Linux-Server unter den richtigen Umständen über 1500 gleichzeitige TCP-Sockets verarbeiten . Dies ist eine weitere SO-Diskussion , die für die Skalierung von gleichzeitigen TCP-Sockets relevant ist. Meiner Meinung nach wäre jedoch alles über 20 parallele Sockets zu viel des Guten, wenn Sie lediglich versuchen, eine Verbindung zu sättigen.
Ich habe es nicht benutzt
iperf -w
, also denke ich, dass es ein Missverständnis gibt. Da Sie so viele Fragen zum WiFi-Fall haben, füge ich ein Wireshark-Diagramm des TCP-Durchsatzes für den WiFi-Fall eines einzelnen TCP-Streams hinzu.Testdaten
Ich füge auch rohe Testdaten hinzu, falls Sie sehen möchten, wie ich diese Dinge gemessen habe ...
802.11g, 1 TCP-Stream
802.11g, 5 TCP-Streams
1000BaseT, 1 Stream, 0,0% Verlust
1000BaseT, 5 Streams, 0,0% Verlust
1000BaseT, 1 Streams, 2,0% Verlust
1000BaseT, 5 Streams, 2,0% Verlust
Entfernen Sie die Paketverlustsimulation
quelle
Hier ist die Berechnung für den maximalen Durchsatz eines einzelnen TCP-Streams.
Sie haben also einen Engpass und die Latenz spielt eine große Rolle.
quelle
Es liegt wahrscheinlich an mehreren Prozessen gegenüber einem Prozess. mit iperf 2.0.9 kann man dies über -P 2 auf dem client testen. Dies wird zwei Threads anstelle von einem gabeln. Die meisten modernen CPUs verfügen über mehrere Kerne, sodass sie bei Verwendung mehrerer Threads genutzt werden können.
quelle