와이파이 TCP iperf 처리량 : 1 스트림 대 다중 스트림?


12

WLAN iperf TCP 처리량 테스트에서 여러 병렬 스트림은 1 개 스트림보다 더 높은 처리량을 제공합니다. TCP 창 크기를 늘리려 고했지만 여전히 1 스트림으로 최대 처리량을 얻을 수는 없습니다. TCP 계층에 전체 링크 용량을 사용하지 못하게하는 다른 요소가 있습니까?


당신은 얼마나 많은 차이를 관찰합니까? 이상적으로 하나의 TCP 스트림이 T의 처리량을 제공하는 경우에는 두 개가 각각 T / 2의 처리량을 개별적으로 제공해야합니다.
Manoj Pandey 2016 년

스트림 수에 관계없이 전체 링크 용량에 도달하지 않습니다. 최소 [IP + TCP] 헤더가있는 IPv4는 ~ 95 %의 채널 효율성을 제공합니다. sd.wareonearth.com/~phil/net/overhead 에서 우수한 프로토콜 오버 헤드 게시를 참조하십시오 .
generalnetworkerror

@ManojPandey, 나는 확실히 그가 무선 랜을 사용하고 특히 이후 ... 이상적인 케이스를보고있다 아니에요 ... 나는 그가 어떤 패킷 손실 ...이 의심
마이크 페닝 턴

TCP는 Wi-Fi를 통해 처리합니다. 당신이 그것을 사용해야하고 계층 3 패킷 손실을보고 있다면, TCP는 성능을 손상시키지 않고 손실 링크를 처리하도록 설계되지 않았기 때문에 계층 2 최대 재시도 횟수를 늘리는 것이 좋습니다.
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이며 데비안을 실행합니다. 패킷 손실을 시뮬레이션하기 위해 클라이언트 유선 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 그래프를 포함시킵니다.

Wi-Fi 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 % 손실)에서 발생하는 상황을 설명 할 수 있습니까? 패킷 손실이 발생하더라도 총 처리량은 여전히 ​​937Mbits / sec로 포화 상태입니다. 저의 목표는 WiFi를 통해 가능한 최고의 TCP 처리량을 달성하는 것입니다. 내가 이해하는 것처럼 패킷 손실로 인한 처리량 감소에 대응하기 위해 스트림 수를 늘려야합니다. 이 올바른지? 또한 어느 시점에서 너무 많은 스트림이 처리량에 부정적인 영향을 미치기 시작합니까? 메모리 및 / 또는 처리 능력이 제한되어 있습니까?
elin05

@ elin05 : 여러 스트림을 사용하면 여러 스트림에 패킷 손실이 분산되므로 패킷 손실이 발생하면 한 스트림 만 TCP 창의 크기를 줄이고 다른 스트림은 영향을받지 않습니다.
BatchyX

802.11g (54Mbps) BDP는 파이프를 기내 패킷으로 가득 채우기 위해 8ms (16ms RTT / 2) 지연으로 54KB의 창 크기를 요구하지 않습니까? 서버 쪽의 창 크기는 얼마입니까?
generalnetworkerror

@generalnetworkerror, TCP 창이 정적이 아닙니다 ... TCP 요구에 따라 변경됩니다 ... 캡처하는 동안 쓰나미가 광고 한 최대 창 크기는 1177600 바이트입니다. 쓰나미의 평균 창은 1045083 바이트 였고 60 초 동안의 평균 RTT는 32.2ms였습니다.
Mike Pennington

@ MikePennington : iperf가 -w 창 크기를 최대 21K 초기 값보다 커졌다 고 말하는 것처럼 최대 크기를 사용한다는 오해가 있어야합니다.
generalnetworkerror

2

다음은 단일 tcp 스트림의 최대 처리량에 대한 계산입니다.

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

따라서 병목 현상이 발생하고 대기 시간이 큰 역할을합니다.


0

여러 프로세스 대 하나의 프로세스 때문일 수 있습니다. iperf 2.0.9를 사용하면 클라이언트에서 -P 2를 통해이를 테스트 할 수 있습니다. 이것은 하나 대신 두 개의 스레드를 포크합니다. 대부분의 최신 CPU에는 여러 코어가 있으므로 여러 스레드를 사용하면 활용할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.