网络性能测试工具qperf简介、安装、使用

一、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

  • qperfQLogic(千兆逻辑公司)开发的网络性能测试工具。
  • 192.168.2.140是远程测试节点的IP地址。
  • -lca 5-rca 5分别表示本地和远程CPU亲和性,将测试程序绑定到第5个CPU核心上。
  • -t 10表示测试时间为10秒。
  • -vvu表示开启详细输出,包括每个测试项的详细性能数据。
  • tcp_latudp_lat分别表示TCP和UDP的单向延迟测试。
  • tcp_bwudp_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客户端无法连接到服务器端进行测试。请检查以下可能的问题:

  1. 请确认服务器地址192.168.2.140是否正确,并且可以从当前的客户端访问到;
  2. 请确认服务器端是否已经启动了qperf,可以通过在服务器端执行命令qperf来检查;
  3. 请确保网络连接正确,例如防火墙设置或者路由器配置等。

关闭防火墙:

[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 --nopid

Jul 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检查是否监听了相关端口。


 

猜你喜欢

转载自blog.csdn.net/songpeiying/article/details/131850699