Iperf: レート制限速度を超える合計速度

作成日 2018年01月24日  ·  13コメント  ·  ソース: esnet/iperf

環境

  • 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でした。

iperf3 packets with cubic

輻輳はパケットの遅延につながる可能性があるため、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 packets with vegas

  • 考えられる解決策

該当なし

拡張リクエスト

  • 現在の動作

合計速度には、個々の間隔速度よりも多くのバイトが含まれているようであり、本来よりも高い不正確な合計速度につながります。

  • 望ましい行動

合計速度には、すべての間隔でのバイトカウントの平均を含める必要があり、超過分は追加のデータセットとして含める必要があります。

bug

全てのコメント13件

間隔カウントの計算を実行し、それを合計と比較するスクリプトを作成しました。

./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役立つかもしれないメールを送りました

このページは役に立ちましたか?
0 / 5 - 0 評価