我目前正在研究不同的Docker覆盖networking的性能(特别是UDP吞吐量)。 我通过在与Docker覆盖networking连接的两个主机之间创build点对点连接,然后在Docker容器内运行iperf来检查吞吐量来做到这一点。 我注意到,每次我运行iperf作为客户端发送数据到运行iperf作为服务器的其他容器,客户端主机的CPU使用率达到100%。 我通过运行下面的命令得到了这个结果:
top -bn1 | grep "Cpu(s)" | \ sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | \ awk '{print 100 - $1"%"}'
所以,对我来说,吞吐量testing的限制因素似乎是我的主机的CPU容量,因为它运行在100%,不能产生更多的stream量来饱和networking连接。 我想知道如果这是一个iperf具体问题,所以我想用一个不同的工具运行相同的testing,但不知道哪个替代将是最好的 。 主机正在运行Ubuntu。 例如,我find了qperf , uperf和netpipe 。
另外,更一般地说,我开始想知道通常吞吐量性能的瓶颈是什么。 它不是总是CPU容量或链接的带宽 ? 哪些是与覆盖networking不直接相关的因素。
这是否意味着应用程序(或覆盖networking)的吞吐量仅取决于传输一定数量的数据所需的CPU周期数,以及如何通过networking对其进行压缩(如果这将是瓶颈的话)。
UDP既是CPU又是带宽绑定 。 它发送数据包时不保证发送,发送和接收数据包。
一般来说,UDP的性能是没有意义的。 没有什么能阻止你每秒发送1亿个数据包。 这使发送者CPU和networking饱和,而接收者可能没有得到任何东西。
如果你真的想testingUDP,这是一个相当长的话题,值得一书。 对于初学者,您需要监视错误率以及实际发送/接收的数据。
您应该使用TCP进行testing以测量主机之间的可用带宽。 iperf应该能够做到这一点。