我想知道为什么iperf在TCP中表现出比UDP更好的性能。这个问题与this一个非常相似。
UDP应该比TCP快得多,因为没有确认和拥塞检测。我正在寻找解释。
$ 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
$ 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
答案 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 数据报。