iperf3是遵循BSD许可协议的网络TCP、UDP、STCP协议的测试工具,支持IPv4和v6,最初由 NLANR/DAST开发,后来主要由ESnet / Lawrence Berkeley National Laboratory开发。目前看,开发停止在2016年,这个软件的特点小巧玲珑,简单易用,被移植到各种各样的平台,很快成为广为使用的网络带宽测试工具。
最近遇到一个问题,iperf3在测试带宽的时候,在带宽很高的时候,CPU占用率非常高,导致带宽上不去。于是花时间调研了一下,看了手册、文档、源代码,然后自己搭建环境测试了一下,发现iperf3的调优还是挺方便的。
环境如下:
本机 + VMware Fedora 31(1C2G)
iperf3.1.3
命令如下:
服务器:
iperf3 –s
客户端:
iperf –c server_ip –p 5201 –Z –u
iperf –c server_ip –p 5201 –Z –u –b 300M
测试结果:
结论如下:
1、如果使用-Z参数,网络带宽可以达到4倍,但是CPU利用率仅为大约50%-75%
2、如果使用-b XM参数,则在网络实际带宽大于X时,则X越大,消耗的CPU越多,这是iperf的实现造成的。但是如果实际网络带宽小于X时,则和不加参数一样,CPU消耗不大
3、CPU的消耗不仅仅是iperf,而且还有系统,使用-b参数会大幅度提升系统的CPU消耗,最大可能会提升一个数量级
4、UDP:使用-u参数,可以用UDP协议测试带宽,性能更容易达标。但是又丢包问题
5、TCP:不使用-u参数,但是配置窗口大小是个技术活,而这个问题恰恰是iperf的初衷,https://iperf.fr/iperf-doc.php 这个文档的 Tuning a TCP connection章节有一个计算窗口大小的公式
建议如下:
1、使用-Z参数来减少CPU消耗,同时提升默认带宽测试能力
2、如果仅仅测试极限带宽,不要用-b参数
顺便提到的是下载Fedora(https://getfedora.org/)的时候,我发现Fedora也不是当年吴下阿蒙了,Fedora有桌面版本、服务器版本、COREOS、SILVERBLUE、IOT5个系列,支持x64和aarch64两个平台,而且已经和AWS、GCP、OpenStack、BareMetal都有合作,这个还是真的很重要,通过兼容性实现了生态和价值。
Fedora的生态系统
相关信息: