Wifi TCP iperfスループット:1ストリーム対複数ストリーム?


12

WLAN iperf TCPスループットテストでは、複数の並列ストリームにより1ストリームよりも高いスループットが得られます。TCPウィンドウサイズを増やしてみましたが、1ストリームだけでは最大スループットを達成できません。TCPレイヤーに、リンク容量全体の使用を妨げているものが他にありますか?


どの程度の違いが見られますか?理想的には、1つのTCPストリームがTのスループットを提供する場合、2つはそれぞれT / 2のスループットを個別に提供する必要があります。
マノジパンディ

ストリームの数に関係なく、完全なリンク容量に達することはありません。[IP + TCP]ヘッダーが最小のIPv4では、〜95%のチャネル効率が得られます。sd.wareonearth.com/~phil/net/overheadの優れたプロトコルオーバーヘッドの投稿を参照してください。
generalnetworkerror

@ManojPandey、私は...確かに彼は、私は、彼はいくつかのパケットロスがあると疑われる...彼は無線LANを使っている、特に以来...理想的なケースを見ているじゃない
マイク・ペニントン

TCPはWi-Fiを悪用し、対処します。使用する必要があり、レイヤー3のパケット損失が発生している場合、レイヤー2の最大再試行回数を増やすことをお勧めします。TCPはパフォーマンスを損なうことなく損失の多いリンクを処理するように設計されていないためです。
BatchyX

回答:


14

WLAN iperf TCPスループットテストでは、複数の並列ストリームにより1ストリームよりも高いスループットが得られます。TCPウィンドウサイズを増やしてみましたが、1ストリームだけでは最大スループットを達成できません。TCPレイヤーに、リンク容量全体の使用を妨げているものが他にありますか?

私の経験では、1つのTCPストリームと複数のTCPストリームで結果が大きく異なる場合、問題は通常パケット損失です。そのため、TCP層の「他の何か」は再送信です(下位層のパケット損失のため)。

パケット損失がシングルストリームスループットに与える影響を説明するために作成した例...

                   [Wifi||LAN-0.0%-Loss||LAN-2.0%-Loss]
+--------------+                                        +--------------+
|              |                                        |              |
| Thinkpad-T61 |----------------------------------------| Linux Server |
|              |                                        | Tsunami      |
+--------------+                                        +--------------+
iperf client             ------------------>            iperf server
                             Pushes data

これは、iperfクライアントとサーバー間の60秒のテストのテスト結果を要約した表です... RTTジッタからiperfの結果にわずかな変動が見られる場合があります(RTT標準偏差が高い)。ただし、クライアントの有線NICを離れる2%の損失をシミュレートしたときに最も大きな違いが生じました。172.16.1.56と172.16.1.80は同じラップトップ(Ubuntuを実行)です。サーバーは172.16.1.5で、Debianを実行しています。クライアントの有線NICでnetemを使用してパケット損失をシミュレートしました...

Client IP       Transport    Loss     avg RTT    RTT StdDev    TCP Streams   Tput
-----------     ----------   ----     -------    ----------    -----------   ----------
172.16.1.56     802.11g      0.0%      0.016s          42.0              1     19.5Mbps
172.16.1.56     802.11g      0.0%      0.016s          42.0              5     20.5Mbps
172.16.1.80     1000BaseT    0.0%     0.0002s           0.0              1    937  Mbps
172.16.1.80     1000BaseT    0.0%     0.0002s           0.0              5    937  Mbps
172.16.1.80     1000BaseT    2.0%     0.0002s           0.0              1    730  Mbps <---
172.16.1.80     1000BaseT    2.0%     0.0002s           0.0              5    937  Mbps

コメント応答の編集

最後のシナリオ(1000BaseT、5ストリーム、2.0%の損失)で何が起こっているのか説明できますか?パケット損失はありますが、合計スループットは937メガビット/秒で飽和しています。

