网络性能测试方式
测试设备物理性能的工具比较多,比较常用的有netperf、iperf3,以及qperf这三种,下面对这三种工具使用方式进行简要说明。
被测机:需要做压力测试网络性能的服务器,可作为netperf测试中的client端(发送端)或server端(接收端)。
辅助机:用于netperf/iperf3测试中的client端(发送端)或server端(接收端),用于与被测机建立连接,传递测试数据。
网卡多队列:需分别在被测机和辅助云服务器上开启网卡多队列。
ethtool -l eth0 | grep -i Pre -A 5 | grep Combined -> 检查服务器支持的队列个数
ethtool -L eth0 combined X -> 设置队列数,开启网卡多队列功能,X表示上一个命令查询的队列数
netperf
netperf是一个基于client-server模式的网络测试工具,可以测量TCP和UDP传输的吞吐量、时延、CPU占用率等性能参数。它可以测试以下几种模式的TCP核UDP网络性能:
- TCP_STREAM:client端向server端发送批量TCP数据
- UDP_STREAM:client端向server端发送批量UDP数据
- TCP_RR和TCP_CRR:前者是在同一个连接中进行多次request和response请求,后者是每次请求新建一个连接(HTTP)
- UDP_RR:使用UDP进行request和response请求
不同子网下的主机使用netperf时连接超时。netperf在设计时关闭了此功能,需要通过额外参数进行打开‘-R 1’。
安装方式
源码安装
1 | yum -y install unzip gcc gcc-c++ |
rpm安装
例如,对于centos7系统
1 | wget http://repo.iotti.biz/CentOS/7/x86_64/netperf-2.7.0-1.el7.lux.x86_64.rpm |
常用参数
工具名称 | 工具说明 | 主要参数 | 参数说明 |
netserver | 接收端工具(Server 端) | -p | 监听的端口号 |
-D | 不在后台运行 | ||
-T | netserver/netperf绑定到cpu or lcpu | ||
-4 | IPv4协议栈 | ||
netperf | 发送端工具(Client 端) | -H | 指定netserver的hostname或者IP |
-p | 指定端口号 | ||
-l | 指定运行时间 | ||
-t | 指定发包协议类型:TCP_STREAM或UDP_STREAM。建议使用UDP_STREAM | ||
-m | 指定数据包大小。 测试PPS时,该值为 1。 测试BPS(bit per second)时,该值为1400。 |
关于Markdown表格单元格合并,可参考 https://blog.csdn.net/qq_42711815/article/details/89257489
使用场景
TCP带宽测试
发包方向 : netperf -> netserver
在辅助机执行以下命令,启动netserver进程
1 | netserver -p 12001 |
在测试机中执行以下命令,启动netperf进程,指定到辅助机的netserver端口
1 | netperf -H 192.168.2.11 -p 12001 -t TCP_STREAM -l 300 -- -m 1440 & |
对于需要测试收/发包带宽的,最好启动多个进程发包。(或者多机部署)
如果有多个节点测试被测试机,可以被测试机上利用sar命令来统计 ,sar -n DEV 1 60
安装方式为 yum -y install sysstat
iperf3
安装方式
源码安装
1 | yum -y install unzip gcc gcc-c++ |
rpm安装
例如,对于centos7系统
1 | wget --inet4-only http://mirror.centos.org/centos/7/os/x86_64/Packages/iperf3-3.1.7-2.el7.x86_64.rpm |
常用参数
工具名称 | 工具说明 | 主要参数 | 参数说明 |
iperf3 | 收发一体 | -s | 表示作为server端接收包 |
-i | 间隔多久输出信息流量信息,默认单位为秒 | ||
-p | 指定服务的监听端口 | ||
-u | 表示采用UDP协议发送报文,不带该参数表示采用TCP协议 | ||
-i | 表示包大小,默认单位为 Byte。通常测试 PPS 的时候该值为16,测试BPS时该值为1400 | ||
-b | 设定流量带宽,可选单位包括:k/m/g | ||
-t | 流量的持续时间,默认单位为秒 | ||
-A | CPU亲和性,可以将具体的iperf3进程绑定对应编号的逻辑CPU,避免iperf进程在不同的CPU间调度 |
使用场景
UDP PPS测试
在辅助机执行以下命令,以启动server进程
1 | iperf3 -s -p 12001 & |
在测试机上中执行如下命令,启动client进程
1 | iperf3 -c 192.168.2.11 -p 12001 -u -b 100M -t 300 -l 16 -A 0 & |
或者
1 | iperf3 -s -p 12001 -A 0 -i 60 & -> server端绑定多个核,测试收包性能 |
1 | iperf3 -c 192.168.2.10 -p 12001 -u -b 100M -t 300 -l 16 -A 0 & |
qperf
qperf 可以用来测试两个节点之间的带宽(bandwidth)和延迟(latency),不仅仅可以用来测试 TCP/IP 协议的性能指标,还可以用来测试 RDMA 传输的指标。使用方法是:一个节点运行 qperf 作为服务端,另一个节点则运行 qperf 作为客户端,与服务端建立连接之后打流,获取带宽和延迟等数据。
安装方式
YUM安装
例如,对于centos7系统
1 | yum install qperf |
使用场景
服务端
典型的用法不带任何参数,直接运行 qperf
命令即启动服务端进程,等待客户端的连接,默认监听端口为 19765。如果想指定监听端口可以增加参数 --listen_port xxx
,此时要保证客户端也要指定该端口号建立连接。
客户端
1 | qperf SERVERNODE [OPTIONS] TESTS |
其中,
SERVERNODE
为服务端的地址TESTS
为需要测试的指标,使用帮助命令qperf --help tests
可以查看到 qperf 支持的所有测量指标,可以一条命令中带多个测试项,这里介绍常用的有:tcp_bw
—— TCP流带宽tcp_lat
—— TCP流延迟udp_bw
—— UDP流带宽udp_lat
—— UDP流延迟conf
—— 显示两端主机配置
OPTIONS
是可选字段,使用帮助命令qperf --help options
可以查看所有支持的可选参数,这里介绍常用的参数:--time/-t
—— 测试持续的时间,默认为 2s--msg_size/-m
—— 设置报文的大小,默认测带宽是为 64KB,测延迟是为 1B--listen_port/-lp
—— 设置与服务端建立连接的端口号,默认为 19765--verbose/-v
—— 提供更多输出的信息,可以更多尝试一下-vc
、-vs
、-vt
、-vu
等等
例如:
1 | qperf 192.168.0.8 -t 10 -vvu tcp_lat udp_lat conf |
进阶使用方法
qperf 有个比较酷的功能可以循环 loop 遍历测试,这对于摸底网络性能找到最优参数非常有帮助,利用的是其中一个 OPTIONS 参数,使用说明可以参数帮助文档:
–loop Var:Init:Last:Incr (-oo) Run a test multiple times sequencing through a series of values. Var is the loop variable; Init is the initial value; Last is the value it must not exceed and Incr is the increment. It is useful to set the –verbose_used (-vu) option in conjunction with this option.
通常可以调优的 Var
设为 msg_size
,看下下面的命令输出结果就一目了然了:
1 | qperf 192.168.0.8 -oo msg_size:1:64K:*2 -vu tcp_bw tcp_lat |