本文主要以ECS实例使用Netperf和sockperf工具测试网络性能的方法为例,为您介绍如何测试ECS实例的网络PPS、网络带宽和网络时延。
前提条件
- 已创建符合测试场景规格要求的ECS实例。具体操作,请参见使用向导创建实例。
- 在同一测试场景下,所有ECS实例必须所属同一个VPC、同一台交换机和同一个安全组。
准备环境
重要
- 强烈建议您在新购买的无数据的ECS实例上使用工具测试网络性能,避免造成数据丢失。
- 实例规格指标均在测试数据环境下验证获得。在真实场景中,受实例负载、组网模型等其他因素的影响,实例的性能表现可能存在差异,请您以实际情况为准。
做网络性能测试(网络PPS、网络带宽和网络时延)的ECS实例作为本次的测试机和辅助测试机。测试机可作为Netperf或sockperf工具测试中的Client端或Server端。辅助测试机也可作为Netperf或sockperf工具测试中的Client端或Server端,与测试机之间建立控制连接,传递测试配置相关的信息。
不同测试场景下,实例的示例规格及推荐数量如下表所示。
说明 测试ECS实例的网络带宽和网络时延对网络PPS大小没有要求,可任意选择实例规格进行测试。
测试网络PPS(小于600万)
- 分别远程连接测试机和辅助测试机。
- 分别在测试机和辅助测试机上执行以下命令,下载Netperf。
wget https://benchmark-packages.oss-cn-qingdao.aliyuncs.com/netperf-2.7.0.tar.gz
- 分别在测试机和辅助测试机上执行以下命令,安装Netperf和sar监控工具。
- 执行以下命令,解压Netperf包。
yum install -y gcc autoconf automake libtool sysstat
tar -zxvf netperf-2.7.0.tar.gz
- 执行以下命令,查询gcc版本号。
- 可选:如果测试机和辅助测试机的gcc版本高于10,需先执行以下命令,打开并手动删除nettest_omni.c文件中的声明变量内容。
cd netperf
vim src/nettest_omni.c
手动删除
nettest_omni.c文件中如下声明变量内容。
/* different options for the sockets */
int
loc_nodelay, /* don't/do use NODELAY locally */
rem_nodelay, /* don't/do use NODELAY remotely */
loc_sndavoid, /* avoid send copies locally */
loc_rcvavoid, /* avoid recv copies locally */
rem_sndavoid, /* avoid send copies remotely */
rem_rcvavoid; /* avoid recv_copies remotely */
修改完成后按
Esc键,并输入
:wq
后按下回车键,保存并退出。
- 执行以下命令,安装Netperf和sar监控工具。
cd netperf
./configure
make && make install
- 在测试机上执行以下命令,启动64个netserver服务。
#!/bin/bash
for j in `seq 64`; do
netserver -p $[16000+j] > server_$[16000+j].netperf > /dev/null 2>&1 &
done
- 在测试机上执行以下命令,查询测试机的私网IP地址。
ifconfig || ip addr

- 在辅助测试机上执行以下命令,向测试机输入流量。
#!/bin/bash
server_ip=<测试机私网IP地址>
for j in `seq 64`; do
port=$[16000+j]
netperf -H ${server_ip} -l ${run_time:-300} -t TCP_STREAM -p $port -- -D > /dev/null 2>&1 &
done
<测试机私网IP地址>
需替换为上一步查询的实际测试机的私网IP地址,示例如下图所示。

- 在测试机上执行以下命令,测试网络流量。
sar -n DEV 1
在测试结果中查看
rxpck/s
列的数据值,
rxpck/s
表示该测试机每秒钟接收的数据包总数。如下图所示,示例中测试机每秒钟接收到的数据包数约为90万。

测试网络PPS(大于600万小于2000万)
- 分别远程连接测试机和辅助测试机。
- 分别在3台辅助测试机和1台测试机上执行以下命令,安装sockperf。
yum install -y sockperf
如果
yum
不能安装,则执行以下命令,使用编译安装。
yum install -y autoconf automake libtool g++ gcc-c++
cd /opt
wget https://github.com/Mellanox/sockperf/archive/refs/tags/3.8.tar.gz
tar -zxf 3.8.tar.gz
cd sockperf-3.8/
./autogen.sh
./configure
make -j `cat /proc/cpuinfo| grep process | wc -l`
make install
- 分别在3台辅助测试机上执行以下命令,向测试机输入流量。
server_ip="<测试机私网IP地址>"
threads=64
msg_size=14
run_time=60
basePort=6666
for((i=0;i<$threads;++i));do
nohup sockperf tp -i $server_ip --client_port $[${basePort}+${i}] --pps max -m ${msg_size} -t ${run_time} --port $[${basePort}+${i}] 2>&1 &
done
其中
<测试机私网IP地址>
是实际测试机的私网IP地址,
run_time
是输入流量的时间,请您根据实际情况修改。
- 分别在3台辅助测试机和1台测试机上执行以下命令,测试网络流量。
sar -n DEV 1
在测试机上查看
rxpck/s
列的数据值,
rxpck/s
表示该测试机每秒钟接收到的数据包。如下图所示,示例中测试机每秒钟接收到的数据包数约为1200万。

