Ich habe eine Linux-Box, die ich als iperf3
Client verwende und die 2 identisch ausgestattete Windows 2012 R2-Serverboxen mit Broadcom BCM5721, 1-GB-Adaptern (2 Ports, aber nur 1 für den Test verwendet) testet. Alle Maschinen sind über einen einzigen 1-Gbit-Switch verbunden.
Testen von UDP bei z. B. 300 Mbit
iperf3 -uZVc 192.168.30.161 -b300m -t5 --get-server-output -l8192
Dies führt zum Verlust von 14% aller gesendeten Pakete (für die andere Server-Box mit genau derselben Hardware, aber älteren NIC-Treibern beträgt der Verlust etwa 2%), aber der Verlust tritt auch bei 50 Mbit auf, wenn auch weniger schwerwiegend. TCP-Leistung mit entsprechenden Einstellungen:
iperf3 -ZVc 192.168.30.161 -t5 --get-server-output -l8192
liefert Übertragungsgeschwindigkeiten nördlich von 800 Mbit ohne gemeldete Neuübertragungen.
Der Server wird immer mit den folgenden Optionen gestartet:
iperf3 -sB192.168.30.161
Wer ist schuld?
Die Linux-Client-Box (Hardware? Treiber? Einstellungen?)?Bearbeiten: Ich habe gerade den Test von einer Windows-Server-Box zur anderen ausgeführt und der UDP-Paketverlust bei 300 Mbit war mit 22% sogar noch höher.- Die Windows Server Boxen (Hardware? Treiber? Einstellungen?)?
- Der (einzelne) Schalter, der alle Testmaschinen verbindet?
- Kabel?
Bearbeiten:
Jetzt habe ich die andere Richtung versucht: Windows -> Linux. Ergebnis: Paketverlust immer 0 , während der Durchsatz bei etwa maximal ist
- 840 Mbit für
-l8192
, dh fragmentierte IP-Pakete - 250 Mbit für
-l1472
unfragmentierte IP-Pakete
Ich denke, die Flusskontrolle begrenzt den Durchsatz und verhindert Paketverlust. Insbesondere die letztere, unfragmentierte Zahl ist bei weitem nicht annähernd der TCP-Durchsatz (unfragmentierte TCP liefert ähnliche Zahlen wie fragmentiertes TCP), aber es ist eine unendlich große Verbesserung gegenüber Linux -> Windows in Bezug auf Paketverlust.
Und wie kann man das herausfinden?
Ich habe die üblichen Ratschläge für Treibereinstellungen auf dem Server befolgt, um die Leistung zu maximieren, und versucht, diese zu aktivieren / deaktivieren / maximieren / minimieren / ändern
- Moderation unterbrechen
- Ablaufsteuerung
- Puffer erhalten
- RSS
- Wake on LAN
Alle Offload-Funktionen sind aktiviert.
Bearbeiten Ich habe auch versucht, zu aktivieren / deaktivieren
- Ethernet @ Wirespeed
- Die verschiedenen Offload-Funktionen
- Priorität & VLAN
Mit ähnlichen Verlustraten.
Die vollständige Ausgabe eines UDP-Laufs:
$ iperf3 -uZVc 192.168.30.161 -b300m -t5 --get-server-output -l8192
iperf 3.0.7
Linux mybox 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt4-3 (2015-02-03) x86_64 GNU/Linux
Time: Wed, 13 May 2015 13:10:39 GMT
Connecting to host 192.168.30.161, port 5201
Cookie: mybox.1431522639.098587.3451f174
[ 4] local 192.168.30.202 port 50851 connected to 192.168.30.161 port 5201
Starting Test: protocol: UDP, 1 streams, 8192 byte blocks, omitting 0 seconds, 5 second test
[ ID] Interval Transfer Bandwidth Total Datagrams
[ 4] 0.00-1.00 sec 33.3 MBytes 279 Mbits/sec 4262
[ 4] 1.00-2.00 sec 35.8 MBytes 300 Mbits/sec 4577
[ 4] 2.00-3.00 sec 35.8 MBytes 300 Mbits/sec 4578
[ 4] 3.00-4.00 sec 35.8 MBytes 300 Mbits/sec 4578
[ 4] 4.00-5.00 sec 35.8 MBytes 300 Mbits/sec 4577
- - - - - - - - - - - - - - - - - - - - - - - - -
Test Complete. Summary Results:
[ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams
[ 4] 0.00-5.00 sec 176 MBytes 296 Mbits/sec 0.053 ms 3216/22571 (14%)
[ 4] Sent 22571 datagrams
CPU Utilization: local/sender 4.7% (0.4%u/4.3%s), remote/receiver 1.7% (0.8%u/0.9%s)
Server output:
-----------------------------------------------------------
Accepted connection from 192.168.30.202, port 44770
[ 5] local 192.168.30.161 port 5201 connected to 192.168.30.202 port 50851
[ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams
[ 5] 0.00-1.01 sec 27.2 MBytes 226 Mbits/sec 0.043 ms 781/4261 (18%)
[ 5] 1.01-2.01 sec 30.0 MBytes 252 Mbits/sec 0.058 ms 734/4577 (16%)
[ 5] 2.01-3.01 sec 29.0 MBytes 243 Mbits/sec 0.045 ms 870/4578 (19%)
[ 5] 3.01-4.01 sec 32.1 MBytes 269 Mbits/sec 0.037 ms 469/4579 (10%)
[ 5] 4.01-5.01 sec 32.9 MBytes 276 Mbits/sec 0.053 ms 362/4576 (7.9%)
TCP-Lauf:
$ iperf3 -ZVc 192.168.30.161 -t5 --get-server-output -l8192
iperf 3.0.7
Linux mybox 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt4-3 (2015-02-03) x86_64 GNU/Linux
Time: Wed, 13 May 2015 13:13:53 GMT
Connecting to host 192.168.30.161, port 5201
Cookie: mybox.1431522833.505583.4078fcc1
TCP MSS: 1448 (default)
[ 4] local 192.168.30.202 port 44782 connected to 192.168.30.161 port 5201
Starting Test: protocol: TCP, 1 streams, 8192 byte blocks, omitting 0 seconds, 5 second test
[ ID] Interval Transfer Bandwidth Retr Cwnd
[ 4] 0.00-1.00 sec 109 MBytes 910 Mbits/sec 0 91.9 KBytes
[ 4] 1.00-2.00 sec 97.3 MBytes 816 Mbits/sec 0 91.9 KBytes
[ 4] 2.00-3.00 sec 97.5 MBytes 818 Mbits/sec 0 91.9 KBytes
[ 4] 3.00-4.00 sec 98.0 MBytes 822 Mbits/sec 0 91.9 KBytes
[ 4] 4.00-5.00 sec 97.6 MBytes 819 Mbits/sec 0 91.9 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
Test Complete. Summary Results:
[ ID] Interval Transfer Bandwidth Retr
[ 4] 0.00-5.00 sec 499 MBytes 837 Mbits/sec 0 sender
[ 4] 0.00-5.00 sec 498 MBytes 836 Mbits/sec receiver
CPU Utilization: local/sender 3.5% (0.5%u/3.0%s), remote/receiver 4.5% (2.0%u/2.5%s)
Server output:
-----------------------------------------------------------
Accepted connection from 192.168.30.202, port 44781
[ 5] local 192.168.30.161 port 5201 connected to 192.168.30.202 port 44782
[ ID] Interval Transfer Bandwidth
[ 5] 0.00-1.00 sec 105 MBytes 878 Mbits/sec
[ 5] 1.00-2.00 sec 97.5 MBytes 818 Mbits/sec
[ 5] 2.00-3.00 sec 97.6 MBytes 819 Mbits/sec
[ 5] 3.00-4.00 sec 97.8 MBytes 820 Mbits/sec
[ 5] 4.00-5.00 sec 97.7 MBytes 820 Mbits/sec
quelle
-l
Schalter tut. Die Puffergröße wird nicht festgelegt. es legt die Paketgröße fest. Dies ist die Datenmenge, die iperf3 auf einmal in den Socket schreibt und auf einmal aus dem Socket liest. Sie können die Socket-Puffergröße mit einstellen-w
. Wenn Sie sich die Quelle ansehen, werden Sie feststellen, dass sie aufruftsetsockopt()
, um die Größe des Socket-Puffers auf die von Ihnen angegebenen Werte festzulegen-w
.Sie haben den offensichtlichsten Schuldigen völlig verpasst - die Adapter und dann die Treiber (Sie geben an, dass die Verwendung einer anderen Version der Treiber zu unterschiedlichen Ergebnissen führt).
Schalten Sie alle Offload-Funktionen aus.
quelle