iperf3のバージョン:3.2
ハードウェア:LinuxサーバーとLinuxクライアント間
オペレーティングシステム(および存在する場合はディストリビューション):DebianベースのLinux
@ aledesma78は、この問題の最初の発見者でした。
3750kbpsのレート制限付きデバイスがあります。 最終的な速度の結果は3.75メガビット/秒以下になると予想しました
レート制限速度を超える最終速度の結果が表示されますが、省略されていない間隔がその速度に達することはありません。
デバイスのレートを制限し、ダウンストリーム速度テストを実行します。
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
ご覧のとおり、クライアントの最終合計は、クライアントのレート制限を超えて4.20メガビット/秒を報告します。 レート制限を超える速度を達成することは不可能であるべきです。
テストの最後の間隔の後、顕著な遅延があります。 iperf3は、最後の間隔の後の最後の着信パケットをカウントし、それらを合計に追加しますか?それは、間隔の時間によってのみ除算されますか? これは、合計がインターバル速度の平均を超えていることを説明します。
サーバー側で着信パケットのwiresharkキャプチャを実行したところ、多くのTCPエラーに気づきました(以下を参照)。 エラーは、おそらくキュービックアルゴリズムがランプアップ中に実行するトラフィックのバーストに起因する、多数の重複ACKでした。
輻輳はパケットの遅延につながる可能性があるため、Vegas TCP輻輳アルゴリズムを試して、それが違いを生むかどうかを確認しました。
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
ビオラ! 合計がレート制限速度を下回っています。 しかし、Vegasアルゴリズムを使用してiperf3を実行すると、合計3.78Mビット/秒(レート制限速度をわずかに超える)が表示されることがありました。
Wiresharkのキャプチャを再度実行しました(以下を参照)。 今回は、TCPエラーはありません。
該当なし
合計速度には、個々の間隔速度よりも多くのバイトが含まれているようであり、本来よりも高い不正確な合計速度につながります。
合計速度には、すべての間隔でのバイトカウントの平均を含める必要があり、超過分は追加のデータセットとして含める必要があります。
間隔カウントの計算を実行し、それを合計と比較するスクリプトを作成しました。
./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
省略されていない間隔を計算するだけで、データレートが3.58Mbits / secで間隔ごとに表示されるものとより一致し、合計バイト数と間隔バイト数のバイト差がほぼ400KBであることがわかります。
説明的なバグレポートと分析に感謝します。この問題をすぐに認識できなかったことをお詫びします。 明らかに、私たちの会計で何か奇妙なことが起こっています。 省略されたバイトを合計に含めるのか、それとも合計を増やすために他の何かを含めるのか、疑問に思います。
iperf3が間隔の測定を終了した後でも、iperf3はまだバッファーに残っているバイトをカウントしていると思います。
最後にこれらのバイトをカウントすることがバグであるとは確信していません(テスト期間中に送信者によって有効に送信され、テストの停止条件が受信者ではなく送信者側に適用されることを覚えておいてください)。 ただし、それらをカウントする場合は、レートの計算が正しくなるように、それらのバイトが受信された時間も考慮する必要があります。
同意する。 受信したすべてのバイトを考慮に入れることは有利であり、それをバグとは見なしませんが、iperf3はそれらの最後のバイトが入ってくる時間を考慮していません。JSONにアカウントを追加する別の間隔を追加できますか?その間、余分な間隔としてマークされていますか?
その時間を説明する別の間隔をJSONに追加して、追加の間隔としてマークすることはできますか?
それが私たちのやったことだと思ったので、少し混乱しています。 このバグをローカルで再現してから、ソースコードに飛び込む必要があります。 これは一貫して起こりますか? また、それは複数の並列ストリームでのみ発生しますか、それとも単一ストリームでも発生しますか?
これは、3次アルゴリズムを使用する場合に一貫して発生し、シングルストリームであるかそれ以上であるかは関係ありません。
この問題を見つけることができたのは、低速をテストしているからです。 余分なバイトは、高速ではSUM全体でそれほど目立ちません。
OK。 良い(?!?)ニュース:tc(8)によって256Kbpsに人為的に制限されたリンクを使用して、ラップトップ上のいくつかのVMでこの問題を再現することができました。 ただし、これまでは、複数の並列TCPストリームでのみこれを確認しました。 現時点では、それがどれほど重要であるかはわかりません。単なる観察です。
サーバーはCentOS7、クライアントはCentOS 6で、どちらもmaster
コードの先端からコンパイルされたiperf3を実行しています。
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.
送信者が309Kbpsをプッシュすることはできないはずです。 だから私はこれで何が起こっているのかを理解する必要があります。
しばらくこれをいじった後、私はいくつかのことを思いついた。 TL; DR:iperf3は正しく動作していますが、出力の解釈には誤解を招く可能性のある微妙な点がいくつかあります。
各間隔での測定は、アプリケーション層(つまり、iperf3自体内)で行われます。 これは、私を含む人々が時々忘れてしまう重要な事実です。 アプリケーションとワイヤの間には、カーネルのソケットバッファー、TCP / IPプロトコルスタック全体(フロー制御と輻輳制御を含む)、およびインターフェイスバッファーがあります。
異常な読み取り値(異常に高いビットレート)は、特にTCPのフロー制御と輻輳制御のレート制限効果の前に送信側から取得されました。
これを調査するために行われたテスト(私が実行したものを含む)はすべてかなり短く、ほんの数秒でした。
ここで起こっていると思うのは、送信プロセスが大量のデータバーストを送信できることです(ソケットバッファーの制限まで、TCPの輻輳制御アルゴリズムに関係なく)。 ある時点で、輻輳制御アルゴリズムおよび/またはパケット損失により、輻輳制御アルゴリズムが強制的に停止されます。 各バーストの最後の部分は、iperf3に関する限りすでに送信されていますが(間隔統計では「送信済み」としてカウントされます)、アプリケーション側のソケットバッファーに格納され、再送信を待機していることに注意してください。 したがって、データが実際に送信側ホストを離れていないため、送信されたデータの量を実際にネットワーク経由で送信できる量よりも多く記録する間隔が可能です。
この効果は、テスト期間が短い(5秒)ため、長期的なレートを示さない短い時間間隔でレートを観察できるため、特に顕著です。 これはクライアント(受信者)側では実際には表示されませんが、サーバー(送信者)ログには表示されます。 これが私が行った最近のテストの送信者ログです。 送信者からのトラフィックのバースト性に注意してください。 これは、元のバグレポートのサーバー側の出力にも表示されますが、少し目立ちません(おそらく、ボトルネックの帯域幅が大きいためですか?)。 ただし、ボトルネック帯域幅の上下両方で、各間隔で送信されるデータ量の変動を示しています。
-----------------------------------------------------------
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
同様のテストを実行したが、より長く(たとえば、10〜30秒)、間隔ごとにアプリケーション層で送信されるデータの変動が見られますが、長期平均は(正しく)ボトルネック帯域幅に近づいていることに注意してください。 これが30秒のテストの終わりであり、送信ビットレートと受信ビットレートがほぼ等しく、256Kbpsのレート制限リンクで見られると予想されるものについて示しています。
- - - - - - - - - - - - - - - - - - - - - - - - -
[ 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.
したがって、iperf3は正しく機能していることがわかりますが、より意味のある結果を生成するには、より長いテストを使用する必要がある場合があります。 (この影響を取り除く他の方法は、送信サイズを小さくする、ソケットバッファーのサイズを小さくする、またはソケットごとの均等化キューイングを使用することですが、これらのいずれもテストしていません。)
送信者のビットレートがレート制限を超えている場合、輻輳が関係していることは理にかなっていますが、受信側でそれが発生するのを確認することにもっと関心があります。 私の最初のクライアント出力を見ると、レシーバーSUMのビットレートがレート制限を超えています
[SUM] 0.00-5.00 sec 2.51 MBytes 4.20 Mbits/sec receiver
受信者が可能なよりも高いレートを受信したと主張するのはなぜですか(上記の場合、3.75Mビット/秒に制限されています)。
テストを実行すると、最後の間隔で合計結果に遅延が発生することに注意してください。 通常、合計結果に遅延は見られないため、最後の間隔測定の後でも、レシーバーがバッファーに残っているバイトをカウントしているのではないかと思います。
認めた。 これについてもう少し掘り下げてみましょう。 受信側の問題は私が見ているものではありません(多分私は問題の間違った部分を見ていましたが、誰でも...)。 その側面を再現するために、何か他のものを理解する必要があるかもしれません。
先週、私はこのバグを再現するために1日のほとんどを費やしました。これは、測定精度(一部のオプション機能とは異なり)が私たちにとって非常に重要であるためです。 しかし、私はそれを再現することができませんでした。 誰か(誰か)が私がこの問題を直接見て、それを突くのを手伝ってくれるなら、できればいくつかのVMとtcのような制限メカニズムを使って、それは大いにありがたいです。
@ bmah888役立つかもしれないメールを送りました