ほとんどのTCP実装では、パケット損失が検出されると、輻輳ウィンドウが減少しますnetemを使用して、クライアントからサーバーへの2%のパケット損失を強制しているため、クライアントのデータの一部がドロップされます。この例のnetemの最終的な効果は、730 Mbpsの単一ストリームの平均送信速度です。複数のストリームを追加すると、個々のTCPストリームが連携してリンクを飽和させることができます。

私の目標は、WiFiで可能な限り最高のTCPスループットを達成することです。私が理解したように、パケット損失によるスループットの低下に対処するために、ストリームの数を増やす必要があります。これは正しいです?

はい

さらに、どの時点で多すぎるストリームがスループットに悪影響を及ぼし始めますか?これは、限られたメモリおよび/または処理能力によって引き起こされますか?

それ以上の実験をせずに答えることはできませんが、1GEリンクの場合、リンクが5つのパラレルストリームで飽和する問題はありませんでした。TCPがスケーラブルであることを理解するために、Linuxサーバーは適切な状況下で1500以上の同時TCPソケットを処理できます。これは、同時TCPソケットのスケーリングに関連する別のSOの議論ですが、私の意見では、リンクを飽和させようとしているだけでは、20パラレルソケットを超えるものは過剰になります。

iperfは-wウィンドウサイズを最大値として使用するという誤解が必要です。これは、その21Kの初期値を超えて成長したと言っているように聞こえるからです。

を使用しなかったiperf -wので、誤解があると思います。wifiのケースについては非常に多くの質問があるため、wifiの単一TCPストリームのケースのTCPスループットのWiresharkグラフを含めます。

Wifi TCPシングルストリームスループット


テストデータ

また、これらのことをどのように測定したかを確認したい場合のために、未加工のテストデータも含めています。

802.11g、1 TCPストリーム

mpenning@mpenning-ThinkPad-T61:~$ mtr --no-dns --report \
  --report-cycles 60 172.16.1.5
HOST: mpenning-ThinkPad-T61       Loss%   Snt   Last   Avg  Best  Wrst StDev
  1.|-- 172.16.1.5                 0.0%    60    0.8  16.0   0.7 189.4  42.0
mpenning@mpenning-ThinkPad-T61:~$

[mpenning@tsunami]$ iperf -s -p 9000 -B 172.16.1.5

mpenning@mpenning-ThinkPad-T61:~$ iperf -c 172.16.1.5 -p 9000 -t 60 -P 1
------------------------------------------------------------
Client connecting to 172.16.1.5, TCP port 9000
TCP window size: 21.0 KByte (default)
------------------------------------------------------------
[  3] local 172.16.1.56 port 40376 connected with 172.16.1.5 port 9000
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-60.1 sec   139 MBytes  19.5 Mbits/sec
mpenning@mpenning-ThinkPad-T61:~$

802.11g、5 TCPストリーム

[mpenning@tsunami]$ iperf -s -p 9001 -B 172.16.1.5

mpenning@mpenning-ThinkPad-T61:~$ iperf -c 172.16.1.5 -p 9001 -t 60 -P 5
------------------------------------------------------------
Client connecting to 172.16.1.5, TCP port 9001
TCP window size: 21.0 KByte (default)
------------------------------------------------------------
[  3] local 172.16.1.56 port 37162 connected with 172.16.1.5 port 9001
[  5] local 172.16.1.56 port 37165 connected with 172.16.1.5 port 9001
[  7] local 172.16.1.56 port 37167 connected with 172.16.1.5 port 9001
[  4] local 172.16.1.56 port 37163 connected with 172.16.1.5 port 9001
[  6] local 172.16.1.56 port 37166 connected with 172.16.1.5 port 9001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-60.0 sec  28.0 MBytes  3.91 Mbits/sec
[  5]  0.0-60.1 sec  28.8 MBytes  4.01 Mbits/sec
[  4]  0.0-60.3 sec  28.1 MBytes  3.91 Mbits/sec
[  6]  0.0-60.4 sec  34.0 MBytes  4.72 Mbits/sec
[  7]  0.0-61.0 sec  30.5 MBytes  4.20 Mbits/sec
[SUM]  0.0-61.0 sec   149 MBytes  20.5 Mbits/sec
mpenning@mpenning-ThinkPad-T61:~$

