我有两台机器(两台都安装了 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 倍。
与您报告的带宽差异非常接近。所以这可能就是全部原因。