Version von iperf3: 3.2
Hardware: Zwischen einem Linux-Server und einem Linux-Client
Betriebssystem (und ggf. Distribution): Debian-basiertes Linux
@ aledesma78 war der ursprüngliche Entdecker dieser Ausgabe.
Wir haben eine gerätegeschränkte Geräterate für 3750 KBit / s. Wir haben erwartet, dass das Endergebnis bei oder unter 3,75 Mbit / s liegt
Wir sehen ein Endergebnis der Geschwindigkeit über der geschwindigkeitsbegrenzten Geschwindigkeit, aber keine nicht ausgelassenen Intervalle erreichen diese Geschwindigkeit.
Ratenbegrenzt ein Gerät und führen Sie einen Downstream-Geschwindigkeitstest durch.
iperf3_2 -c 10.254.223.197 -R -P 2 -O2 -t5 -C cubic
Connecting to host 10.254.223.197, port 5201
Reverse mode, remote host 10.254.223.197 is sending
[ 5] local 10.0.0.103 port 48668 connected to 10.254.223.197 port 5201
[ 7] local 10.0.0.103 port 48669 connected to 10.254.223.197 port 5201
[ ID] Interval Transfer Bitrate
[ 5] 0.00-1.00 sec 250 KBytes 2.05 Mbits/sec (omitted)
[ 7] 0.00-1.00 sec 246 KBytes 2.02 Mbits/sec (omitted)
[SUM] 0.00-1.00 sec 496 KBytes 4.07 Mbits/sec (omitted)
- - - - - - - - - - - - - - - - - - - - - - - - -
[ 5] 1.00-2.00 sec 250 KBytes 2.05 Mbits/sec (omitted)
[ 7] 1.00-2.00 sec 185 KBytes 1.52 Mbits/sec (omitted)
[SUM] 1.00-2.00 sec 436 KBytes 3.57 Mbits/sec (omitted)
- - - - - - - - - - - - - - - - - - - - - - - - -
[ 5] 0.00-1.00 sec 195 KBytes 1.60 Mbits/sec
[ 7] 0.00-1.00 sec 242 KBytes 1.98 Mbits/sec
[SUM] 0.00-1.00 sec 437 KBytes 3.58 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ 5] 1.00-2.00 sec 212 KBytes 1.74 Mbits/sec
[ 7] 1.00-2.00 sec 225 KBytes 1.84 Mbits/sec
[SUM] 1.00-2.00 sec 437 KBytes 3.58 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ 5] 2.00-3.00 sec 232 KBytes 1.90 Mbits/sec
[ 7] 2.00-3.00 sec 204 KBytes 1.67 Mbits/sec
[SUM] 2.00-3.00 sec 436 KBytes 3.57 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ 5] 3.00-4.00 sec 266 KBytes 2.18 Mbits/sec
[ 7] 3.00-4.00 sec 171 KBytes 1.40 Mbits/sec
[SUM] 3.00-4.00 sec 437 KBytes 3.58 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ 5] 4.00-5.00 sec 164 KBytes 1.34 Mbits/sec
[ 7] 4.00-5.00 sec 272 KBytes 2.22 Mbits/sec
[SUM] 4.00-5.00 sec 436 KBytes 3.57 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-5.02 sec 1.36 MBytes 2.28 Mbits/sec 0 sender
[ 5] 0.00-5.00 sec 1.17 MBytes 1.96 Mbits/sec receiver
[ 7] 0.00-5.02 sec 1.51 MBytes 2.53 Mbits/sec 0 sender
[ 7] 0.00-5.00 sec 1.34 MBytes 2.24 Mbits/sec receiver
[SUM] 0.00-5.02 sec 2.88 MBytes 4.81 Mbits/sec 0 sender
[SUM] 0.00-5.00 sec 2.51 MBytes 4.20 Mbits/sec receiver
Accepted connection from 10.254.223.201, port 48667
[ 5] local 10.254.223.197 port 5201 connected to 10.254.223.201 port 48668
[ 8] local 10.254.223.197 port 5201 connected to 10.254.223.201 port 48669
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-1.00 sec 518 KBytes 4.24 Mbits/sec 0 83.4 KBytes (omitted)
[ 8] 0.00-1.00 sec 520 KBytes 4.26 Mbits/sec 0 83.4 KBytes (omitted)
[SUM] 0.00-1.00 sec 1.01 MBytes 8.50 Mbits/sec 0 (omitted)
- - - - - - - - - - - - - - - - - - - - - - - - -
[ 5] 1.00-2.00 sec 407 KBytes 3.34 Mbits/sec 0 96.2 KBytes (omitted)
[ 8] 1.00-2.00 sec 263 KBytes 2.16 Mbits/sec 0 90.5 KBytes (omitted)
[SUM] 1.00-2.00 sec 670 KBytes 5.49 Mbits/sec 0 (omitted)
- - - - - - - - - - - - - - - - - - - - - - - - -
[ 5] 0.00-1.00 sec 153 KBytes 1.25 Mbits/sec 0 105 KBytes
[ 8] 0.00-1.00 sec 297 KBytes 2.43 Mbits/sec 0 102 KBytes
[SUM] 0.00-1.00 sec 450 KBytes 3.68 Mbits/sec 0
- - - - - - - - - - - - - - - - - - - - - - - - -
[ 5] 1.00-2.00 sec 334 KBytes 2.73 Mbits/sec 0 115 KBytes
[ 8] 1.00-2.00 sec 161 KBytes 1.32 Mbits/sec 0 112 KBytes
[SUM] 1.00-2.00 sec 495 KBytes 4.05 Mbits/sec 0
- - - - - - - - - - - - - - - - - - - - - - - - -
[ 5] 2.00-3.00 sec 187 KBytes 1.53 Mbits/sec 0 126 KBytes
[ 8] 2.00-3.00 sec 356 KBytes 2.92 Mbits/sec 0 124 KBytes
[SUM] 2.00-3.00 sec 543 KBytes 4.45 Mbits/sec 0
- - - - - - - - - - - - - - - - - - - - - - - - -
[ 5] 3.00-4.00 sec 444 KBytes 3.64 Mbits/sec 0 163 KBytes
[ 8] 3.00-4.00 sec 206 KBytes 1.69 Mbits/sec 0 146 KBytes
[SUM] 3.00-4.00 sec 650 KBytes 5.33 Mbits/sec 0
- - - - - - - - - - - - - - - - - - - - - - - - -
[ 5] 4.00-5.00 sec 280 KBytes 2.29 Mbits/sec 0 197 KBytes
[ 8] 4.00-5.00 sec 529 KBytes 4.33 Mbits/sec 0 202 KBytes
[SUM] 4.00-5.00 sec 809 KBytes 6.63 Mbits/sec 0
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-5.02 sec 1.36 MBytes 2.28 Mbits/sec 0 sender
[ 8] 0.00-5.02 sec 1.51 MBytes 2.53 Mbits/sec 0 sender
[SUM] 0.00-5.02 sec 2.88 MBytes 4.81 Mbits/sec 0 sender
Wie Sie sehen können, gibt die endgültige Summe des Kunden 4,20 Mbit / s über dem Ratenlimit des Kunden an. Es sollte nicht möglich sein, Geschwindigkeiten zu erreichen, die über dem Ratenlimit liegen.
Nach dem letzten Testintervall tritt eine merkliche Verzögerung auf. Zählt iperf3 nach dem letzten Intervall immer noch die endgültigen eingehenden Pakete und addiert sie zur Gesamtsumme, die dann nur durch die Zeit der Intervalle geteilt wird? Dies würde erklären, dass die Summe über dem Durchschnitt der Intervallgeschwindigkeiten liegt.
Wir haben eine Wireshark-Erfassung der eingehenden Pakete auf der Serverseite durchgeführt und viele TCP-Fehler festgestellt (siehe unten). Die Fehler waren eine Reihe von doppelten ACKs, vermutlich aufgrund des Verkehrsausbruchs, den der kubische Algorithmus während des Hochfahrens ausführt.
Da eine Überlastung zu einer Verzögerung der Pakete führen kann, haben wir den Vegas TCP-Überlastungsalgorithmus ausprobiert, um festzustellen, ob dies einen Unterschied macht.
iperf3_2 -c 10.254.223.197 -R -P 2 -O2 -t5 -C vegas
Connecting to host 10.254.223.197, port 5201
Reverse mode, remote host 10.254.223.197 is sending
[ 5] local 10.0.0.103 port 48680 connected to 10.254.223.197 port 5201
[ 7] local 10.0.0.103 port 48681 connected to 10.254.223.197 port 5201
[ ID] Interval Transfer Bitrate
[ 5] 0.00-1.00 sec 238 KBytes 1.95 Mbits/sec (omitted)
[ 7] 0.00-1.00 sec 259 KBytes 2.12 Mbits/sec (omitted)
[SUM] 0.00-1.00 sec 496 KBytes 4.07 Mbits/sec (omitted)
- - - - - - - - - - - - - - - - - - - - - - - - -
[ 5] 1.00-2.00 sec 325 KBytes 2.66 Mbits/sec (omitted)
[ 7] 1.00-2.00 sec 112 KBytes 915 Kbits/sec (omitted)
[SUM] 1.00-2.00 sec 437 KBytes 3.58 Mbits/sec (omitted)
- - - - - - - - - - - - - - - - - - - - - - - - -
[ 5] 0.00-1.00 sec 208 KBytes 1.70 Mbits/sec
[ 7] 0.00-1.00 sec 229 KBytes 1.88 Mbits/sec
[SUM] 0.00-1.00 sec 437 KBytes 3.58 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ 5] 1.00-2.00 sec 178 KBytes 1.46 Mbits/sec
[ 7] 1.00-2.00 sec 257 KBytes 2.11 Mbits/sec
[SUM] 1.00-2.00 sec 436 KBytes 3.57 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ 5] 2.00-3.00 sec 182 KBytes 1.49 Mbits/sec
[ 7] 2.00-3.00 sec 255 KBytes 2.09 Mbits/sec
[SUM] 2.00-3.00 sec 437 KBytes 3.58 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ 5] 3.00-4.00 sec 175 KBytes 1.44 Mbits/sec
[ 7] 3.00-4.00 sec 262 KBytes 2.14 Mbits/sec
[SUM] 3.00-4.00 sec 437 KBytes 3.58 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ 5] 4.00-5.00 sec 181 KBytes 1.48 Mbits/sec
[ 7] 4.00-5.00 sec 256 KBytes 2.10 Mbits/sec
[SUM] 4.00-5.00 sec 437 KBytes 3.58 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-5.02 sec 911 KBytes 1.49 Mbits/sec 0 sender
[ 5] 0.00-5.00 sec 925 KBytes 1.52 Mbits/sec receiver
[ 7] 0.00-5.02 sec 1.24 MBytes 2.08 Mbits/sec 0 sender
[ 7] 0.00-5.00 sec 1.35 MBytes 2.27 Mbits/sec receiver
[SUM] 0.00-5.02 sec 2.13 MBytes 3.56 Mbits/sec 0 sender
[SUM] 0.00-5.00 sec 2.26 MBytes 3.79 Mbits/sec receiver
Accepted connection from 10.254.223.201, port 48679
[ 5] local 10.254.223.197 port 5201 connected to 10.254.223.201 port 48680
[ 8] local 10.254.223.197 port 5201 connected to 10.254.223.201 port 48681
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-1.00 sec 379 KBytes 3.10 Mbits/sec 0 35.4 KBytes (omitted)
[ 8] 0.00-1.00 sec 455 KBytes 3.73 Mbits/sec 0 17.0 KBytes (omitted)
[SUM] 0.00-1.00 sec 834 KBytes 6.83 Mbits/sec 0 (omitted)
- - - - - - - - - - - - - - - - - - - - - - - - -
[ 5] 1.00-2.00 sec 325 KBytes 2.66 Mbits/sec 0 17.0 KBytes (omitted)
[ 8] 1.00-2.00 sec 70.7 KBytes 579 Kbits/sec 0 7.07 KBytes (omitted)
[SUM] 1.00-2.00 sec 396 KBytes 3.24 Mbits/sec 0 (omitted)
- - - - - - - - - - - - - - - - - - - - - - - - -
[ 5] 0.00-1.00 sec 195 KBytes 1.60 Mbits/sec 0 8.48 KBytes
[ 8] 0.00-1.00 sec 212 KBytes 1.74 Mbits/sec 0 9.90 KBytes
[SUM] 0.00-1.00 sec 407 KBytes 3.34 Mbits/sec 0
- - - - - - - - - - - - - - - - - - - - - - - - -
[ 5] 1.00-2.00 sec 195 KBytes 1.60 Mbits/sec 0 7.07 KBytes
[ 8] 1.00-2.00 sec 283 KBytes 2.32 Mbits/sec 0 9.90 KBytes
[SUM] 1.00-2.00 sec 478 KBytes 3.92 Mbits/sec 0
- - - - - - - - - - - - - - - - - - - - - - - - -
[ 5] 2.00-3.00 sec 195 KBytes 1.60 Mbits/sec 0 7.07 KBytes
[ 8] 2.00-3.00 sec 283 KBytes 2.32 Mbits/sec 0 9.90 KBytes
[SUM] 2.00-3.00 sec 478 KBytes 3.92 Mbits/sec 0
- - - - - - - - - - - - - - - - - - - - - - - - -
[ 5] 3.00-4.00 sec 195 KBytes 1.60 Mbits/sec 0 7.07 KBytes
[ 8] 3.00-4.00 sec 212 KBytes 1.74 Mbits/sec 0 9.90 KBytes
[SUM] 3.00-4.00 sec 407 KBytes 3.34 Mbits/sec 0
- - - - - - - - - - - - - - - - - - - - - - - - -
[ 5] 4.00-5.00 sec 130 KBytes 1.07 Mbits/sec 0 7.07 KBytes
[ 8] 4.00-5.00 sec 283 KBytes 2.32 Mbits/sec 0 9.90 KBytes
[SUM] 4.00-5.00 sec 413 KBytes 3.38 Mbits/sec 0
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-5.02 sec 911 KBytes 1.49 Mbits/sec 0 sender
[ 8] 0.00-5.02 sec 1.24 MBytes 2.08 Mbits/sec 0 sender
[SUM] 0.00-5.02 sec 2.13 MBytes 3.56 Mbits/sec 0 sender
Viola! Die Summe liegt unter der geschwindigkeitsbegrenzten Geschwindigkeit. Aber es gab immer noch Zeiten, in denen ich iperf3 mit dem Vegas-Algorithmus ausführte, in denen ich eine Summe von 3,78 Mbit / s sah (nur geringfügig über der geschwindigkeitsbegrenzten Geschwindigkeit).
Wir haben erneut ein Wireshark-Capture durchgeführt (siehe unten). Diesmal keine TCP-Fehler.
N / A
Die Summengeschwindigkeit scheint mehr Bytes als die einzelnen Intervallgeschwindigkeiten zu enthalten, was zu ungenauen Summengeschwindigkeiten führt, die höher sind als sie sein sollten.
Die Summengeschwindigkeiten sollten den Durchschnitt der Byteanzahlen über alle Intervalle enthalten, ein etwaiger Überschuss sollte als zusätzlicher Datensatz enthalten sein.
Ich habe ein Skript erstellt, um die Intervallzählungen zu berechnen und mit der Summe zu vergleichen.
./iperf3 -c 10.254.223.197 -P 2 -R -J -t 5 -O 2
{
"start": {
"connected": [{
"socket": 5,
"local_host": "10.0.0.103",
"local_port": 42061,
"remote_host": "10.254.223.197",
"remote_port": 5201
}, {
"socket": 7,
"local_host": "10.0.0.103",
"local_port": 42062,
"remote_host": "10.254.223.197",
"remote_port": 5201
}],
"version": "iperf 3.3",
"system_info": "Linux alarm 3.14.79-28-ARCH #1 SMP PREEMPT Tue Nov 28 20:47:59 MST 2017 aarch64",
"timestamp": {
"time": "Mon, 15 Jan 2018 23:15:14 GMT",
"timesecs": 1516058114
},
"connecting_to": {
"host": "10.254.223.197",
"port": 5201
},
"cookie": "p53abfwnpdgxdb4i4ben3aby5q6p3tr72mzd",
"tcp_mss_default": 1448,
"sock_bufsize": 0,
"sndbuf_actual": 16384,
"rcvbuf_actual": 87380,
"sock_bufsize": 0,
"sndbuf_actual": 16384,
"rcvbuf_actual": 87380,
"test_start": {
"protocol": "TCP",
"num_streams": 2,
"blksize": 131072,
"omit": 2,
"duration": 5,
"bytes": 0,
"blocks": 0,
"reverse": 1,
"tos": 545460846592
}
},
"intervals": [{
"streams": [{
"socket": 5,
"start": 0,
"end": 1.0000720024108887,
"seconds": 1.0000720024108887,
"bytes": 263536,
"bits_per_second": 2108136.2091104626,
"omitted": true
}, {
"socket": 7,
"start": 0,
"end": 1.0000808238983154,
"seconds": 1.0000808238983154,
"bytes": 244712,
"bits_per_second": 1957537.784165184,
"omitted": true
}],
"sum": {
"start": 0,
"end": 1.0000720024108887,
"seconds": 1.0000720024108887,
"bytes": 508248,
"bits_per_second": 4065691.2604273204,
"omitted": true
}
}, {
"streams": [{
"socket": 5,
"start": 1.0000720024108887,
"end": 2.0000720024108887,
"seconds": 1,
"bytes": 254848,
"bits_per_second": 2038784,
"omitted": true
}, {
"socket": 7,
"start": 1.0000808238983154,
"end": 2.0000829696655273,
"seconds": 1.0000021457672119,
"bytes": 192584,
"bits_per_second": 1540668.6940836317,
"omitted": true
}],
"sum": {
"start": 1.0000720024108887,
"end": 2.0000720024108887,
"seconds": 1,
"bytes": 447432,
"bits_per_second": 3579456,
"omitted": true
}
}, {
"streams": [{
"socket": 5,
"start": 9.3936920166015625e-05,
"end": 0.99996590614318848,
"seconds": 1.0000598430633545,
"bytes": 205616,
"bits_per_second": 1644829.5683599333,
"omitted": false
}, {
"socket": 7,
"start": 8.296966552734375e-05,
"end": 0.99997401237487793,
"seconds": 1.0000569820404053,
"bytes": 241816,
"bits_per_second": 1934417.7729283024,
"omitted": false
}],
"sum": {
"start": 9.3936920166015625e-05,
"end": 0.99996590614318848,
"seconds": 1.0000598430633545,
"bytes": 447432,
"bits_per_second": 3579241.80720577,
"omitted": false
}
}, {
"streams": [{
"socket": 5,
"start": 0.99996590614318848,
"end": 1.9999659061431885,
"seconds": 1,
"bytes": 231680,
"bits_per_second": 1853440,
"omitted": false
}, {
"socket": 7,
"start": 0.99997401237487793,
"end": 1.9999749660491943,
"seconds": 1.0000009536743164,
"bytes": 215752,
"bits_per_second": 1726014.3539444408,
"omitted": false
}],
"sum": {
"start": 0.99996590614318848,
"end": 1.9999659061431885,
"seconds": 1,
"bytes": 447432,
"bits_per_second": 3579456,
"omitted": false
}
}, {
"streams": [{
"socket": 5,
"start": 1.9999659061431885,
"end": 2.9999370574951172,
"seconds": 0.99997115135192871,
"bytes": 237472,
"bits_per_second": 1899830.8075503621,
"omitted": false
}, {
"socket": 7,
"start": 1.9999749660491943,
"end": 2.9999480247497559,
"seconds": 0.99997305870056152,
"bytes": 209960,
"bits_per_second": 1679725.253981042,
"omitted": false
}],
"sum": {
"start": 1.9999659061431885,
"end": 2.9999370574951172,
"seconds": 0.99997115135192871,
"bytes": 447432,
"bits_per_second": 3579559.2654454992,
"omitted": false
}
}, {
"streams": [{
"socket": 5,
"start": 2.9999370574951172,
"end": 3.9999649524688721,
"seconds": 1.0000278949737549,
"bytes": 275120,
"bits_per_second": 2200898.6059911489,
"omitted": false
}, {
"socket": 7,
"start": 2.9999480247497559,
"end": 3.9999740123748779,
"seconds": 1.0000259876251221,
"bytes": 170864,
"bits_per_second": 1366876.4781264982,
"omitted": false
}],
"sum": {
"start": 2.9999370574951172,
"end": 3.9999649524688721,
"seconds": 1.0000278949737549,
"bytes": 445984,
"bits_per_second": 3567772.4770803885,
"omitted": false
}
}, {
"streams": [{
"socket": 5,
"start": 3.9999649524688721,
"end": 4.9999239444732666,
"seconds": 0.99995899200439453,
"bytes": 176656,
"bits_per_second": 1413305.9568444674,
"omitted": false
}, {
"socket": 7,
"start": 3.9999740123748779,
"end": 4.9999361038208008,
"seconds": 0.99996209144592285,
"bytes": 270776,
"bits_per_second": 2166290.1209261958,
"omitted": false
}],
"sum": {
"start": 3.9999649524688721,
"end": 4.9999239444732666,
"seconds": 0.99995899200439453,
"bytes": 447432,
"bits_per_second": 3579602.7923355773,
"omitted": false
}
}],
"end": {
"streams": [{
"sender": {
"socket": 5,
"start": 0,
"end": 5.0177791118621826,
"seconds": 5.0177791118621826,
"bytes": 1662304,
"bits_per_second": 2650262.5371774738,
"retransmits": 0,
"max_snd_cwnd": 0,
"max_rtt": 0,
"min_rtt": 0,
"mean_rtt": 0
},
"receiver": {
"socket": 5,
"start": 0,
"end": 4.9999239444732666,
"seconds": 4.9999239444732666,
"bytes": 1388688,
"bits_per_second": 2221934.5980812446
}
}, {
"sender": {
"socket": 7,
"start": 0,
"end": 5.0177791118621826,
"seconds": 5.0177791118621826,
"bytes": 1601488,
"bits_per_second": 2553301.7126465905,
"retransmits": 0,
"max_snd_cwnd": 0,
"max_rtt": 0,
"min_rtt": 0,
"mean_rtt": 0
},
"receiver": {
"socket": 7,
"start": 0,
"end": 4.9999239444732666,
"seconds": 4.9999239444732666,
"bytes": 1240240,
"bits_per_second": 1984414.1851332216
}
}],
"sum_sent": {
"start": 0,
"end": 5.0177791118621826,
"seconds": 5.0177791118621826,
"bytes": 3263792,
"bits_per_second": 5203564.2498240648,
"retransmits": 0
},
"sum_received": {
"start": 0,
"end": 4.9999239444732666,
"seconds": 4.9999239444732666,
"bytes": 2628928,
"bits_per_second": 4206348.7832144666
},
"cpu_utilization_percent": {
"host_total": 1.4895097996990692,
"host_user": 0.27786769885254531,
"host_system": 1.2504046448364539,
"remote_total": 0.077469205119125223,
"remote_user": 0.033212949675937929,
"remote_system": 0.044283932901250572
},
"sender_tcp_congestion": "cubic",
"receiver_tcp_congestion": "cubic"
}
}
Intvl (non-omitted) start time: 0.000094
Intvl (non-omitted) end time: 4.999924
Intvl (non-omitted) total bytes: 2235712
Intvl (non-omitted) data rate (bits/s): 3577260.821464
Sum total bytes: 2628928
Sum data rate (bits/s): 4206348.783214
Diff (Sum total bytes - Intvl (non-omitted) total bytes): 393216
Wenn wir nur die nicht ausgelassenen Intervalle berechnen, können wir sehen, dass die Datenrate mehr mit dem übereinstimmt, was wir pro Intervall bei 3,58 Mbit / s sehen, und dass die Gesamtbytezahl und die Intervallbytezahl eine Byte-Disparität von fast 400 KB aufweisen
Vielen Dank für den beschreibenden Fehlerbericht und die Analyse. Ich entschuldige mich dafür, dass ich dieses Problem nicht früher erkannt habe. Offensichtlich passiert etwas Seltsames mit unserer Buchhaltung. Ich frage mich, ob wir die ausgelassenen Bytes irgendwie in die Gesamtsumme einbeziehen oder etwas anderes, um die Summe aufzublähen.
Wir glauben, dass iperf3 immer noch die in den Puffern verbleibenden Bytes zählt, selbst nachdem iperf3 die Messintervalle beendet hat.
Ich bin nicht davon überzeugt, dass das Zählen dieser Bytes am Ende ein Fehler ist (sie wurden vom Absender während der Testdauer gültig gesendet, und denken Sie daran, dass die Stoppbedingungen des Tests auf der Absenderseite und nicht auf dem Empfänger gelten). Wenn wir sie jedoch zählen, müssen wir auch die Zeit berücksichtigen, über die diese Bytes empfangen wurden, damit die Ratenberechnung korrekt ist.
Genau. Es ist vorteilhaft, alle empfangenen Bytes zu berücksichtigen, und ich sehe das nicht als Fehler, sondern iperf3 berücksichtigt nicht die Zeit, zu der diese letzten Bytes eingehen. Kann dem JSON, das Konten berücksichtigt, ein weiteres Intervall hinzugefügt werden? für diese Zeit und haben es als zusätzliches Intervall markiert?
Kann dem JSON ein weiteres Intervall hinzugefügt werden, das diese Zeit berücksichtigt und als zusätzliches Intervall markiert wird?
Ich dachte, das haben wir getan, deshalb bin ich ein bisschen verwirrt. Ich muss versuchen, diesen Fehler lokal zu reproduzieren und dann in den Quellcode einzutauchen. Passiert das konsequent? Kommt es auch nur bei mehreren parallelen Streams vor oder sehen Sie es auch bei Single-Streams?
Es passiert konsistent, wenn der kubische Algorithmus verwendet wird, und es spielt keine Rolle, ob es sich um einen Einzelstrom oder mehr handelt.
Nur weil wir niedrigere Geschwindigkeiten testen, konnten wir dieses Problem feststellen. Die zusätzlichen Bytes sind bei höheren Geschwindigkeiten auf der Gesamtsumme nicht so auffällig.
OK. Gute (?!?) Nachrichten: Ich konnte dieses Problem mit einigen VMs auf meinem Laptop reproduzieren, wobei die Verbindung durch tc (8) künstlich auf 256 Kbit / s beschränkt wurde. Bisher habe ich dies jedoch nur bei mehreren parallelen TCP-Streams gesehen. Ich weiß zum jetzigen Zeitpunkt nicht, wie wichtig das ist, nur eine Beobachtung.
Server ist CentOS 7, Client ist CentOS 6, beide führen iperf3 aus, kompiliert aus dem Tipp von master
code:
bmah-centos6:iperf% src/iperf3 --client 192.168.56.104 --parallel 2 --reverse -O2 -t 5 -C cubic -fk
Connecting to host 192.168.56.104, port 5201
Reverse mode, remote host 192.168.56.104 is sending
[ 5] local 192.168.56.101 port 52906 connected to 192.168.56.104 port 5201
[ 7] local 192.168.56.101 port 52908 connected to 192.168.56.104 port 5201
[ ID] Interval Transfer Bitrate
[ 5] 0.00-1.00 sec 21.2 KBytes 173 Kbits/sec (omitted)
[ 7] 0.00-1.00 sec 14.1 KBytes 116 Kbits/sec (omitted)
[SUM] 0.00-1.00 sec 35.4 KBytes 289 Kbits/sec (omitted)
- - - - - - - - - - - - - - - - - - - - - - - - -
[ 5] 1.00-2.00 sec 17.0 KBytes 139 Kbits/sec (omitted)
[ 7] 1.00-2.00 sec 9.90 KBytes 81.1 Kbits/sec (omitted)
[SUM] 1.00-2.00 sec 26.9 KBytes 220 Kbits/sec (omitted)
- - - - - - - - - - - - - - - - - - - - - - - - -
[ 5] 0.00-1.00 sec 14.1 KBytes 116 Kbits/sec
[ 7] 0.00-1.00 sec 14.1 KBytes 116 Kbits/sec
[SUM] 0.00-1.00 sec 28.3 KBytes 232 Kbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ 5] 1.00-2.00 sec 14.1 KBytes 116 Kbits/sec
[ 7] 1.00-2.00 sec 17.0 KBytes 139 Kbits/sec
[SUM] 1.00-2.00 sec 31.1 KBytes 255 Kbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ 5] 2.00-3.00 sec 14.1 KBytes 116 Kbits/sec
[ 7] 2.00-3.00 sec 14.1 KBytes 116 Kbits/sec
[SUM] 2.00-3.00 sec 28.3 KBytes 232 Kbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ 5] 3.00-4.00 sec 15.6 KBytes 127 Kbits/sec
[ 7] 3.00-4.00 sec 15.6 KBytes 127 Kbits/sec
[SUM] 3.00-4.00 sec 31.1 KBytes 255 Kbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ 5] 4.00-5.00 sec 14.1 KBytes 116 Kbits/sec
[ 7] 4.00-5.00 sec 14.1 KBytes 116 Kbits/sec
[SUM] 4.00-5.00 sec 28.3 KBytes 232 Kbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-5.02 sec 79.2 KBytes 129 Kbits/sec 0 sender
[ 5] 0.00-5.00 sec 72.1 KBytes 118 Kbits/sec receiver
[ 7] 0.00-5.02 sec 110 KBytes 180 Kbits/sec 0 sender
[ 7] 0.00-5.00 sec 74.9 KBytes 123 Kbits/sec receiver
[SUM] 0.00-5.02 sec 189 KBytes 309 Kbits/sec 0 sender
[SUM] 0.00-5.00 sec 147 KBytes 241 Kbits/sec receiver
iperf Done.
Es sollte dem Absender nicht möglich sein, 309 Kbit / s auszugeben. Also muss ich herausfinden, was damit los ist.
OK, nachdem ich eine Weile damit herumgespielt hatte, kam ich auf ein paar Dinge. TL; DR: iperf3 funktioniert ordnungsgemäß, aber es gibt einige Feinheiten bei der Interpretation der Ausgabe, die irreführend sein können.
Die Messungen in jedem Intervall werden auf der Anwendungsschicht (dh innerhalb von iperf3 selbst) durchgeführt. Dies ist eine wichtige Tatsache, die Menschen (einschließlich mir) manchmal vergessen. Zwischen der Anwendung und der Leitung befinden sich die Socket-Puffer des Kernels, der gesamte TCP / IP-Protokollstapel (einschließlich Flusskontrolle und Überlastungskontrolle) und Schnittstellenpuffer.
Die anomalen Messwerte (mit der ungewöhnlich hohen Bitrate) wurden von der Sendeseite genommen, insbesondere vor den geschwindigkeitsbestimmenden Effekten der Flusskontrolle und Überlastungskontrolle von TCP.
Die Tests, die durchgeführt wurden, um dies zu untersuchen (einschließlich der von mir durchgeführten), waren alle ziemlich kurz, nur wenige Sekunden.
Was meiner Meinung nach hier passiert, ist, dass der Sendeprozess einen großen Datenburst senden kann (bis zu den Grenzen der Socket-Puffer und ohne Rücksicht auf den TCP-Algorithmus zur Überlastungskontrolle). Irgendwann zwingen die Überlastungssteuerungsalgorithmen und / oder der Paketverlust das Anhalten. Beachten Sie, dass der letzte Teil jedes Bursts für iperf3 bereits gesendet wurde (daher wird er in der Intervallstatistik als "gesendet" gezählt), sich jedoch in den Socket-Puffern auf der Anwendungsseite befindet und auf eine erneute Übertragung wartet. Es ist also möglich, dass in einem Intervall eine gesendete Datenmenge aufgezeichnet wird, die tatsächlich höher ist als die, die über das Kabel gesendet werden kann, da die Daten den sendenden Host noch nicht verlassen haben.
Dieser Effekt ist besonders sichtbar, da die kurze Testdauer (5 Sekunden) es ermöglicht, über einen kurzen Zeitraum Intervallraten zu beobachten, die nicht auf die längerfristige Rate hinweisen. Sie sehen dies nicht wirklich auf der Client- (Empfänger-) Seite, aber die Server- (Absender-) Protokolle zeigen es. Hier ist ein Absenderprotokoll für einen kürzlich von mir durchgeführten Test. Beachten Sie die Burst-Art des vom Absender kommenden Datenverkehrs. Dies ist auch in der serverseitigen Ausgabe in Ihrem ursprünglichen Fehlerbericht sichtbar, obwohl es etwas weniger sichtbar ist (möglicherweise, weil Sie eine größere Engpassbandbreite hatten?). Es zeigt jedoch Schwankungen in der Datenmenge, die in jedem Intervall gesendet wird, sowohl oberhalb als auch unterhalb der Engpassbandbreite.
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
Accepted connection from 192.168.56.101, port 53362
[ 5] local 192.168.56.104 port 5201 connected to 192.168.56.101 port 53364
[ 8] local 192.168.56.104 port 5201 connected to 192.168.56.101 port 53366
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-1.00 sec 130 KBytes 1.06 Mbits/sec 0 28.3 KBytes (omitted)
[ 8] 0.00-1.00 sec 77.8 KBytes 636 Kbits/sec 0 14.1 KBytes (omitted)
[SUM] 0.00-1.00 sec 208 KBytes 1.70 Mbits/sec 0 (omitted)
- - - - - - - - - - - - - - - - - - - - - - - - -
[ 5] 1.00-2.00 sec 60.8 KBytes 498 Kbits/sec 0 28.3 KBytes (omitted)
[ 8] 1.00-2.00 sec 49.5 KBytes 405 Kbits/sec 0 19.8 KBytes (omitted)
[SUM] 1.00-2.00 sec 110 KBytes 903 Kbits/sec 0 (omitted)
- - - - - - - - - - - - - - - - - - - - - - - - -
[ 5] 0.00-1.00 sec 0.00 Bytes 0.00 bits/sec 0 28.3 KBytes
[ 8] 0.00-1.00 sec 0.00 Bytes 0.00 bits/sec 0 19.8 KBytes
[SUM] 0.00-1.00 sec 0.00 Bytes 0.00 bits/sec 0
- - - - - - - - - - - - - - - - - - - - - - - - -
[ 5] 1.00-2.00 sec 0.00 Bytes 0.00 bits/sec 0 28.3 KBytes
[ 8] 1.00-2.00 sec 0.00 Bytes 0.00 bits/sec 0 19.8 KBytes
[SUM] 1.00-2.00 sec 0.00 Bytes 0.00 bits/sec 0
- - - - - - - - - - - - - - - - - - - - - - - - -
[ 5] 2.00-3.00 sec 0.00 Bytes 0.00 bits/sec 0 28.3 KBytes
[ 8] 2.00-3.00 sec 48.1 KBytes 394 Kbits/sec 0 19.8 KBytes
[SUM] 2.00-3.00 sec 48.1 KBytes 394 Kbits/sec 0
- - - - - - - - - - - - - - - - - - - - - - - - -
[ 5] 3.00-4.00 sec 79.2 KBytes 649 Kbits/sec 0 28.3 KBytes
[ 8] 3.00-4.00 sec 0.00 Bytes 0.00 bits/sec 0 22.6 KBytes
[SUM] 3.00-4.00 sec 79.2 KBytes 649 Kbits/sec 0
- - - - - - - - - - - - - - - - - - - - - - - - -
[ 5] 4.00-5.00 sec 0.00 Bytes 0.00 bits/sec 0 28.3 KBytes
[ 8] 4.00-5.00 sec 62.2 KBytes 509 Kbits/sec 0 22.6 KBytes
[SUM] 4.00-5.00 sec 62.2 KBytes 509 Kbits/sec 0
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-5.02 sec 79.2 KBytes 129 Kbits/sec 0 sender
[ 8] 0.00-5.02 sec 110 KBytes 180 Kbits/sec 0 sender
[SUM] 0.00-5.02 sec 189 KBytes 309 Kbits/sec 0 sender
Beachten Sie, dass bei ähnlichen Tests, die jedoch länger dauern (z. B. 10 bis 30 Sekunden), immer noch die Schwankungen der auf der Anwendungsschicht gesendeten Daten pro Intervall angezeigt werden, der langfristige Durchschnitt sich jedoch (korrekt) der Engpassbandbreite nähert. Hier ist das Ende eines 30-Sekunden-Tests, der zeigt, dass die Sende- und Empfangs-Bitraten ungefähr gleich sind und ungefähr das, was wir von einem Link mit einer begrenzten Rate von 256 Kbit / s erwarten würden:
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-30.02 sec 410 KBytes 112 Kbits/sec 0 sender
[ 5] 0.00-30.00 sec 450 KBytes 123 Kbits/sec receiver
[ 7] 0.00-30.02 sec 484 KBytes 132 Kbits/sec 0 sender
[ 7] 0.00-30.00 sec 448 KBytes 122 Kbits/sec receiver
[SUM] 0.00-30.02 sec 894 KBytes 244 Kbits/sec 0 sender
[SUM] 0.00-30.00 sec 898 KBytes 245 Kbits/sec receiver
iperf Done.
Nach allem, was ich sagen kann, funktioniert iperf3 korrekt, aber möglicherweise sind längere Tests erforderlich, um aussagekräftigere Ergebnisse zu erzielen. (Andere Möglichkeiten, diesen Effekt zu beseitigen, könnten darin bestehen, kleinere Sendegrößen zu verwenden, die Socket-Puffergrößen zu reduzieren oder eine faire Warteschlange pro Socket zu verwenden, obwohl ich keine davon getestet habe.)
Wenn der Absender eine Bitrate über dem Ratenlimit hat, ist es sinnvoll, dass eine Überlastung vorliegt, aber ich bin mehr besorgt darüber, dass dies auf der Empfängerseite geschieht. Wenn Sie sich meine erste Client-Ausgabe ansehen, hat die Empfänger-SUMME eine Bitrate über dem Ratenlimit
[SUM] 0.00-5.00 sec 2.51 MBytes 4.20 Mbits/sec receiver
Warum sollte der Empfänger behaupten, eine höhere Rate als möglich erhalten zu haben (im obigen Fall ist sie auf 3,75 Mbit / s begrenzt)?
Ich möchte darauf hinweisen, dass ich bei der Durchführung meiner Tests eine Verzögerung der Summenergebnisse im letzten Intervall feststellen würde. Normalerweise sehe ich keine Verzögerung in den Summenergebnissen, daher frage ich mich, ob der Empfänger auch nach der letzten Intervallmessung noch die im Puffer verbleibenden Bytes zählt.
Anerkannt. Lassen Sie mich noch etwas näher darauf eingehen. Das Problem auf der Empfängerseite ist nicht eines, das ich sehe (vielleicht habe ich den falschen Teil des Problems betrachtet, aber wer auch immer ...). Möglicherweise muss ich etwas anderes herausfinden, um zu versuchen, diese Seite zu reproduzieren.
Ich habe letzte Woche fast einen Tag damit verbracht, diesen Fehler zu reproduzieren, da die Messgenauigkeit (im Gegensatz zu einigen optionalen Funktionen) für uns sehr wichtig ist. Aber ich konnte es nicht neu erstellen. Wenn mir jemand (irgendjemand) helfen kann, dieses Problem aus erster Hand zu erkennen und es zu untersuchen, vorzugsweise mit ein paar VMs und einem Begrenzungsmechanismus wie tc, wäre das sehr dankbar.
@ bmah888 Ich habe dir eine E-Mail geschickt, die hilfreich sein kann