iperf3-性能测试
- 安装
- 1.apt安装
- 2.源码安装
- 使用方法
- iperf原理
- 测试
- 参考文档
- 性能测试
- 客户端
- 服务端
官方文档:https://iperf.fr/iperf-doc.php
安装
1.apt安装
sudo apt-get install iperf3
2.源码安装
# 按照官方说明安装
./configure
make
sudo make install
执行编译报错:
iperf3: error while loading shared libraries: libiperf.so.0: cannot open shared object file: No such file or directory解决:
./configure
make
sudo ldconfig
sudo make install
ldconfig命令的用途主要是在默认搜寻目录 /lib和 /usr/lib以及动态库配置文件 /etc/ld.so.conf内所列的目录下,搜索出可共享的动态链接库(格式如lib*.so*),进而创建出动态装入程序(ld.so)所需的连接和缓存文件。缓存文件默认为 /etc/ld.so.cache,此文件保存已排好序的动态链接库名字列表,为了让动态链接库为系统所共享,需运行动态链接库的管理命令ldconfig,此执行程序存放在/sbin目录下。
ldconfig通常在系统启动时运行,而当用户安装了一个新的动态链接库时,就需要手工运行这个命令。
docs文件夹下生成文档
make html
# 报错:大概是因为缺少sphinx文档的主题
ImportError: No module named sphinx_bootstrap_theme# 安装sphinx_bootstrap_theme解决
pip install sphinx_bootstrap_theme
使用方法
适用于 服务端/客户端
-f 指定数据显示格式 [k|m|K|M] 分别表示 Kbits、Mbits、KBytes、MBytes,默认是 Mbits
-l 设置读写缓冲区的长度。TCP方式默认为8KB,UDP方式默认为1470字节。
-u 使用 udp 协议
-i 以秒为单位统计带宽值
-b,--bandwidth [K|M|G]:指定UDP模式使用的带宽,单位bits/sec,默认值是1 Mbit/sec
-m 显示最大的 TCP 数据段大小
-p 指定服务端或者客户端的端口号
-w 指定 TCP 窗口大小
-t,--time:指定数据传输的总时间,即在指定的时间内,重复发送指定长度的数据包。默认10秒
-A:CPU亲和性,可以将具体的iperf3进程绑定对应编号的逻辑CPU,避免iperf进程在不同的CPU间调度
-B 绑定道指定的主机地址或接口
-C 兼容旧版本
-M 设置 TCP 数据包的最大 MTU 值-V, --verbose: 更多细节输出
优化方法:
-P, –parallel:线程数。指定客户端与服务端之间使用的线程数。默认是1线程。需要客户端与服务器端同时使用此参数。
iperf原理
服务端在压力测试前服务端和客户端先使用udp协商压测使用的协议(tcp/udp)等测试参数,所以服务端不用制定压测协议,直接运行iperf3 -s -p 10081即可。
测试
UDP服务端客户端端使用如下命令:
# 服务端
./iperf3 -s -p 10081# 客户端
./iperf3 -c 192.168.22.123 -u -p 10081 -t 60 -f m -b50000M
[ ID] Interval Transfer Bitrate Jitter Lost/Total Datagrams
[ 5] 0.00-60.00 sec 16.2 GBytes 2321 Mbits/sec 0.000 ms 0/12453417 (0%) sender
[ 5] 0.00-60.01 sec 1.73 GBytes 248 Mbits/sec 0.043 ms 11119569/12448888 (89%) receiver
- Transfer:传输字节数
- Bitrate:上下行带宽
- Jitter:时延抖动(时延参数)。
计算方法:假设数据包i客户端发送时间为Si,服务端接收时间为Ri。数据包i和j的抖动
D(i, j)=(Rj - Sj) - (Ri - Si)
参考文档
- iperf 的介绍和使用:http://www.enkichen.com/2017/06/06/iperf-introduce/
- Linux命令大全:iperf https://ipcmen.com/iperf
性能测试
客户端
iperf3 -c 192.168.22.100 -p 1001 -t 30 -f m -b 10240m -p 128
测试参数:
-
-c 为客户端运行并要指定服务端的IP地址
-
-b 表示使用的测试带宽
-
-t 表示以时间为测试结束条件进行测试,默认为 10 秒;
-
-d 打印出更详细的debug调试信息
-
-P到iperf3服务器端并行的连接数量,默认值是1。
说明:(在日常测试中,我们会发现当最大吞吐量上不去的时候,开多个并行连接一般会立竿见影的提升最大吞吐量,通常我人们的第一反应是iperf开启了多线程(详见:Linux下如何查看多线程进程里的线程信息),但事实上在开启多个并行连接的情况下iperf不论是客户端还是服务端,依然工作在单线程模式下(详见:iPerf3 -P参数详细图文分析),最大吞吐量主要取决于接收方主机,发送方主机和网络3个节点的,最大带宽,最大包处理能力,延时这三个能力,后面我们可以专门开篇讲讲做最大吞吐量测试3个节点3个能力的影响,以及应该如何正确设置iperf的参数。
使用方式:如下所示:表示开3个连接
iperf3 -c 192.168.3.15 -u -P 3
结果:
-
Interval:程序的运行时间
-
Transfer:传输的数据总量
-
Bandwidth:测试出的带宽
-
Jitter:网路抖动
-
Lost/Total Datagrams:丢包数/总数据包数(丢包率)
服务端
./iperf3 -s -p 1001
查看CPU是否打满
htop