介绍
-
iperf3 githup仓库地址:https://github.com/esnet/iperf.git
-
iperf2 源码仓库地址:https://sourceforge.net/p/iperf2/code/ci/master/tree/
iperf2 和 iperf3 是两个独立维护的项目,由不同的团队维护,功能上有差异,最主要的差异是 iperf2 支持多线程,iperf3 不支持,因此 iperf2 对于网卡多队列的使用更友好。iperf3 3.16 版本开始支持多线程。
benchmark子项
项目中主要测试 tcp 和 udp 带宽。
安装
源码编译
步骤 1 联网下载iperf源码,或从浏览器下载后上传至服务器
wget https://github.com/esnet/iperf/archive/refs/tags/3.13.zip --no-check-certificate
wget https://iperf.fr/download/source/iperf-2.0.9-source.tar.gz --no-check-certificate
步骤 2 解压并进入目录
# unzip
# cd iperf-3.13
步骤 3 编译安装
# ./configure
# make -j
# make install
软件仓安装
yum install iperf3
apt install iperf3
以上安装以iperf3为例,iperf2的安装方法一样,iperf2的源码编译方法跟iperf3一样,参考iperf3的步骤替换对应的源码地址,源码包名称即可。
测试
命令选项介绍
- iperf2 命令格式
iperf [-s|-c host] [options]
,常用选项如下
iperf命令 | 功能 | 备注 |
---|---|---|
-h,–help | 显示帮助信息 | |
-s,–server | 设置为server模式 | |
-p,–port | 指定监听或发送端口 | 不指定默认是5001 |
-c,–client | 作为client端时,指定server | |
-i,–interval | 指定实时打印测试信息的时间 | 如-i 1则一秒打印一次 |
-v,–version | 打印版本 | |
-u,–udp | 测试udp | 不指定-u时测试tcp |
-t,–time | 在客户端使用是指定测试时间,以秒为单位 在服务端使用是指定监听时间,超时后没有收到客户端发来的报文就会退出程序;默认不设置,持续监听。 | 不指定为10s |
-b,–bandwidth | 设置发送报文速率 | |
-n,–num | 指定报文传输字节数,会取代-t选项 | |
-p ,–parallel | 指定客户端运行的线程数 | iperf2 特有的功能,iperf3 无此功能。 多线程会使用网卡的多队列特性,结合绑核,绑中断可以提升性能,通常 25ge 及以上的高速网络需要用多线程测试才能达到理论值。 |
- iperf3 命令格式:
iperf3 [-s|-c host] [options]
,常用选项如下
iperf3命令 | 功能 | 备注 |
---|---|---|
-h,–help | 显示帮助信息 | |
-s,–server | 设置为server模式 | |
-d,–daemon | 以守护进程的方式运行服务端 | 服务端参数 |
-p,–port | 指定监听或发送端口,默认端口5201 | |
-c,–client | 作为client端时,指定server | |
-i,–interval | 指定实时打印测试信息的时间 | 如-i 1则一秒打印一次,最大设置 60s 。 |
-v,–version | 打印版本 | |
-v,–verbose | 输出更多详细信息 | |
-d, --debug | 输出调试信息 | |
-u,–udp | 测试udp | 不指定-u时测试tcp |
-t,–time | 指定测试时间,以秒为单位 | 不指定为10s |
-b,–bitrate | 指定发送报文的速率,0表示无限制 默认udp限制为1 mbit/sec,tcp无限制 | 客户端参数 |
-n,–bytes | 指定传输的字节数,取代-t参数 | |
-k, --blockcount | 指定传输的报文数,取代-t和-n参数 | |
-l, --length | 设置读写buffer的深度,tcp默认是128kb, | |
-p, --parallel | 设置发送的流数量 | 注意和iperf2的区别,多条流并不能使用多队列,也不能使用多核,实际上还是单核,单队列测试。 因此在25ge以上高速网络测试时,iperf3需要起多个测试命令并行测试才能发挥网卡的多队列特性,达到最优测试性能。注意:iperf3 3.16版本开始支持多线程。 |
常用测试项命令
服务端运行服务
iperf -s -b <服务端网卡ip>
iperf3 -s -b <服务端网卡ip>
服务端运行服务并指定端口为9001
iperf -s -p 9001
iperf3 -s -p 9001
客户端执行tcp带宽测试
iperf -c xx.xx.xx.xx
iperf3 -c *xx.xx.xx.xx*
客户端执行tcp带宽测试,指定端口为9001
iperf -c xx.xx.xx.xx -p 9001
iperf3 -c *xx.xx.xx.xx* -p 9001
客户端执行60s udp带宽测试,并指定发包速率为1gbit/sec
iperf -c xx.xx.xx.xx -t 60 -u -b 1g
iperf3 -c xx.xx.xx.xx -t 60 -u -b 1g
客户端执行 tcp 带宽测试,使用 4 个线程
# iperf -c xx.xx.xx.xx -p 4
客户端执行 tcp 带宽测试,发送 4 条流
# iperf3 -c xx.xx.xx.xx -p 4
调优
硬件调优
bios调优
os 调优
cpu governor
linux cpu governor (p-states) 设置的影响很大。performance 和 powersave 对比,提升明显。
#for rhel
cpupower frequency-set -g performance
#for debian
cpufreq-set -r -g performance
#check
cpupower frequency-info
cpu frequency
-
driver: kernel module or code that makes cpu frequency calls to hardware
-
governor: driver se ng that determines how the frequency will be set
-
performance governor: bias towards higher frequencies
-
userspace governor: allow user to specify exact core and package frequencies
-
only the intel p-states driver can make use of turbo boost
-
check current se ngs: cpupower frequency-info
内核协议栈调优
tcp调优
针对不同带宽网卡
对于具有 10g nic 的主机,针对高达 100 毫秒 rtt 的网络路径进行了优化,并且对单流和并行流工具具有友好性,请将其添加到 /etc/sysctl.conf:
# allow tcp with buffers up to 64mb
net.core.rmem_max = 67108864
net.core.wmem_max = 67108864
# increase linux autotuning tcp buffer limit to 32mb
net.ipv4.tcp_rmem = 4096 87380 33554432
net.ipv4.tcp_wmem = 4096 65536 33554432
# recommended for hosts with jumbo frames enabled
net.ipv4.tcp_mtu_probing=1
# recommended to use a 'fair queueing' qdisc (either fq or fq_codel)
net.core.default_qdisc = fq
对于具有 10g 网卡的主机,该网卡针对高达 200 毫秒 rtt 的网络路径进行了优化,并且对单流和并行流工具具有友好性,或者对于在高达 50 毫秒 rtt 的路径上优化了 40g 网卡:
# allow tcp with buffers up to 128mb
net.core.rmem_max = 134217728
net.core.wmem_max = 134217728
# increase tcp autotuning buffer limits.
net.ipv4.tcp_rmem = 4096 87380 67108864
net.ipv4.tcp_wmem = 4096 65536 67108864
# recommended for hosts with jumbo frames enabled
net.ipv4.tcp_mtu_probing=1
# recommended to enable 'fair queueing'
net.core.default_qdisc = fq
对于具有针对高达 200 毫秒 rtt 的网络路径优化的 100g nic 的主机,请使用以下配置:
# allow tcp with buffers up to 2gb (max allowed in linux is 2gb-1)
net.core.rmem_max=2147483647
net.core.wmem_max=2147483647
# increase tcp autotuning buffer limits. for 100g, it helps to increase default buffer too.
net.ipv4.tcp_rmem=4096 67108864 1073741824
net.ipv4.tcp_wmem=4096 67108864 1073741824
# recommended for hosts with jumbo frames enabled
net.ipv4.tcp_mtu_probing=1
# recommended to enable 'fair queueing'
net.core.default_qdisc = fq
udp调优
如果不进行一些调整,udp 将无法获得完整的 10gbps(或更高)。重要因素是:
- 使用巨型帧 jumbo frames:使用 9k mtu 的性能将提高 4-5 倍
- 数据包大小:最佳性能是 mtu 大小减去数据包标头大小。例如,对于 9000 字节的 mtu,将 8972 用于 ipv4,将 8952 用于 ipv6。
- socket buffer size:对于 udp,缓冲区大小与 rtt 的关系不像 tcp 那样,但默认值仍然不够大。在大多数情况下,将套接字缓冲区设置为 4m 似乎有很大帮助
- core selection:10g 的 udp 通常受到 cpu 限制,因此选择正确的核心非常重要。在 sandy/ivy bridge 主板上尤其如此。
示例:
iperf3 -s -b <服务端ip> -u
taskset -c <cpu核心> numactl -n <numa节点> iperf3 -c <服务端ip> -b <被测网卡ip> -u -l 8972 -b4m
taskset -c <cpu核心> numactl -n <numa节点> iperf3 -c <服务端ipv6> -b <被测网卡ipv6> -u -l 8952 -b4m -6
发表评论