linux-networking – 测量覆盖网络性能的正确方法

前端之家收集整理的这篇文章主要介绍了linux-networking – 测量覆盖网络性能的正确方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我目前正在研究不同Docker覆盖网络的性能(尤其是UDP吞吐量).我这样做是通过在与Docker覆盖网络连接的两个主机之间创建点对点连接,然后在Docker容器内运行iperf来检查吞吐量.我注意到,每当我运行iperf作为客户端将数据发送到运行iperf作为服务器的其他容器时,客户端主机的cpu使用率就达到100%.我通过运行我在 here上找到的以下命令获得了该结果:
top -bn1 | grep "cpu(s)" | \
       sed "s/.*,*\([0-9.]*\)%* id.*/\1/" | \
       awk '{print 100 - $1"%"}'

所以,对我而言,我的吞吐量测试的限制因素似乎是我的主机的cpu容量,因为它以100%运行并且无法产生更多流量来使网络连接饱和.我想知道这是否是一个特定的iperf问题所以我想用不同的工具运行相同的测试,但我不确定哪种替代方案最好.主机正在运行Ubuntu.例如,我找到了qperf,uperf和netpipe.

此外,更一般地说,我开始想知道通常是吞吐量性能的瓶颈.是不是总是cpu容量或链路带宽?哪些因素与覆盖网络没有直接关系.

这是否意味着应用程序(或覆盖网络)的吞吐量仅取决于传输一定数量的数据所需的cpu周期数以及它如何压缩以适应网络(如果这将成为瓶颈).

解决方法

UDP是cpu和带宽限制.它发送数据包而不保证它们被发送,发送或接收.

>如果发送方cpu太忙,则永远不会发送数据包.
>如果带宽无法跟上,则数据包在传输过程中被丢弃.
>如果接收器cpu太忙或未准备好处理传入的网络数据,它就会丢失.
>如果应用程序没有足够快地从OS提取数据包(并处理它们),它们就会丢失.

一般来说,UDP性能毫无意义.没有什么可以阻止你尝试每秒发送1亿个数据包.这使发送者cpu和网络饱和,而接收者可能没有得到任何东西.

如果你真的想测试UDP,这是一个相当长的话题,值得一本书.对于启动器,您需要监控错误率以及实际发送/接收的数据.

您应该使用TCP进行测试以测量主机之间的可用带宽. iperf应该能够做到这一点.

猜你在找的Linux相关文章