网络PPS(每秒传输数据包数)、网络带宽(数据传输速度)和网络时延(数据从发送端发出到接收端接收到所需的时间)是衡量云服务器网络性能的重要指标,测试网络性能可以帮助您评估网络的稳定性、延迟和吞吐量,从而为您提供更好的用户体验和应用程序性能。本文为您介绍如何使用Netperf、sockperf等工具测试ECS实例的网络PPS、网络带宽和网络时延,您可以根据测试结果评估ECS实例的网络性能。
-
强烈建议您在新购买的无数据的ECS实例上使用工具测试网络性能,避免造成数据丢失。
-
实例规格指标均在测试数据环境下验证获得。在真实场景中,受实例负载、组网模型等其他因素的影响,实例的性能表现可能存在差异,请您以实际情况为准。
准备测试环境
环境要求
-
准备测试网络PPS、带宽和时延等不同测试场景的ECS实例。创建实例的操作,请参见自定义购买实例。
重要在测试网络性能时,强烈建议您使用相同规格的实例来确保测试结果的准确性和可比性,避免不同实例规格的vCPU核数、内存大小、网络带宽等其他因素对测试结果产生影响。
-
在同一测试场景下,所有ECS实例必须属于同一个VPC、同一台交换机和同一个安全组。
环境示例
本文测试网络性能使用的测试机(ECS实例)和辅助测试机(ECS实例)的实例规格及数量如下所示。在实际测试过程中,请您根据实际环境选择两台机器进行测试。
-
测试ECS实例的网络PPS(仅适用于Linux)
说明由于目前Windows没有较好的网络PPS测试工具,所以暂不提供Windows的网络PPS测试方法。
网络PPS小于600万
测试示例
测试机
辅助测试机
实例规格
ecs.g7.large
ecs.g7.large
镜像
Alibaba Cloud Linux 3
Alibaba Cloud Linux 3
实例数量
1台
1台
网络
分配公网IP地址
网络PPS大于600万小于2000万
测试示例
测试机
辅助测试机
实例规格
ecs.g7.16xlarge
ecs.g7.16xlarge
镜像
Alibaba Cloud Linux 3
Alibaba Cloud Linux 3
实例数量
1台
3台
网络
分配公网IP地址
网络PPS大于2000万
测试示例
测试机
辅助测试机
实例规格
ecs.g7.32xlarge
ecs.g7.32xlarge
镜像
Alibaba Cloud Linux 3
Alibaba Cloud Linux 3
实例数量
1台
3台
网络
分配公网IP地址
-
测试ECS实例的网络带宽和网络时延
Linux实例
测试示例
测试机
辅助测试机
实例规格
ecs.g7.large
ecs.g7.large
镜像
Alibaba Cloud Linux 3
Alibaba Cloud Linux 3
实例数量
1台
1台
网络
分配公网IP地址
Windows实例
测试示例
测试机
辅助测试机
实例规格
ecs.g7.large
ecs.g7.large
镜像
Windows Server 2022
Windows Server 2022
实例数量
1台
1台
网络
分配公网IP地址
测试网络性能
测试网络PPS(仅适用于Linux)
由于目前Windows没有较好的PPS测试工具,所以暂不提供Windows的网络PPS测试方法。
网络PPS小于600万
-
分别远程连接测试机和辅助测试机。
具体操作,请参见使用Workbench登录Linux实例。
-
分别在测试机和辅助测试机上执行以下命令,下载Netperf。
wget https://benchmark-packages.oss-cn-qingdao.aliyuncs.com/netperf-2.7.0.tar.gz -
分别在测试机和辅助测试机上执行以下命令,安装Netperf和sar监控工具。
-
执行以下命令,解压Netperf包。
sudo yum install -y gcc autoconf automake libtool sysstat tar -zxvf netperf-2.7.0.tar.gz -
执行以下命令,查询
gcc版本号。gcc -v 2>&1 -
若测试机和辅助测试机安装的
gcc版本高于10版本,则您需要继续执行下述操作,以确保gcc可以正常编译。否则,请忽略此步骤。-
执行以下命令,修改
nettest_omni.c文件。cd netperf vim src/nettest_omni.c -
按i键进入编辑模式,手动删除
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 sudo ./configure sudo make && sudo 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 UDP_STREAM -p $port -- -m 1 -D > /dev/null 2>&1 & done<测试机私网IP地址>需替换为上一步查询的实际测试机的私网IP地址,示例如下图所示。
-
在测试机上执行以下命令,测试网络PPS。
sar -n DEV 1在测试结果中查看
rxpck/s列的数据值,rxpck/s表示该测试机每秒钟接收的数据包总数。如下图所示,示例中测试机每秒钟接收到的数据包平均数约为94万。
网络PPS大于600万小于2000万
-
分别远程连接测试机和辅助测试机。
具体操作,请参见使用Workbench登录Linux实例。
-
分别在3台辅助测试机和1台测试机上执行以下命令,安装sockperf。
sudo yum install -y autoconf automake libtool gcc-c++ cd /opt sudo wget https://github.com/Mellanox/sockperf/archive/refs/tags/3.8.tar.gz sudo tar -zxf 3.8.tar.gz cd sockperf-3.8/ sudo ./autogen.sh sudo ./configure sudo make -j `cat /proc/cpuinfo| grep process | wc -l` sudo make install -
在测试机上执行以下命令,查询测试机的私网IP地址。
ifconfig || ip addr
-
分别在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 --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万
-
分别远程连接测试机和辅助测试机。
具体操作,请参见使用Workbench登录Linux实例。
-
分别在3台辅助测试机和1台测试机上执行以下命令,安装sockperf。
sudo yum install -y autoconf automake libtool gcc-c++ cd /opt sudo wget https://github.com/Mellanox/sockperf/archive/refs/tags/3.8.tar.gz sudo tar -zxf 3.8.tar.gz cd sockperf-3.8/ sudo ./autogen.sh sudo ./configure sudo make -j `cat /proc/cpuinfo| grep process | wc -l` sudo make install -
在测试机上执行以下命令,绑定中断。
在高PPS场景下,通过将中断绑定到特定的CPU核心,可以确保处理中断的CPU核心相对固定,减少上下文切换,提高处理效率。
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 -
在测试机上执行以下命令,查询测试机的私网IP地址。
ifconfig || ip addr
-
分别在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 --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万。
测试网络带宽
Linux实例
-
分别远程连接测试机和辅助测试机。
具体操作,请参见使用Workbench登录Linux实例。
-
分别在测试机和辅助测试机上执行以下命令,下载Netperf。
wget https://benchmark-packages.oss-cn-qingdao.aliyuncs.com/netperf-2.7.0.tar.gz -
分别在测试机和辅助测试机上执行以下命令,安装Netperf和sar监控工具。
-
执行以下命令,解压Netperf包。
sudo yum install -y gcc autoconf automake libtool sysstat tar -zxvf netperf-2.7.0.tar.gz -
执行以下命令,查询
gcc版本号。gcc -v 2>&1 -
若测试机和辅助测试机安装的
gcc版本高于10版本,则您需要继续执行下述操作,以确保gcc可以正常编译。否则,请忽略此步骤。-
执行以下命令,修改
nettest_omni.c文件。cd netperf vim src/nettest_omni.c -
按i键进入编辑模式,手动删除
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 sudo ./configure sudo make && sudo make install
-
-
在测试机上执行以下命令,启动64个netserver服务。
#!/bin/bash for j in `seq 64`; do netserver -p $[16000+j] > server_$[16000+j].netperf 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表示该测试机每秒钟接收的数据包的大小,单位为KB/s(千字节/每秒)。1字节等于8比特,若要计算对应的带宽值,则可将rxkB/s列对应的数值乘以8,从而将其转换为Kbps(千比特/每秒)。
示例如下图所示。

