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

3
我在想为什么iperf显示TCP比UDP性能更好。这个问题非常类似于这个问题。
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个回答

7
默认的UDP数据报长度为1470字节。您可能需要使用-l参数增加长度。对于26Gb/s,我的建议是将您的-l参数设置为50000,并从此处上下调整。
您还可能需要在“-b10G”之间添加一个空格,以便它知道10G是要用于-b参数的值。此外,我相信大写G表示千兆字节。通过TCP测试,您可以实现的最大带宽为26 GigaBITS,远远不及10GB。我建议将您的-b参数值设为小写字母g的26g。

1

我怀疑您正在使用旧版iperf 2.0.5,这个版本已知在UDP方面存在性能问题。建议升级到 2.0.10 版本。

iperf -v 将显示版本信息。

注1:2.0.5版本中与该问题相关的主要问题是客户端线程和报告线程之间的互斥竞争。为解决此问题,增加了这两个线程之间的共享内存。

注3:2.0.10版本中还有其他性能相关的改进。

Bob


1
这个答案是无效的。我在Iperf3中遇到了相同的问题。 - undefined

-1
UDP应该比TCP快得多,因为它没有确认和拥塞检测。
这主要取决于你想做什么。如果你需要在互联网的两个端点之间传输文件,除非你在应用层手动实现可靠的传输机制,否则你应该使用TCP。
在我看来,用iPerf进行纯UDP带宽测试并没有太多意义,因为实质上它只是试图尽可能快地将数据包发送到网络中。我建议使用它来生成具有恒定数据速率的UDP流,以便大致测量UDP流量(如VoIP)在你的网络中可能发生的情况。

这不是这个问题的答案。 - undefined

-2
TCP 可以借助各种硬件卸载(例如 tso/gro)进行优化,而 UDP 由于这些卸载不适用于 UDP 数据报文,因此无法得到任何帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接