测试网络PPS(大于2000万)
- 分别远程连接测试机和辅助测试机。
- 分别在3台辅助测试机和1台测试机上执行以下命令,安装sockperf。
yum install -y sockperf
如果
yum
不能安装,则执行以下命令,使用编译安装。
yum install -y autoconf automake libtool g++ gcc-c++
cd /opt
wget https://github.com/Mellanox/sockperf/archive/refs/tags/3.8.tar.gz
tar -zxf 3.8.tar.gz
cd sockperf-3.8/
./autogen.sh
./configure
make -j `cat /proc/cpuinfo| grep process | wc -l`
make install
- 在测试机上执行以下命令,绑定中断。
a=$(cat /proc/interrupts | grep virtio2-input | awk -F ':' '{print $1}')
cpu=0
for irq in $a; do
echo $cpu >/proc/irq/$irq/smp_affinity_list
let cpu+=2
done
- 分别在3台辅助测试机上执行以下命令,向测试机输入流量。
server_ip="<测试机私网IP地址>"
threads=64
msg_size=14
run_time=60
basePort=6666
for((i=0;i<$threads;++i));do
nohup sockperf tp -i $server_ip --client_port $[${basePort}+${i}] --pps max -m ${msg_size} -t ${run_time} --port $[${basePort}+${i}] 2>&1 &
done
其中
<测试机私网IP地址>
是实际测试机的私网IP地址,
run_time
是输入流量的时间,请您根据实际情况修改。
- 分别在3台辅助测试机和1台测试机上执行以下命令,测试网络流量。
sar -n DEV 1
在测试机上查看
rxpck/s
列的数据值,
rxpck/s
表示该测试机每秒钟接收到的数据包。如下图所示,示例中测试机每秒钟接收到的数据包数约为2000万。

测试网络带宽
- 分别远程连接测试机和辅助测试机。
- 分别在测试机和辅助测试机上执行以下命令,下载Netperf。
wget https://benchmark-packages.oss-cn-qingdao.aliyuncs.com/netperf-2.7.0.tar.gz
- 分别在测试机和辅助测试机上执行以下命令,安装Netperf和sar监控工具。
yum install -y gcc autoconf automake libtool sysstat
tar -zxvf netperf-2.7.0.tar.gz
cd netperf
./configure
make && make install
- 在测试机上执行以下命令,启动64个netserver服务。
#!/bin/bash
for j in `seq 64`; do
netserver -p $[16000+j] > server_$[16000+j].netperf > /dev/null 2>&1 &
done
- 在测试机上执行以下命令,查询测试机的私网IP地址。
ifconfig || ip addr

- 在辅助测试机上执行以下命令,向测试机输入流量。
#!/bin/bash
server_ip=<测试机私网IP地址>
for j in `seq 64`; do
port=$[16000+j]
netperf -H ${server_ip} -l ${run_time:-300} -t TCP_STREAM -p $port -- -D > /dev/null 2>&1 &
done
<测试机私网IP地址>
需替换为上一步查询的实际测试机的私网IP地址,示例如下图所示。

- 在测试机上执行以下命令,测试网络带宽。
sar -n DEV 1
在测试结果中查看
rxkB/s
列的数据值,
rxkB/s
表示该测试机每秒钟接收的字节数。所以转换为带宽(kbps)=字节数(rxkB/s)*8,示例如下图所示。

测试网络时延
- 分别远程连接测试机和辅助测试机。
- 分别在测试机和辅助测试机上执行以下命令,安装sockperf。
yum install -y sockperf
如果
yum
不能安装,则执行以下命令,使用编译安装。
yum install -y autoconf automake libtool gcc-c++cd /opt
wget https://github.com/Mellanox/sockperf/archive/refs/tags/3.8.tar.gz
tar -zxf 3.8.tar.gz
cd sockperf-3.8/
./autogen.sh
./configure
make -j `cat /proc/cpuinfo| grep process | wc -l`
make install
- 在测试机上执行以下命令,启动服务。
sockperf sr --tcp --daemonize
- 在测试机上执行以下命令,查询测试机的私网IP地址。
ifconfig || ip addr

- 在辅助测试机上执行以下命令,向测试机输入流量。
sockperf pp -i <测试机私网IP地址> --tcp -t 30 -m 14 --full-log=result.json
<测试机私网IP地址>
需替换为上一步查询的实际测试机的私网IP地址。
查看结果数据,示例如下图所示。
- 以
avg-latency
开头的结果数据表示平均时延,单位为us。
- 以
percentile 99.000
开头的结果数据表示99分位时延,单位为us。
