Warum verwendet netperf einen unterschiedlichen Durchsatz?

913
RockLegend

Ich verwende netperf unter Windows, wobei zwei Computer mit einem Crossover-Kabel verbunden sind. Der erste PC verwendet einen Realtek FE-Netzwerkcontroller und der zweite PC verfügt über einen Realtek GBE-Controller.

Mit dem ersten PC als Server und dem zweiten als Client erhalte ich folgende Ergebnisse:

Recv Send Send  Socket Socket Message Elapsed  Size Size Size Time Throughput  bytes bytes bytes secs. 10^6bits/sec   8192 65536 65536 10.00 95.11  

Wenn ich Dinge um den zweiten PC schalte, Server und zuerst Client, erhalte ich folgende Ergebnisse:

Recv Send Send  Socket Socket Message Elapsed  Size Size Size Time Throughput  bytes bytes bytes secs. 10^6bits/sec   65536 8192 8192 10.00 50.11  

Warum ist der Durchsatz in diesen beiden Fällen unterschiedlich?

1

1 Antwort auf die Frage

1
Spiff

Dies liegt wahrscheinlich daran, dass einer der Computer ein schlecht eingestelltes TCP-Fenster verwendet (netperf nennt dies offenbar die Recv-Socket-Größe). Während des TCP-3-Wege-Handshakes, mit dem eine TCP-Verbindung geöffnet wird, teilt jeder Host mit, welche Größe des TCP-Fensters er verarbeiten kann, sodass der andere Host weiß, wie viele Daten er in den Flug legen muss, bevor er auf eine TCP-Bestätigung wartet.

Bei 8 KB (8.192 Bytes = 65.536 Bit) können bei einem 100.000.000-Bit / s-Netzwerk und einer geschätzten RTT (Round Trip Time = Ping-Zeit) von 1 ms nicht genügend Daten in den Flug gelegt werden.

Um ein korrektes TCP-Fenster zu berechnen, müssen Sie Ihr "Bandwidth * Delay Product" (BDP) berechnen. Pingen Sie eine Maschine von der anderen und beachten Sie die Pingzeit. Bei meinem vielbeschäftigten GigE-LAN ​​sind es jetzt etwa 1 ms. Ich denke, das ist ein bisschen hoch für GigE, aber lass uns damit anfangen, da ein Ende deiner Verbindung nur 100BASE-TX ist.

100.000.000 Bits pro Sekunde * 0,001 Sekunden (1ms) RTT = 100.000 Bits

100.000 Bits / 8 Bits pro Byte = 12.500 Bytes

12.500 Bytes / 1024 Bytes pro KibiByte = 12,2 KB

Ihr TCP-Empfangsfenster auf der langsamen Maschine muss also mindestens 50% größer sein (12,2 statt 8 KiB).

Wenn Sie jedoch ein modernes Betriebssystem wie Windows 8.x verwenden, sollte diese Antwort nicht zutreffen, da Ihre Hosts über eine automatische TCP-Fensteroptimierung verfügen sollten, sodass die ursprünglich gemeldeten Werte möglicherweise nicht vertrauenswürdig sind. Wenn Sie ein altes Betriebssystem wie Windows XP verwenden oder die automatische TCP-Fensteroptimierung deaktiviert ist oder aus irgendeinem Grund nicht funktioniert, gilt dies.