1000BaseT、1ストリーム、0.0%の損失

mpenning@mpenning-ThinkPad-T61:~$ mtr --no-dns --report \
>   --report-cycles 60 172.16.1.5
HOST: mpenning-ThinkPad-T61       Loss%   Snt   Last   Avg  Best  Wrst StDev
  1.|-- 172.16.1.5                 0.0%    60    0.2   0.2   0.2   0.2   0.0
mpenning@mpenning-ThinkPad-T61:~$

[mpenning@tsunami]$ iperf -s -p 9002 -B 172.16.1.5

mpenning@mpenning-ThinkPad-T61:~$ iperf -c 172.16.1.5 -p 9002 -t 60 -P 1
------------------------------------------------------------
Client connecting to 172.16.1.5, TCP port 9002
TCP window size: 21.0 KByte (default)
------------------------------------------------------------
[  3] local 172.16.1.80 port 49878 connected with 172.16.1.5 port 9002
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-60.0 sec  6.54 GBytes   937 Mbits/sec
mpenning@mpenning-ThinkPad-T61:~$

1000BaseT、5ストリーム、0.0%の損失

[mpenning@tsunami]$ iperf -s -p 9003 -B 172.16.1.5

mpenning@mpenning-ThinkPad-T61:~$ iperf -c 172.16.1.5 -p 9003 -t 60 -P 5
------------------------------------------------------------
Client connecting to 172.16.1.5, TCP port 9003
TCP window size: 21.0 KByte (default)
------------------------------------------------------------
[  7] local 172.16.1.80 port 47047 connected with 172.16.1.5 port 9003
[  3] local 172.16.1.80 port 47043 connected with 172.16.1.5 port 9003
[  4] local 172.16.1.80 port 47044 connected with 172.16.1.5 port 9003
[  5] local 172.16.1.80 port 47045 connected with 172.16.1.5 port 9003
[  6] local 172.16.1.80 port 47046 connected with 172.16.1.5 port 9003
[ ID] Interval       Transfer     Bandwidth
[  4]  0.0-60.0 sec  1.28 GBytes   184 Mbits/sec
[  5]  0.0-60.0 sec  1.28 GBytes   184 Mbits/sec
[  3]  0.0-60.0 sec  1.28 GBytes   183 Mbits/sec
[  6]  0.0-60.0 sec  1.35 GBytes   193 Mbits/sec
[  7]  0.0-60.0 sec  1.35 GBytes   193 Mbits/sec
[SUM]  0.0-60.0 sec  6.55 GBytes   937 Mbits/sec
mpenning@mpenning-ThinkPad-T61:~$

1000BaseT、1ストリーム、2.0%の損失

mpenning@mpenning-ThinkPad-T61:~$ sudo tc qdisc add dev eth0 root netem corrupt 2.0%

mpenning@mpenning-ThinkPad-T61:~$ mtr --no-dns --report   --report-cycles 60 172.16.1.5
HOST: mpenning-ThinkPad-T61       Loss%   Snt   Last   Avg  Best  Wrst StDev
  1.|-- 172.16.1.5                 1.7%    60    0.2   0.2   0.2   0.2   0.0
mpenning@mpenning-ThinkPad-T61:~$

[mpenning@tsunami]$ iperf -s -p 9004 -B 172.16.1.5

mpenning@mpenning-ThinkPad-T61:~$ iperf -c 172.16.1.5 -p 9004 -t 60 -P 1
------------------------------------------------------------
Client connecting to 172.16.1.5, TCP port 9004
TCP window size: 42.0 KByte (default)
------------------------------------------------------------
[  3] local 172.16.1.80 port 48910 connected with 172.16.1.5 port 9004
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-64.1 sec  5.45 GBytes   730 Mbits/sec
mpenning@mpenning-ThinkPad-T61:~$

