网络性能测试方式

测试设备物理性能的工具比较多,比较常用的有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
2
3
4
5
6
7
yum -y install unzip gcc gcc-c++
wget --no-check-certificate https://github.com/HewlettPackard/netperf/archive/refs/tags/netperf-2.7.0.zip

unzip netperf-2.7.0.zip

cd netperf-netperf-2.7.0/
./configure && make && make install

rpm安装

例如,对于centos7系统

1
2
3
wget http://repo.iotti.biz/CentOS/7/x86_64/netperf-2.7.0-1.el7.lux.x86_64.rpm

rpm -i netperf-2.7.0-1.el7.lux.x86_64.rpm

常用参数

工具名称工具说明主要参数参数说明
netserver接收端工具(Server 端)-p监听的端口号
-D不在后台运行
-Tnetserver/netperf绑定到cpu or lcpu
-4IPv4协议栈
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 &

对于需要测试收/发包带宽的,最好启动多个进程发包。(或者多机部署)

netperf-result

如果有多个节点测试被测试机,可以被测试机上利用sar命令来统计 ,sar -n DEV 1 60

安装方式为 yum -y install sysstat

iperf3

安装方式

源码安装

1
2
3
4
5
6
7
yum -y install unzip gcc gcc-c++
wget --no-check-certificate https://codeload.github.com/esnet/iperf/zip/master -O iperf3.zip

unzip iperf3.zip
cd iperf-master/

./configure && make && make install

rpm安装

例如,对于centos7系统

1
2
3
wget --inet4-only  http://mirror.centos.org/centos/7/os/x86_64/Packages/iperf3-3.1.7-2.el7.x86_64.rpm

rpm -i 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流量的持续时间,默认单位为秒
-ACPU亲和性,可以将具体的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 &

iperf3-result

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

其中,

  1. SERVERNODE 为服务端的地址
  2. TESTS 为需要测试的指标,使用帮助命令 qperf --help tests 可以查看到 qperf 支持的所有测量指标,可以一条命令中带多个测试项,这里介绍常用的有:
    • tcp_bw —— TCP流带宽
    • tcp_lat —— TCP流延迟
    • udp_bw —— UDP流带宽
    • udp_lat —— UDP流延迟
    • conf —— 显示两端主机配置
  3. OPTIONS 是可选字段,使用帮助命令 qperf --help options 可以查看所有支持的可选参数,这里介绍常用的参数:
    • --time/-t —— 测试持续的时间,默认为 2s
    • --msg_size/-m —— 设置报文的大小,默认测带宽是为 64KB,测延迟是为 1B
    • --listen_port/-lp —— 设置与服务端建立连接的端口号,默认为 19765
    • --verbose/-v —— 提供更多输出的信息,可以更多尝试一下 -vc-vs-vt-vu 等等

例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# qperf 192.168.0.8 -t 10 -vvu tcp_lat udp_lat conf
tcp_lat:
latency = 57.2 us
msg_size = 1 bytes
time = 10 sec
timeout = 5 sec
udp_lat:
latency = 10 sec
msg_size = 1 bytes
time = 10 sec
timeout = 5 sec
conf:
loc_node = performance-north-south-000-0003
loc_cpu = 8 Cores: Intel Xeon Gold 6161 @ 2.20GHz
loc_os = Linux 3.10.0-514.10.2.el7.x86_64
loc_qperf = 0.4.9
rem_node = performance-north-south-000-0001.novalocal
rem_cpu = 8 Cores: Intel Xeon Gold 6161 @ 2.20GHz
rem_os = Linux 3.10.0-514.10.2.el7.x86_64
rem_qperf = 0.4.9

进阶使用方法

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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# qperf 192.168.0.8 -oo msg_size:1:64K:*2 -vu tcp_bw tcp_lat
tcp_bw:
bw = 2.17 MB/sec
msg_size = 1 bytes
tcp_bw:
bw = 4.13 MB/sec
msg_size = 2 bytes
tcp_bw:
bw = 7.82 MB/sec
msg_size = 4 bytes
tcp_bw:
bw = 14.3 MB/sec
msg_size = 8 bytes
tcp_bw:
bw = 25.8 MB/sec
msg_size = 16 bytes
tcp_bw:
bw = 42.4 MB/sec
msg_size = 32 bytes
tcp_bw:
bw = 63.4 MB/sec
msg_size = 64 bytes
tcp_bw:
bw = 83.3 MB/sec
msg_size = 128 bytes
tcp_bw:
bw = 388 MB/sec
msg_size = 256 bytes
tcp_bw:
bw = 816 MB/sec
msg_size = 512 bytes
tcp_bw:
bw = 941 MB/sec
msg_size = 1 KiB (1,024)
tcp_bw:
bw = 967 MB/sec
msg_size = 2 KiB (2,048)
tcp_bw:
bw = 980 MB/sec
msg_size = 4 KiB (4,096)
tcp_bw:
bw = 1.01 GB/sec
msg_size = 8 KiB (8,192)
tcp_bw:
bw = 950 MB/sec
msg_size = 16 KiB (16,384)
tcp_bw:
bw = 1.01 GB/sec
msg_size = 32 KiB (32,768)
tcp_bw:
bw = 986 MB/sec
msg_size = 64 KiB (65,536)
tcp_lat:
latency = 61.5 us
msg_size = 1 bytes
tcp_lat:
latency = 58.2 us
msg_size = 2 bytes
tcp_lat:
latency = 57.5 us
msg_size = 4 bytes
tcp_lat:
latency = 57.6 us
msg_size = 8 bytes
tcp_lat:
latency = 57.9 us
msg_size = 16 bytes
tcp_lat:
latency = 61.7 us
msg_size = 32 bytes
tcp_lat:
latency = 58.6 us
msg_size = 64 bytes
tcp_lat:
latency = 58.3 us
msg_size = 128 bytes
tcp_lat:
latency = 58.8 us
msg_size = 256 bytes
tcp_lat:
latency = 60 us
msg_size = 512 bytes
tcp_lat:
latency = 61.8 us
msg_size = 1 KiB (1,024)
tcp_lat:
latency = 72.8 us
msg_size = 2 KiB (2,048)
tcp_lat:
latency = 75.6 us
msg_size = 4 KiB (4,096)
tcp_lat:
latency = 103 us
msg_size = 8 KiB (8,192)
tcp_lat:
latency = 132 us
msg_size = 16 KiB (16,384)
tcp_lat:
latency = 163 us
msg_size = 32 KiB (32,768)
tcp_lat:
latency = 313 us
msg_size = 64 KiB (65,536)

参考

网络性能测试方法

网络性能测试方法

网络性能测试工具 qperf 简介