Windows实例
-
分别远程连接测试机和辅助测试机。
具体操作,请参见使用Workbench登录Windows实例。
-
分别在测试机和辅助测试机中安装测试工具并关闭防火墙。
-
下载ntttcp.exe工具,并获取存放路径。
-
打开运行对话框,输入powershell进入PowerShell命令行。
-
运行以下命令,关闭防火墙,避免防火墙可能阻止两台机器的连接。
Set-NetFirewallProfile -Profile * -Enabled:false或者增加入方向规则以允许ntttcp.exe数据包通过防火墙。
$ntttcpPath = "<ntttcp.exe实际路径>" New-NetFirewallRule -DisplayName ntttcp -Protocol Any -Direction Inbound -Action Allow -Enabled True -Profile Any -Program $ntttcpPath说明您需要根据实际环境替换测试机的
<ntttcp.exe实际路径>。
-
-
在测试机中运行以下命令,设置网卡RSS功能。
RSS(Receive Side Scaling)网络技术旨在通过将数据包分布到多个CPU核心上的接收队列来提高网络性能和效率,从而实现网络处理的并行化。以下命令表示:
-
如果测试机的CPU数量不超过16,将RSS接收队列的数量设置为与CPU数量相等,这样可以确保每个CPU核心都有独立的接收队列来处理网络流量。
-
如果测试机的CPU数量超过16,关闭RSS功能。因为很多网卡限制了RSS队列的最大数量为16,如果继续使用RSS可能导致资源分配不均或管理复杂性增加。
$cpuNum = (Get-CimInstance -ClassName Win32_Processor).NumberOfLogicalProcessors if ($cpuNum -le 16) { Set-NetAdapterRss -Name <测试机网络适配器的名称> -NumberOfReceiveQueues $cpuNum } else { Disable-NetAdapterRss -Name <测试机网络适配器的名称> }说明-
您需要根据环境替换
<测试机网络适配器的名称>(可通过Get-NetAdapter | Select-Object Name命令获取)。 -
修改网卡的RSS配置通常需要重启网卡服务,可能会导致当前通过该网卡的网络连接暂时中断,请您在连接恢复后再进行后续操作。
-
-
在测试机中执行以下命令,准备接收数据。
$serverIp = (Get-NetIPConfiguration -InterfaceAlias <测试机网络适配器的名称>).IPv4Address.IPAddress $cpuNum = (Get-CimInstance -ClassName Win32_Processor).NumberOfLogicalProcessors $threadNum = $cpuNum & <测试机ntttcp.exe实际路径> -r -m $threadNum,0,$serverIp -t 300说明您需要根据环境替换
<测试机网络适配器的名称>和<测试机ntttcp.exe实际路径>。 -
在辅助测试机中执行以下命令,发送数据。
$serverIp = "<测试机私网IP地址>" $threadNum = "<测试机threadNum>" <辅助测试机ntttcp.exe实际路径> -s -m $threadNum,*,$serverIp -t 100说明您需要根据环境替换
<测试机私网IP地址>(可通过ipconfig命令获取)、<测试机threadNum>(可通过$cpuNum命令获取)和<辅助测试机ntttcp.exe实际路径>。 -
在测试机中查看测试的网络带宽。
测试示例如下图所示,
Throughput(MB/s)值表示网络带宽(数据传输速度)。
测试网络时延
Linux实例
-
分别远程连接测试机和辅助测试机。
具体操作,请参见使用Workbench登录Linux实例。
-
分别在测试机和辅助测试机上执行以下命令,安装
sockperf。sudo yum install -y autoconf automake libtool gcc-c++ cd /opt sudo wget https://github.com/Mellanox/sockperf/archive/refs/tags/3.8.tar.gz sudo tar -zxf 3.8.tar.gz cd sockperf-3.8/ sudo ./autogen.sh sudo ./configure sudo make -j `cat /proc/cpuinfo| grep process | wc -l` sudo make install -
在测试机上执行以下命令,查询测试机的私网IP地址。
ifconfig || ip addr
-
在测试机上执行以下命令,启动服务。
sockperf sr --tcp --daemonize -
在辅助测试机上执行以下命令,向测试机输入流量。
sockperf pp -i <测试机私网IP地址> --tcp -t 30 -m 14 --full-log=result.json<测试机私网IP地址>需替换为上一步查询的实际测试机的私网IP地址。 -
在测试机中查看测试的网络时延。
测试示例如下图所示:
-
以
avg-latency开头的结果数据表示平均时延,单位为us。 -
以
percentile 99.000开头的结果数据表示99分位时延,单位为μs。

