Networking
為什麼多播 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(非託管)
檢查交換機是否使用流控。當任何連結埠無法跟上多播速率時,它將從源埠發出暫停幀,即。以100或 10 Mbit/s 的速度連結。
您可能想要禁用測試的流控制。我通常禁用它,因為它很少有用並且可能會導致行頭阻塞,就像你的情況一樣。TCP 的工作要好得多,而且很少有乙太網流控制有意義的情況(例如,在設計合理的 iSCSI SAN 中)。
您對 iPerf 的“-b”(頻寬)參數有所不同。我猜這會導致 IPG 報告的差異(包間間隙),這是您的多播和單播情況之間的 10 倍。
可疑地接近您報告的頻寬差異。所以這可能就是它的全部。