一、qperf简介
概念:
Qperf是一种网络性能测试工具,它可以用于测试TCP和UDP网络吞吐量、延迟等性能指标,可以测试网络中的服务器或客户端性能,支持多种协议和多种数据传输方式。它可以通过命令行或脚本方式使用。
功能:
1.支持TCP、UDP、RDMA协议的测试。
2.支持多种数据传输方式的测试,如点对点、多点对点、一对多等。
3.支持测试吞吐量,延迟等性能指标。
4.支持同时测试多个客户端或服务器。
优点:
1.支持多种协议和多种数据传输方式。
2.可以通过命令行或脚本方式使用。
3.可以同时测试多个客户端或服务器。
4.测试结果准确可靠。
缺点:
1.安装和配置相对复杂。
2.测试结果需要分析和解释。
3.对于初学者来说,可能需要一定的学习成本。
应用场景:
1.测试网络带宽和延迟等性能指标。
2.测试服务器或客户端性能。
3.对于网络工程师和管理员来说,可以使用qperf对网络性能进行调优。
4.对于网络设备厂商来说,可以使用qperf来测试产品性能,进行性能优化。
二、qperf安装、使用
以CentOS为例,以下是使用yum进行qperf安装和使用的步骤:
1. 安装qperf:
sudo yum install qperf
2. 建立两个测试节点,一个是客户端,一个是服务器端。
例如,通过在两台机器上分别运行以下命令进行设置:
在服务器端运行:
sudo qperf
在客户端运行:
sudo qperf [服务器地址]
其中,[服务器地址]是服务器端的IP地址或主机名。
3. 执行测试
在客户端运行qperf命令之后,系统会自动开始测试。
测试结束后,qperf将会输出客户端与服务器端之间TCP和UDP的吞吐量、延迟等性能指标。
例如:
tcp_bw:
bandwidth = 9.91 GByte/sec
udp_bw:
bandwidth = 1.05 GByte/sec
tcp_lat:
latency = 4.95 usec
udp_lat:
latency = 12.4 usec
在这个例子中,qperf测试结果表明TCP的带宽是9.91 GB/s,UDP的带宽是1.05 GB/s,TCP的延迟是4.95微秒,UDP的延迟是12.4微秒。
需要注意的是,在进行此类测试时,请确保网络连接和测试环境没有其他应用程序或进程正在运行,以避免测试结果受到其它因素影响。
[root@localhost home]# qperf 192.168.6.211 -t 10 -vvu tcp_lat udp_lat conf
tcp_lat:
latency = 4.77 us
msg_size = 1 bytes
time = 10 sec
timeout = 5 sec
udp_lat:
latency = 4.07 us
msg_size = 1 bytes
time = 10 sec
timeout = 5 sec
conf:
loc_node = localhost.localdomain
loc_cpu = 11th Gen Intel Core i5-1135G7 @ 2.40GHz
loc_os = Linux 3.10.0-1160.71.1.el7.x86_64
loc_qperf = 0.4.9
rem_node = localhost.localdomain
rem_cpu = 11th Gen Intel Core i5-1135G7 @ 2.40GHz
rem_os = Linux 3.10.0-1160.71.1.el7.x86_64
rem_qperf = 0.4.9
[root@localhost home]#
[root@localhost home]# qperf 192.168.6.211
must specify a test type; try: qperf --help
[root@localhost home]#
[root@localhost home]# qperf 192.168.6.211 -t 10
must specify a test type; try: qperf --help
[root@localhost home]# qperf 192.168.6.211 tcp_lat
tcp_lat:
latency = 4.74 us
[root@localhost home]#
[root@localhost home]# qperf 192.168.6.211 tcp_lat udp_lat tcp_bw udp_bw
tcp_lat:
latency = 4.77 us
udp_lat:
latency = 4.04 us
tcp_bw:
bw = 7.98 GB/sec
udp_bw:
send_bw = 17.1 GB/sec
recv_bw = 11.2 MB/sec
[root@localhost home]#
[root@localhost home]# qperf 192.168.6.211 tcp_lat udp_lat tcp_bw udp_bw conf
tcp_lat:
latency = 4.84 us
udp_lat:
latency = 4.06 us
tcp_bw:
bw = 8.06 GB/sec
udp_bw:
send_bw = 17.7 GB/sec
recv_bw = 11.1 MB/sec
conf:
loc_node = localhost.localdomain
loc_cpu = 11th Gen Intel Core i5-1135G7 @ 2.40GHz
loc_os = Linux 3.10.0-1160.71.1.el7.x86_64
loc_qperf = 0.4.9
rem_node = localhost.localdomain
rem_cpu = 11th Gen Intel Core i5-1135G7 @ 2.40GHz
rem_os = Linux 3.10.0-1160.71.1.el7.x86_64
rem_qperf = 0.4.9
[root@localhost home]#
qperf输出结果及解释:
[root@localhost ~]# qperf 192.168.2.140 -lca 5 -rca 5 -t 10 -vvu tcp_lat udp_lat tcp_bw udp_bw conf
tcp_lat:
latency = 1.61 us
affinity = 5
msg_size = 1 bytes
time = 10 sec
timeout = 5 sec
udp_lat:
latency = 1.42 us
affinity = 5
msg_size = 1 bytes
time = 10 sec
timeout = 5 sec
tcp_bw:
bw = 13.3 GB/sec
affinity = 5
msg_size = 64 KiB (65,536)
time = 10 sec
timeout = 5 sec
udp_bw:
send_bw = 10.6 GB/sec
recv_bw = 10.6 GB/sec
affinity = 5
msg_size = 32 KiB (32,768)
time = 10 sec
timeout = 5 sec
conf:
loc_node = localhost.localdomain
loc_cpu = 12 Cores: Mixed CPUs
loc_os = Linux 3.10.0-1160.el7.x86_64
loc_qperf = 0.4.9
rem_node = localhost.localdomain
rem_cpu = 12 Cores: Mixed CPUs
rem_os = Linux 3.10.0-1160.el7.x86_64
rem_qperf = 0.4.9
#qperf 192.168.2.140 -lca 5 -rca 5 -t 10 -vvu tcp_lat udp_lat tcp_bw udp_bw conf
qperf
是QLogic
(千兆逻辑公司)开发的网络性能测试工具。192.168.2.140
是远程测试节点的IP地址。-lca 5
和-rca 5
分别表示本地和远程CPU亲和性,将测试程序绑定到第5个CPU核心上。-t 10
表示测试时间为10秒。-vvu
表示开启详细输出,包括每个测试项的详细性能数据。tcp_lat
和udp_lat
分别表示TCP和UDP的单向延迟测试。tcp_bw
和udp_bw
分别表示TCP和UDP的双向吞吐量测试。conf
表示输出测试节点的配置信息。输出结果显示了针对远程节点的四个不同性能测试的结果,以及测试节点的配置信息:
tcp_lat
:TCP的单向延迟测试结果,latency为1.61us,msg_size为1字节,表示测试发送和接收1字节的数据所需的平均时间。udp_lat
:UDP的单向延迟测试结果,latency为1.42us,msg_size为1字节,表示测试发送和接收1字节的数据所需的平均时间。tcp_bw
:TCP的双向吞吐量测试结果,bw为13.3GB/sec,msg_size为64KB,表示测试在10秒内双向传输64KB数据时的平均带宽。udp_bw
:UDP的双向吞吐量测试结果,send_bw和recv_bw均为10.6GB/sec,msg_size为32KB,表示测试在10秒内发送和接收32KB数据时的平均带宽。conf
:测试节点的一些配置信息,包括本地节点和远程节点的名称、CPU类型、操作系统、qperf版本等。
三、qperf常用参数说明
以下是qperf常用参数说明:
-t
测试时间,单位为秒,默认值为10秒。-l
数据长度,单位为字节,默认值为64字节。-p
测试端口,默认值为端口号为19765。-i
测试的间隔时间,默认值为1s。-u
使用UDP协议进行测试。-v
输出详细的测试结果。可以多次使用增加详细度。-s
指定服务器地址。-ca
指定客户端的CPU亲和性(即将进程绑定到某个CPU核心上)。-rca
指定远程服务器的CPU亲和性。-lca
指定本地服务器的CPU亲和性。-fb
指定反向测试的数据流。-u
指定使用UDP协议进行测试。-ua
指定UDP测试的数据包大小,默认为1470字节。
这些参数可以通过在命令行中添加对应的参数来使用。例如,以下命令将使用UDP协议进行1秒钟的测试,并输出详细的测试结果:
qperf 192.168.1.100 -u -t 1 -v
注意,在使用qperf之前请确保安装了qperf工具,并且正确设置了网络环境和防火墙规则,以避免测试过程中出现不必要的问题。
四、报错及说明
报错:
[root@localhost home]# qperf 192.168.6.211
must specify a test type; try: qperf --help
这个错误提示表明你需要在命令行中指定测试类型。可以通过以下方式指定:
- 测试TCP带宽:
qperf 192.168.6.211 tcp_bw
- 测试UDP带宽:
qperf 192.168.6.211 udp_bw
- 测试TCP延迟:
qperf 192.168.6.211 tcp_lat
- 测试UDP延迟:
qperf 192.168.6.211 udp_lat
在指定了测试类型后,qperf将会在客户端和服务器之间执行相应的测试,并输出测试结果。
报错:
[root@localhost ~]# qperf 192.168.2.140 -lca 5 -rca 5 -t 10 -vvu tcp_lat udp_lat conf
tcp_lat:
192.168.2.140: failed to connect
这个错误提示表明qperf客户端无法连接到服务器端进行测试。请检查以下可能的问题:
- 请确认服务器地址192.168.2.140是否正确,并且可以从当前的客户端访问到;
- 请确认服务器端是否已经启动了qperf,可以通过在服务器端执行命令
qperf
来检查; - 请确保网络连接正确,例如防火墙设置或者路由器配置等。
关闭防火墙:
[root@localhost ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2023-07-13 22:52:49 EDT; 1 weeks 0 days ago
Docs: man:firewalld(1)
Main PID: 943 (firewalld)
Tasks: 2
CGroup: /system.slice/firewalld.service
└─943 /usr/bin/python2 -Es /usr/sbin/firewalld --nofork --nopidJul 13 22:52:49 localhost.localdomain systemd[1]: Starting firewalld - dynamic firewall daemon...
Jul 13 22:52:49 localhost.localdomain systemd[1]: Started firewalld - dynamic firewall daemon.
Jul 13 22:52:49 localhost.localdomain firewalld[943]: WARNING: AllowZoneDrifting is enabled. This is considered an insecure confi...t now.
Hint: Some lines were ellipsized, use -l to show in full.
[root@localhost ~]# systemctl stop firewalld
如果以上问题都没有解决报错问题,可以尝试更换其他客户端机器进行测试,或者在服务器端执行命令netstat -an | grep LISTEN
检查是否监听了相关端口。