iperf TCP比UDP快得多,为什么?

时间:2017-10-31 12:19:44

标签: tcp udp iperf

我想知道为什么iperf在TCP中表现出比UDP更好的性能。这个问题与this一个非常相似。

UDP应该比TCP快得多,因为没有确认和拥塞检测。我正在寻找解释。

UDP(807 MBits / sec)

$ iperf -u -c 127.0.0.1 -b10G
------------------------------------------------------------
Client connecting to 127.0.0.1, UDP port 5001
Sending 1470 byte datagrams
UDP buffer size:  208 KByte (default)
------------------------------------------------------------
[  3] local 127.0.0.1 port 52064 connected with 127.0.0.1 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec   962 MBytes   807 Mbits/sec
[  3] Sent 686377 datagrams
[  3] Server Report:
[  3]  0.0-10.0 sec   960 MBytes   805 Mbits/sec   0.004 ms 1662/686376 (0.24%)
[  3]  0.0-10.0 sec  1 datagrams received out-of-order

TCP(26.7 Gbits / sec)

$ iperf -c 127.0.0.1
------------------------------------------------------------
Client connecting to 127.0.0.1, TCP port 5001
TCP window size: 2.50 MByte (default)
------------------------------------------------------------
[  3] local 127.0.0.1 port 60712 connected with 127.0.0.1 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec  31.1 GBytes  26.7 Gbits/sec

4 个答案:

答案 0 :(得分:1)

我怀疑你正在使用旧的iperf版本2.0.5,它已知UDP的性能问题。我建议使用2.0.10版本。

iperf -v 会提供版本

注1:与此问题相关的2.0.5中的主要问题是由于客户端线程与报告者线程之间的互斥争用。增加了这两个线程之间的共享内存以解决此问题。

注3:2.0.10中还有其他与性能相关的增强功能。

鲍勃

答案 1 :(得分:1)

  

UDP应该比TCP快得多,因为没有确认和拥塞检测。

这主要取决于您的目标。如果需要在Internet中的两个端点之间传输文件,除非您在应用程序级别在UDP上手动实现可靠的传输机制,否则您将需要使用TCP。

在我看来,用iPerf进行纯UDP带宽测试没有多大意义,因为它本质上只会导致iPerf尝试尽可能快地将数据包放到线路上。我建议使用它来生成具有恒定数据速率的UDP流,以便粗略地衡量网络中UDP流量会发生什么,例如VoIP。

答案 2 :(得分:1)

UDP数据报的默认长度为1470字节。您可能需要使用-l参数来增加长度。对于26Gb / s,我会为-l参数尝试类似50000的操作,然后从那里向上或向下

您可能还需要在“ -b10G”之间添加一个空格,以便它知道10G是用于-b参数的值。我也相信大写字母G代表GigaBYTES。通过TCP测试,最大可达到的带宽为26 GigaBITS,这在任何地方都无法接近10GB。我会将您的-b参数值设置为26g,并使用小写的g。

答案 3 :(得分:0)

TCP 可通过各种硬件卸载(例如 tso/gro)获得帮助,其中任何卸载都无法帮助 UDP,因为它们不适用于 udp 数据报。