arn*_*e.z 7 iperf linux-networking cpu-usage stress-testing docker
我目前正在检查不同 Docker 覆盖网络的性能(尤其是 UDP 吞吐量)。为此,我在与 Docker 覆盖网络连接的两台主机之间创建点对点连接,然后iperf
在 Docker 容器内运行以检查吞吐量。我注意到每次我iperf
作为客户端运行向iperf
作为服务器运行的另一个容器发送数据时,客户端主机的CPU使用率达到100%。我通过运行在此处找到的以下命令获得了该结果:
top -bn1 | grep "Cpu(s)" | \
sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | \
awk '{print 100 - $1"%"}'
Run Code Online (Sandbox Code Playgroud)
因此,对我而言,吞吐量测试的限制因素似乎是主机的 CPU 容量,因为它以 100% 的速度运行并且无法产生更多流量来使网络连接饱和。我想知道这是否是一个iperf
特定问题,所以我想使用不同的工具运行相同的测试,但不确定哪种替代方案最好。主机正在运行 Ubuntu。例如,我发现qperf
,uperf
和netpipe
。
此外,更一般地说,我开始想知道吞吐量性能的瓶颈通常是什么。它不总是与CPU容量或链路带宽有关吗?哪些因素与覆盖网络没有直接关系。
这是否意味着应用程序(或覆盖网络)的吞吐量仅取决于它需要多少 CPU 周期来传输一定数量的数据以及它如何压缩它以适应它通过网络(如果这将是瓶颈)。
UDP 受 CPU 和带宽限制。它发送数据包,但不保证它们被发送、传输或接收。
一般来说,UDP性能是没有意义的。没有什么可以阻止您尝试每秒发送无数个数据包。这会使发送方 CPU 和网络饱和,而接收方可能无法获得任何信息。
如果你真的想测试 UDP,那是一个相当长的话题,值得写一本书。首先,您需要监控错误率以及实际发送/接收的数据。
您应该使用 TCP 进行测试以测量主机之间的可用带宽。iperf
应该能够做到这一点就好了。
归档时间: |
|
查看次数: |
655 次 |
最近记录: |