为什么多播 UDP 比单播 UDP 慢?

为什么多播 UDP 比单播 UDP 慢?

我有两台机器(两台都安装了 Centos 7.3)通过 1G 交换机连接。当我测量两台机器之间的 UDP 吞吐量时,iperf它给出的结果是大约 850 Mbit/s。然而当我测量多播UDP 吞吐量结果约为 95 Mbit/s(速度几乎减慢 10 倍)。

造成这种情况的可能原因有哪些?

单播的示例输出:

$ iperf -c 192.168.1.11 -u -b 9900m -f m -i 5 -t 30 -w 1m
------------------------------------------------------------
Client connecting to 192.168.1.11, UDP port 5001
Sending 1470 byte datagrams, IPG target: 1.19 us (kalman adjust)
UDP buffer size: 2.00 MByte (WARNING: requested 1.00 MByte)
------------------------------------------------------------
[  3] local 192.168.1.208 port 52738 connected with 192.168.1.11 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0- 5.0 sec   503 MBytes   845 Mbits/sec
[  3]  5.0-10.0 sec   507 MBytes   850 Mbits/sec
[  3] 10.0-15.0 sec   500 MBytes   839 Mbits/sec
[  3] 15.0-20.0 sec   499 MBytes   837 Mbits/sec
[  3] 20.0-25.0 sec   497 MBytes   834 Mbits/sec
[  3] 25.0-30.0 sec   501 MBytes   841 Mbits/sec
[  3]  0.0-30.0 sec  3008 MBytes   841 Mbits/sec
[  3] Sent 2145384 datagrams
[  3] Server Report:
[  3]  0.0-30.0 sec  3008 MBytes   841 Mbits/sec   0.406 ms    0/2145384 (0%)

多播的示例输出:

$ iperf -c 239.255.1.3 -u -b 990m -f m -i 5 -t 30 -w 1m
------------------------------------------------------------
Client connecting to 239.255.1.3, UDP port 5001
Sending 1470 byte datagrams, IPG target: 11.88 us (kalman adjust)
Setting multicast TTL to 1
UDP buffer size: 2.00 MByte (WARNING: requested 1.00 MByte)
------------------------------------------------------------
[  3] local 192.168.1.208 port 53248 connected with 239.255.1.3 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0- 5.0 sec  57.2 MBytes  95.9 Mbits/sec
[  3]  5.0-10.0 sec  57.0 MBytes  95.6 Mbits/sec
[  3] 10.0-15.0 sec  56.4 MBytes  94.6 Mbits/sec
[  3] 15.0-20.0 sec  56.4 MBytes  94.6 Mbits/sec
[  3] 20.0-25.0 sec  56.4 MBytes  94.6 Mbits/sec
[  3] 25.0-30.0 sec  54.5 MBytes  91.4 Mbits/sec
[  3]  0.0-30.0 sec   338 MBytes  94.3 Mbits/sec
[  3] Sent 240946 datagrams

一些观察:

  • 问题是对称的(切换 iperf 客户端和服务器的位置没有帮助)
  • 据悉,iptraf-ng发送方的流量已经很低了。不过我不知道是否可以相信它。

更新: 交换机:Netgear GS108(非托管)

答案1

检查交换机是否使用流量控制。当任何链接端口无法跟上多播速率时,它会从源端口发出暂停帧,即链接在100或 10 Mbit/s。

您可能需要禁用流量控制以进行测试。我通常会禁用它,因为它很少用,并且可能会导致队头阻塞,就像您的情况一样。TCP 做得更好,而且以太网流量控制在少数情况下才有意义(例如在设计合理的 iSCSI SAN 中)。

答案2

iPerf 的“-b”(带宽)参数存在差异。我猜这导致了 IPG(数据包间间隙)中报告的差异,即多播和单播情况之间的 10 倍。

与您报告的带宽差异非常接近。所以这可能就是全部原因。

相关内容