-
Windows实例
-
分别远程连接测试机和辅助测试机。
具体操作,请参见使用Workbench登录Windows实例。
-
分别在测试机和辅助测试机中安装测试工具并关闭防火墙。
-
下载latte.exe工具,并获取存放路径。
-
打开运行对话框,输入powershell进入PowerShell命令行。
-
运行以下命令,关闭防火墙,避免防火墙可能阻止两台机器的连接。
Set-NetFirewallProfile -Profile * -Enabled:false或者增加入方向规则以允许latte.exe数据包通过防火墙。
$lattePath = "<latte.exe实际路径>" New-NetFirewallRule -DisplayName Latte -Protocol Any -Direction Inbound -Action Allow -Enabled True -Profile Any -Program $lattePath说明您需要根据实际环境替换测试机的
<latte.exe实际路径>。
-
-
在测试机中执行以下命令,准备接收数据。
$serverIp = (Get-NetIPConfiguration | Where-Object {$_.InterfaceAlias -eq '<测试机网络适配器的名称>'} | Select-Object -ExpandProperty IPv4Address).IPAddress $port = <通信端口> & "<测试机latte.exe实际路径>" -a "$serverIp`:$port" -i 65535说明-
您需要根据环境替换
<测试机网络适配器的名称>(可通过Get-NetAdapter | Select-Object Name命令获取)和<测试机latte.exe实际路径>。 -
<通信端口>由您自定义,但是必须确保测试机和辅助测试机两端的端口号一致。
-
-
在辅助测试机中执行以下命令,发送数据。
$serverIp = "<测试机私网IP地址>" $port = <通信端口> & "<辅助测试机latte.exe实际路径>" -c -a "${serverIp}:$port" -i 65535说明-
您需要根据环境替换
<测试机私网IP地址>(可通过ipconfig命令获取)、<辅助测试机latte.exe实际路径>。 -
<通信端口>由您自定义,但是必须确保测试机和辅助测试机两端的端口号一致。
-
-
在测试机中查看测试的网络时延。
测试示例如下图所示,
Latency(usec)值表示数据传输的平均时延,单位为 μs。




