You need to enable JavaScript to run this app.
导航
使用Netperf测试网络性能
最近更新时间:2024.11.01 15:58:06首次发布时间:2022.10.09 14:31:22

本文介绍如何使用Netperf测试工具测试云服务器的网络性能。

Netperf介绍

Netperf是一种网络性能的测量工具,主要针对基于TCP或UDP的传输。Netperf根据应用的不同,可以进行不同模式的网络性能测试,即批量数据传输(bulk data transfer)模式和请求/应答(request/reponse)模式。Netperf测试结果主要反应系统向其他系统发送数据的速度,以及其他系统接收数据的速度。更多信息请参考Netperf官网

准备环境

说明

本文的测试结果仅作为参考,不代表云服务器的真实最优性能。

测试时,参考通过向导购买实例,购买两台相同配置的Linux云服务器。云服务器A上安装Netperf的netserver作为服务器端,云服务器B上安装Netperf作为客户端。在不运行应用的情况下,云服务器B压测云服务器A(不指定数据包大小),测试云服务器A的网络TCP收带宽性能。网络压力持续时间为5分钟,取云服务器A收到压力50秒后持续200秒的带宽平均值。

云服务器规划如下:

主机名称内网IP地址角色
benchmark-1192.168.xx.xxServer
benchmark-2192.168.xx.xxClient

安装Netperf

  1. 执行以下命令,在 两台 云服务器上分别安装Netperf工具。

    wget https://codeload.github.com/HewlettPackard/netperf/tar.gz/netperf-2.7.0
    tar -xzvf netperf-2.7.0
    yum install gcc sysstat -y
    cd ./netperf-netperf-2.7.0
    ./configure             
    make && make install
    
  2. 执行以下命令,验证安装状态。如果返回使用帮助即证明安装成功。

    netperf -p
    参数说明:

    参数说明
    -p要监听的端口号。
    -H接收端的IP地址。
    -t发包协议类型。
    -l测试时长。
    -m数据包大小,带宽建议“1440”,收发包建议“1”。

测试网络性能

测试TCP bps

  1. 在Sever端启动netserver进程,监听 12000 端口。
    netserver -p 12000

  2. 在Client端执行以下命令,命令中IP地址为Client端的内网IP地址。
    netperf -H 192.168.xx.xx -p 12000 -t TCP_STREAM -l 300 -- -m 1440 &

  3. 在Sever端使用sar工具查看结果。
    sar -n DEV 1 200
    image.png

    bps结果为rxkB/s的数值,单位换算:kB/s * 8/1000= Mbps

测试TCP cps

说明

如需测试三代实例的TCP cps,您可以在测试前,参考TCP cps性能优化进行性能优化,以获取更优的cps。

  1. 在Sever端启动netserver进程,监听 12000 端口。
    netserver -p 12000

  2. 在Client端执行以下命令,命令中IP地址为Client端的内网IP地址。
    netperf -H 192.168.xx.xx -p 12000 -t TCP_CRR -l 300 &

  3. 在Sever端使用sar工具查看结果。
    sar -n DEV 1
    alt

    cps结果为 (rxpck/s的数值) /5。

测试UDP pps

  1. 在Sever端启动netserver进程,监听 12000 端口。
    netserver -p 12000

  2. 在Client端执行以下命令,命令中IP地址为Client端的内网IP地址。
    netperf -H 192.168.xx.xx -p 12000 -t UDP_STREAM -l 300 -- -m 1 &

  3. 在Sever端使用sar工具查看结果。
    sar -n DEV 1 200
    image.png

    pps结果为rxpck/s的数值。

附录

TCP cps性能优化

三代实例的TCP cps性能可能会受到以下因素影响,您可以参考下文优化云服务器配置以获得最佳的性能体验。

  • 关闭eth0的xps(仅三代实例涉及)
    在两台实例上依次执行如下命令,关闭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)为例,如下图所示。
    alt

  • 中断绑核(仅三代AMD实例涉及)

    1. 在两台实例上执行如下命令,对eth0进行中断绑核。

      #查看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
      
    2. Netperf绑核测试。
      在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
      

      alt
      alt