Iperf 关于带宽和传输的结果没有意义

网络工程 iperf
2022-02-19 01:54:39

我无法理解为什么 iperf 的行为方式如此。我只是想将 UDP 流量从 Raspberry Pi 发送到我的计算机。

这是它在客户端的样子

pi@raspberrypi:~ $ iperf -c 192.168.0.5 -t 10 -i 1 -u -b 10000m
------------------------------------------------------------
Client connecting to 192.168.0.5, UDP port 5001
Sending 1470 byte datagrams, IPG target: 1.18 us (kalman adjust)
UDP buffer size:  160 KByte (default)
------------------------------------------------------------
[  3] local 192.168.0.200 port 51303 connected with 192.168.0.5 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0- 1.0 sec  11.5 MBytes  96.3 Mbits/sec
[  3]  1.0- 2.0 sec  11.4 MBytes  95.3 Mbits/sec
[  3]  2.0- 3.0 sec  11.4 MBytes  95.8 Mbits/sec
[  3]  3.0- 4.0 sec  11.3 MBytes  95.2 Mbits/sec
[  3]  4.0- 5.0 sec  11.4 MBytes  95.5 Mbits/sec
[  3]  5.0- 6.0 sec  11.4 MBytes  95.5 Mbits/sec
[  3]  6.0- 7.0 sec  11.4 MBytes  95.4 Mbits/sec
[  3]  7.0- 8.0 sec  11.3 MBytes  95.0 Mbits/sec
[  3]  8.0- 9.0 sec  11.3 MBytes  94.8 Mbits/sec
[  3]  9.0-10.0 sec  11.4 MBytes  95.5 Mbits/sec
[  3]  0.0-10.0 sec   114 MBytes  95.4 Mbits/sec
[  3] Sent 2 datagrams
[  3] Server Report:
[  3]  0.0-10.0 sec   114 MBytes  95.4 Mbits/sec   0.201 ms    0/81153 (0%)

现在这就是它在服务器端的样子

Comp-Name:Directory username$ iperf -s -i 1 -u
------------------------------------------------------------
Server listening on UDP port 5001
Receiving 1470 byte datagrams
UDP buffer size:  768 KByte (default)
------------------------------------------------------------
[  3] local 192.168.0.5 port 5001 connected with 192.168.0.200 port 51303
[ ID] Interval       Transfer     Bandwidth        Jitter   Lost/Total Datagrams
[  3]  0.0- 1.0 sec  11.4 MBytes  95.6 Mbits/sec   0.136 ms    0/ 8128 (0%)
[  3]  1.0- 2.0 sec  11.4 MBytes  95.4 Mbits/sec   0.120 ms    0/ 8113 (0%)
[  3]  2.0- 3.0 sec  11.4 MBytes  95.5 Mbits/sec   0.149 ms    0/ 8124 (0%)
[  3]  3.0- 4.0 sec  11.4 MBytes  95.5 Mbits/sec   0.270 ms    0/ 8122 (0%)
[  3]  4.0- 5.0 sec  11.4 MBytes  95.5 Mbits/sec   0.255 ms    0/ 8119 (0%)
[  3]  5.0- 6.0 sec  11.4 MBytes  95.5 Mbits/sec   0.272 ms    0/ 8124 (0%)
[  3]  6.0- 7.0 sec  11.4 MBytes  95.4 Mbits/sec   0.390 ms    0/ 8109 (0%)
[  3]  7.0- 8.0 sec  11.3 MBytes  95.0 Mbits/sec   0.202 ms    0/ 8079 (0%)
[  3]  8.0- 9.0 sec  11.3 MBytes  94.9 Mbits/sec   0.273 ms    0/ 8070 (0%)
[  3]  9.0-10.0 sec  11.4 MBytes  95.4 Mbits/sec   0.273 ms    0/ 8113 (0%)
[  3]  0.0-10.0 sec   114 MBytes  95.4 Mbits/sec   0.202 ms    0/81153 (0%)

如果我尝试推送 10,000 Mbps 的数据,为什么带宽 (Mbits/sec)传输 (MBytes)的上限为 ~95 和 ~11.4?

iperf不应该尝试推流量并在封顶后显示损失吗?我在这里遗漏了一些明显的东西吗?

谢谢,穆迪夫特

2个回答

Raspberry Pi 1,2 和 0 有一个 100Mb/s 的网络接口卡,所以这可能是限制流量的原因。
(树莓派 3 具有千兆以太网接口,但它通过 USB 2 连接到处理器,因此仅限于 300Mb/s 的 USB 2 速度)。

报告的传输和带宽与 100Mb/s 连接一致。正如@Ron Maupin 在评论中暗示的那样,有一些开销(标头和处理)导致可用带宽略低于接口速度。

iperf不应该尝试推流量并在封顶后显示损失吗?

不,这不是它的工作原理。报告的带宽是实际发送的带宽。

由于窗口很小,客户端套接字写入正在阻塞或获取EAGAIN 或 ENOBUFS 。使用 -w 增加它,然后内核将在写入之后但在传输之前下降。此外,每个 -e 的输出可能会有所帮助。这不会影响每个 100Mb/s 链路的端/端测量,但可能会导致客户端超过该值。这是由于 UDP 是无连接的,因此流量将被客户端的内核丢弃。