- 文档首页
云服务器
云服务器ECS
最佳实践
性能测试
测试网络性能
使用Netperf测试网络性能
使用Netperf测试网络性能
本文介绍如何使用Netperf测试工具测试云服务器的网络性能。
Netperf介绍
Netperf是一种网络性能的测量工具,主要针对基于TCP或UDP的传输。Netperf根据应用的不同,可以进行不同模式的网络性能测试,即批量数据传输(bulk data transfer)模式和请求/应答(request/response)模式。Netperf测试结果主要反应系统向其他系统发送数据的速度,以及其他系统接收数据的速度。更多信息请参考Netperf官网。 准备环境
说明
本文的测试结果仅作为参考,不代表云服务器的真实最优性能。
测试时,参考通过向导购买实例,购买两台相同配置的Linux云服务器。云服务器A上安装Netperf的netserver作为服务器端,云服务器B上安装Netperf作为客户端。在不运行应用的情况下,云服务器B压测云服务器A(不指定数据包大小),测试云服务器A的网络TCP收带宽性能。网络压力持续时间为5分钟,取云服务器A收到压力50秒后持续200秒的带宽平均值。 云服务器规划如下:
安装Netperf
- 执行以下命令,在 两台 云服务器上分别安装Netperf工具。
wget https://codeload.github.com/HewlettPackard/netperf/tar.gz/netperf-2.7.0
yum install gcc sysstat -y
cd ./netperf-netperf-2.7.0
- 执行以下命令,验证安装状态。如果返回使用帮助即证明安装成功。
测试网络性能
测试TCP bps
- 在Server端启动netserver进程,监听 12000 端口。
- 在Client端执行以下命令,命令中IP地址为Server端的内网IP地址。
- netperf -H 192.168.xx.xx -p 12000 -t TCP_STREAM -l 300 -- -m 1440 &
-
- bps结果为rxkB/s的数值,单位换算:kB/s * 8/1000= Mbps
测试TCP cps
说明
如需测试三代实例的TCP cps,您可以在测试前,参考TCP cps性能优化进行性能优化,以获取更优的cps。 - 在Server端启动netserver进程,监听 12000 端口。
- 在Client端执行以下命令,命令中IP地址为Server端的内网IP地址。
- netperf -H 192.168.xx.xx -p 12000 -t TCP_CRR -l 300 &
-
测试UDP pps
- 在Server端启动netserver进程,监听 12000 端口。
- 在Client端执行以下命令,命令中IP地址为Server端的内网IP地址。
- netperf -H 192.168.xx.xx -p 12000 -t UDP_STREAM -l 300 -- -m 1 &
-
附录
TCP cps性能优化
三代实例的TCP cps性能可能会受到以下因素影响,您可以参考下文优化云服务器配置以获得最佳的性能体验。
- 在两台实例上依次执行如下命令,关闭eth0的XPS。
cd /sys/class/net/eth0/queues/
for i in `ls | grep tx` ; do cat $i/xps_cpus; done; #查看当前XPS配置
for i in `ls | grep tx` ; do echo "00000000" > $i/xps_cpus; done; #关闭tx xps;0的位数与当前xps_cpus一致
- 本文以ecs.g3a.8xlarge(32C)为例,如下图所示。
-
- 在两台实例上执行如下命令,对eth0进行中断绑核。
queue_num=$(ethtool -l eth0 | grep "Combined" | head -n 1 | awk '{print $2}')
#将中断绑到CPU 0-$queue_num-1上
cat /proc/interrupts | grep virtio | grep input | cut -d: -f1 | while read i; do echo -n "irq $i bind cpu: "; echo $((($i / 2) % $queue_num)) > /proc/irq/$i/smp_affinity_list; cat /proc/irq/$i/smp_affinity_list; done | sort -n -t ' ' -k2
cat /proc/interrupts | grep virtio | grep output | cut -d: -f1 | while read i; do echo -n "irq $i bind cpu: "; echo $((($i / 2) % $queue_num)) > /proc/irq/$i/smp_affinity_list; cat /proc/irq/$i/smp_affinity_list; done | sort -n -t ' ' -k2
- 在Server端启动多个netserver进程监听端口,例如启动1024个进程。
queue_num=$(ethtool -l eth0 | grep "Combined" | head -n 1 | awk '{print $2}')
for ((i = 0 ; i < 1024; i++)); do taskset -c $(($i % $queue_num)) netserver
-p $(($i + 12865)) & done
- 在Client端执行以下命令,命令中IP地址为Server端的内网IP地址。
queue_num=$(ethtool -l eth0 | grep "Combined" | head -n 1 | awk '{print $2}')
for ((i = 0 ; i < 512; i++)); do taskset -c $(($i % queue_num)) netperf -H 192.168.xx.xx -p $(($i + 12865)) -t TCP_CRR -l 120 & done
-
-
最近更新时间:2025.12.24 17:58:20