为什么iperf带宽高于dd->netcat

Why iperf bandwidth is highter than dd->netcat

我想测量我的嵌入式设备上 1Gb 以太网接口的实际速度,该设备配备 ARM cortex-A8 双核 600MHz 处理器,另一端连接到 PC。

我尝试使用安装在设备上的 iperf 客户端和安装在 PC 上的 iperf 服务器进行检查。我得到了 the following results

然后我根据以下命令更改了 iperf 客户端:

$ dd if=/media/sd0p1/Videos/20180221_164356.mp4 bs=1M | nc 192.168.0.2 5001

在这种情况下,带宽大约比 iperf 少 2 倍: dd-nc-results.

我也读过 this post, and than executed 2 instances of dd->nc pipeline on the client side, that sends data to iperf on the PC side and got this result。 我还发现,在 dd->nc 的情况下,我的 CPU 负载几乎满了。 我有两个问题:

  1. 我认为哪种情况是识别真实带宽的更准确方法。
  2. 当我开始在我的设备上启动更多应用程序时,结果会有何不同?我是对的,如果工作进程数量增加,带宽应该下降。

我在类似的设置(ARM <-> PC)中遇到了同样的现象。我用谷歌搜索,发现你的问题 - 没有答案。所以我继续进行一些测量,发现在我测试的小脑 ARM 中,iperf3 在测试期间消耗了 22% 的 CPU - 但在 dd ... | nc 版本中,netcat 消耗了 85 %:

因此,在涉及通过管道传递大量数据的情况下,显然会有更多的开销。我的猜测是因为 ARM CPU 上的小 CPU 缓存,dd 生成的数据从一个进程到另一个进程的交叉足以溢出 CPU缓存大小 - 对最终数据传输速度有很大影响(在我的例子中,50%)。

因此,第一个问题的答案是,这两个测试路径为您提供了不同的信息:

  • iperf3 测试会检查您的网络速度。仅此而已。
  • dd ... | nc 测试还会检查您的网络速度在 ARM CPU 上的某些负载下的表现。在你的设置和我的设置中,它显然受到影响。

关于您的第二个问题 - 嗯,如果您启动更多使用 ARM CPU 的应用程序,那么您的最高速度将受到更大的影响。