Warum ist mein UDP so langsam?


8

Ich verwende Iperf auf zwei VMs, und wenn ich TCP verwende, ist die Leistung wie folgt:

notroot @ ubuntu: ~ $ iperf -s
------------------------------------------------------------
Server überwacht TCP-Port 5001 TCP-Fenstergröße: 85,3 KByte (Standard)
------------------------------------------------------------
[4] lokaler 192.168.1.29-Port 5001 verbunden mit 192.168.1.13-Port 52478
[ID] Intervall Übertragungsbandbreite
[4] 0.0 -10,0 Sek. 2,22 GByte 1,90 Gbit / Sek

UDP hingegen ist schrecklich:

notroot @ ubuntu: ~ $ iperf -s -u
------------------------------------------------------------
Server wartet auf UDP-Port 5001
Empfängt 1470-Byte-Datagramme
UDP-Puffergröße: 208 KByte (Standard)
------------------------------------------------------------
[3] lokal 192.168.1.29 Port 5001 verbunden mit 192.168.1.13 Port 33775
[ID] Intervall Übertragungsbandbreiten-Jitter verloren /
Gesamtdatagramme [3] 0,0-10,0 Sek. 1,25 MByte 1,05 MBits / Sek. 0,284 ms 0/893 (0%)

Ich habe diesen Artikel gelesen

Fragen:

  1. Was halten Sie von den Ergebnissen?
  2. Wie kann ich die Datagrammgröße ändern, falls es sich um ein Fragmentierungsproblem handelt? Trotzdem kann ich bestätigen, dass der Iperf-Client 1470-Byte-Datagramme sendet.

Vielen Dank.

Antworten:


-5

Nach einem Zitat aus einer Antwort auf serverfault.com

Jeder Frame durchläuft beim Senden mehrere Puffer: den Anwendungspuffer, den Protokollpuffer, den Software-Schnittstellenpuffer und den Hardware-Schnittstellenpuffer. Wenn Sie anfangen, den Stapel zu belasten, indem Sie Hochgeschwindigkeitsdaten senden, füllen Sie diese Puffer und blockieren oder verlieren Daten. Sie haben auch Strategien für Aktualität und Abstimmung, die sich auf Ihre Leistung auswirken können. Wenn Sie beispielsweise einen größeren Puffer verwenden und weniger häufig abfragen, können Sie eine viel bessere Leistung erzielen und gleichzeitig die Latenz opfern.

TCP ist für Massenübertragungen mit hoher Geschwindigkeit optimiert, während UDP für geringe Latenz im Linux-Kernel optimiert ist. Dies hat Auswirkungen auf die Puffergröße und darauf, wie Daten abgefragt und übergeben werden. Darüber hinaus müssen Sie häufig auf Hardware für TCP auslagern. Ich würde für TCP eine wesentlich bessere Performance erwarten als für UDP.

Beachten Sie, dass das Senden von Hochgeschwindigkeitsdaten über UDP normalerweise eine schlechte Idee ist, es sei denn, Sie implementieren Ihre eigene Überlastungskontrolle. TCP schützt Ihr Netzwerk vor Überlastungseinbrüchen. Verwenden Sie UDP, wenn Sie geringe Datenmengen oder hohe Aktualitätsanforderungen haben.


Dies erklärt keinen 2000x Ratenunterschied . Selbst eine Größenordnung schneller für TCP wäre auf diese Weise nicht zu erklären.
Xryl669

Ich habe diese Antwort abgelehnt, weil sie nicht korrekt ist. Ich habe einen solchen Test durchgeführt und der Leistungsunterschied zwischen UDP und TCP besteht, aber wie @ xryl669 sagt, ist er viel kleiner. In einer Gigabit-Verbindung ging ich von 928 Mbit / s (TCP) auf 812 Mbit / s (UDP)
Telegrapher

39

iPerf verwendet für UDP-Tests einen Standardwert von 1 MBit / s. Verwenden Sie das -bFlag auf dem iperf-Client, um die UDP-Bandbreite anzugeben, bei der Sie senden möchten, z

iperf -c 10.79.175.219 -u -f m -b 100M

Dies ist der eigentliche Grund und sollte die richtige Antwort sein.
Xryl669

Ich habe das getestet und das ist die richtige Antwort.
Telegrapher

1

Wie Nick antwortete, verwendet iPerf einen Standardwert von 1 MBit / s für UDP .

Um bei einem UDP-Test dieselbe Bandbreite wie TCP zu verwenden, geben Sie einfach -bflag mit dem Wert von an 0.

iperf3 --udp -b 0 -f m -c <server ip>

bilden die Dokumentation,

-b, --bandwidth # [KMG] [/ #]
Zielbandbreite in Bit / Sek

(0 für unbegrenzt)

(Standard 1 Mbit / s für UDP, unbegrenzt für TCP)

(optionaler Schrägstrich und Paketanzahl für Burst-Modus)

-fmGeben Sie im obigen Befehl die Art der Formatierung an ( wenn für MBits).

-f, --format [kmgKMG] Zu meldendes Format: Kbit, Mbit, KByte, MByte


1
Ich bekomme, 14.4 KByteswenn ich benutze-b 0
Satish
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.