1000BaseT、5ストリーム、2.0%の損失

[mpenning@tsunami]$ iperf -s -p 9005 -B 172.16.1.5

mpenning@mpenning-ThinkPad-T61:~$ iperf -c 172.16.1.5 -p 9005 -t 60 -P 5
------------------------------------------------------------
Client connecting to 172.16.1.5, TCP port 9005
TCP window size: 21.0 KByte (default)
------------------------------------------------------------
[  7] local 172.16.1.80 port 50616 connected with 172.16.1.5 port 9005
[  3] local 172.16.1.80 port 50613 connected with 172.16.1.5 port 9005
[  5] local 172.16.1.80 port 50614 connected with 172.16.1.5 port 9005
[  4] local 172.16.1.80 port 50612 connected with 172.16.1.5 port 9005
[  6] local 172.16.1.80 port 50615 connected with 172.16.1.5 port 9005
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-60.0 sec  1.74 GBytes   250 Mbits/sec
[  7]  0.0-60.0 sec   711 MBytes  99.3 Mbits/sec
[  4]  0.0-60.0 sec  1.28 GBytes   183 Mbits/sec
[  6]  0.0-60.0 sec  1.59 GBytes   228 Mbits/sec
[  5]  0.0-60.0 sec  1.24 GBytes   177 Mbits/sec
[SUM]  0.0-60.0 sec  6.55 GBytes   937 Mbits/sec
mpenning@mpenning-ThinkPad-T61:~$

パケット損失シミュレーションを削除する

mpenning@mpenning-ThinkPad-T61:~$ sudo tc qdisc del dev eth0 root

最後のシナリオ(1000BaseT、5ストリーム、2.0%の損失)で何が起こっているのか説明できますか?パケット損失はありますが、合計スループットは937メガビット/秒で飽和しています。私の目標は、WiFiで可能な限り最高のTCPスループットを達成することです。私が理解したように、パケット損失によるスループットの低下に対処するために、ストリームの数を増やす必要があります。これは正しいです?さらに、どの時点で多すぎるストリームがスループットに悪影響を及ぼし始めますか?これは、メモリおよび/または処理能力の制限が原因ですか?
elin05

@ elin05:複数のストリームを使用すると、パケット損失が複数のストリームに分散するため、パケット損失が発生した場合、1つのストリームのみがTCPウィンドウのサイズを縮小し、他のストリームは影響を受けません。
BatchyX

802.11g(54Mbps)BDPは、8ミリ秒(16ミリ秒RTT / 2)の遅延で54KBのウィンドウサイズを要求して、飛行中のパケットでパイプをいっぱいに保ちませんか?サーバー側のウィンドウサイズは?
generalnetworkerror

@ generalnetworkerror、TCPウィンドウは静的ではありません... TCPのニーズに基づいて変化します...そのキャプチャ中、Tsunamiがアドバタイズする最大ウィンドウサイズは1177600バイトでした。津波の平均ウィンドウは1045083バイトで、その60秒のテストでの平均RTTは32.2msでした。
マイクペニントン

@MikePennington:iperfが-wウィンドウサイズを最大値として使用するという誤解があります。これは、21Kの初期値を超えて成長したと言っているように聞こえます。
generalnetworkerror

2

単一のtcpストリームの最大スループットの計算は次のとおりです。

(TCP Window [bytes]/RTT[seconds]) * 8 [bits/byte] = Max single tcp throughput in (bps)

そのため、ボトルネックが発生し、待ち時間が大きな役割を果たします。


0

これはおそらく、複数のプロセスと1つのプロセスが原因です。iperf 2.0.9では、クライアントで-P 2を使用してこれをテストできます。これにより、1つではなく2つのスレッドがフォークされます。最新のCPUの多くは複数のコアを備えているため、複数のスレッドを使用するとそれらを活用できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.