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이며 데비안을 실행합니다. 패킷 손실을 시뮬레이션하기 위해 클라이언트 유선 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 % 손실)에서 발생하는 상황을 설명 할 수 있습니까? 패킷 손실이 발생하더라도 총 처리량은 여전히 937Mbits / sec로 포화 상태입니다.
대부분의 TCP 구현 은 패킷 손실이 감지 될 때 혼잡 윈도우를 줄 입니다. netem 을 사용 하여 클라이언트에서 서버로 2 % 패킷 손실이 발생하므로 일부 클라이언트 데이터가 삭제됩니다. 이 예에서 netem 의 순 효과 는 730Mbps의 단일 스트림 평균 전송 속도입니다. 여러 스트림을 추가하면 개별 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