WLAN iperf TCPスループットテストでは、複数の並列ストリームにより1ストリームよりも高いスループットが得られます。TCPウィンドウサイズを増やしてみましたが、1ストリームだけでは最大スループットを達成できません。TCPレイヤーに、リンク容量全体の使用を妨げているものが他にありますか?
WLAN iperf TCPスループットテストでは、複数の並列ストリームにより1ストリームよりも高いスループットが得られます。TCPウィンドウサイズを増やしてみましたが、1ストリームだけでは最大スループットを達成できません。TCPレイヤーに、リンク容量全体の使用を妨げているものが他にありますか?
回答:
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グラフを含めます。
また、これらのことをどのように測定したかを確認したい場合のために、未加工のテストデータも含めています。
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:~$
[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:~$
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:~$
[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:~$
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:~$
[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
単一のtcpストリームの最大スループットの計算は次のとおりです。
(TCP Window [bytes]/RTT[seconds]) * 8 [bits/byte] = Max single tcp throughput in (bps)
そのため、ボトルネックが発生し、待ち時間が大きな役割を果たします。