Netperf是一种网络性能的测量工具,主要针对基于TCP或UDP的传输。Netperf根据应用的不同,可以进行不同模式的网络性能测试,即批量数据传输(bulk data transfer)模式和请求/应答(request/reponse)模式。Netperf测试结果所反映的是一个系统能够以多快的速度向另外一个系统发送数据,以及另外一个系统能够以多快的速度接收数据。
Netperf工具以client/server方式工作。server端是netserver,用来侦听来自client端的连接,client端是netperf,用来向server发起网络测试。在client与server之间,首先建立一个控制连接,传递有关测试配置的信息,以及测试的结果;在控制连接建立并传递了测试配置信息以后,client与server之间会再建立一个测试连接,用来来回传递着特殊的流量模式,以测试网络的性能。
[root@s142 ~]# yum install -y gcc*
[root@s142 software]# wget https://github.com/HewlettPackard/netperf/archive/refs/tags/netperf-2.7.0.zip
[root@s142 software]# unzip netperf-2.7.0.zip
[root@s142 software]# cd netperf-netperf-2.7.0/
[root@s142 netperf-netperf-2.7.0]# ./configure
[root@s142 netperf-netperf-2.7.0]# make
make all-recursive
…
make[2]: Leaving directory `/opt/software/netperf-netperf-2.7.0’
make[1]: Leaving directory `/opt/software/netperf-netperf-2.7.0’
[root@s142 netperf-netperf-2.7.0]# make install
[root@s142 netperf-netperf-2.7.0]# netserver -V
Netperf version 2.7.0
[root@s142 netperf-netperf-2.7.0]# netperf -V
Netperf version 2.7.0
实际上如果不执行编译安装命令,也可以在src目录下找到命令,并直接执行命令。当然我们执行了编译安装就不需要切换到编译目录下执行命令了,可以在任意目录下执行这两个命令。
[root@s142 src]# ./netserver --help
./netserver: invalid option – ‘-’
Usage: netserver [options]
Options:
-h Display this text
-D Do not daemonize
-d Increase debugging output
-f Do not spawn chilren for each test, run serially
-L name,family Use name to pick listen address and family for family
-N No debugging output, even if netperf asks
-p portnum Listen for connect requests on portnum.
-4 Do IPv4
-6 Do IPv6
-v verbosity Specify the verbosity level
-V Display version information and exit
-Z passphrase Expect passphrase as the first thing received
netperf工具工作模式为server/client模式,所以我们需要两台测试服务器,都安装netperf工具,然后一端模式服务端,一端模拟客户端。
[root@s152 netperf-netperf-2.7.0]# netserver -p 8888
Starting netserver with host ‘IN(6)ADDR_ANY’ port ‘8888’ and family AF_UNSPEC
[root@s152 netperf-netperf-2.7.0]# netstat -tnpl |grep 8888
tcp6 0 0 :::8888 :: LISTEN 9043/netserver
[root@s142 netperf-netperf-2.7.0]# netperf -H 192.168.0.152 -p 8888
[root@s152 netperf-netperf-2.7.0]# netserver -p 8888
[root@s142 netperf-netperf-2.7.0]# netperf -t UDP_STREAM -H 192.168.0.152 -p 8888 – -m 1024 -M 1024 -s 16384 -S 16384
[root@s142 netperf-netperf-2.7.0]# netperf -t TCP_RR -H 192.168.0.152 -p 8888
[root@s142 netperf-netperf-2.7.0]# netperf -t TCP_RR -H 192.168.0.152 -p 8888 – -r 500,500
[root@s142 netperf-netperf-2.7.0]# netperf -t TCP_CRR -H 192.168.0.152 -p 8888
[root@s142 netperf-netperf-2.7.0]# netperf -t TCP_CRR -H 192.168.0.152 -p 8888 – -r 500,500
参数 | 参数说明 |
---|---|
-h | 获取命令帮助 |
-V | 查看命令版本 |
-p | 指定监听端口 |
-4 | 指定IPv4协议 |
-6 | 指定IPv6协议 |
-D | 不在后台运行,默认后台运行 |
-d | 增加debug输出 |
-L | 使用主机名监听 |
-N | 不输出debug信息 |
netperf命令格式为:netperf [global options] – [test specific options]
如下列表中的-m,-r这些参数都是测试专有参数,需要写在–后。
参数 | 参数说明 |
---|---|
-t testname | 指定进行的测试类型(TCP_STREAM,UDP_STREAM,TCP_RR,TCP_CRR,UDP_RR),可以通过man netperf命令查看有哪些类型 |
-H ip | 指定远端运行netserver的server IP地址 |
-p port | 指定远端运行netserver的port端口 |
-L testlen | 指定测试时间,默认10s,单位秒 |
-V | 查看命令版本 |
-h | 获取命令帮助 |
-s size | 设置本地系统的socket发送与接收缓冲大小 |
-S size | 设置远端系统的socket发送与接收缓冲大小 |
-m size | 设置本地系统发送测试分组的大小 |
-M size | 设置远端系统接收测试分组的大小 |
-r req,resp | 设置request和reponse分组的大小 |
-D | 对本地与远端系统的socket设置TCP_NODELAY选项 |