物理专线接入完成后,您需要测试链路的性能,确保物理专线可以满足您的业务需求。本文介绍通过Netperf和iPerf3工具测试物理专线性能的方法。

前提条件

  • 已完成物理专线的接入和路由配置,本地IDC(Internet Data Center)与阿里云通过物理专线连通。
  • 准备1台IDC网络接入设备:作为Netperf或iPerf3测试中的客户端或服务器端。

    本文中,IDC网络接入设备的IP地址为192.168.100.1。

  • 准备8个专有网络ECS实例:作为Netperf或iPerf3测试中的客户端或服务器端。与IDC网络接入设备之间建立控制连接,传递测试配置相关的信息,以及测试结果。

    本文使用8个规格为ecs.se1.2xlarge,镜像为centos_7_2_64_40G_base_20170222.vhd的ECS实例,IP地址为172.16.0.2~172.16.0.9。

搭建测试环境

安装Netperf和iPerf3

完成以下操作,分别在IDC网络接入设备和8个ECS实例上安装Netperf和iPerf3。

说明 以下内容以在ECS实例安装Netperf和iPerf3为例。
  1. 登录ECS实例。具体操作,请参见连接方式概述
  2. 安装Netperf。
    1. 执行以下命令,下载Netperf安装包。
      wget -c "https://codeload.github.com/HewlettPackard/netperf/tar.gz/netperf-2.5.0" -O netperf-2.5.0.tar.gz
    2. 依次执行以下命令,安装Netperf。
      tar -zxvf netperf-2.5.0.tar.gz
      cd netperf-netperf-2.5.0
      ./configure 
      make 
      make install
    3. 执行netperf -Vnetserver -V,验证安装是否成功。
      系统回显以下信息时,表示安装成功。
      Netperf version 2.5.0
  3. 安装iPerf3。
    1. 执行以下命令,下载iPerf3。
      yum install git -y  
      git clone https://github.com/esnet/iperf
    2. 执行以下命令,安装iPerf3。
      cd iperf
      ./configure && make && make install && cd ..
      cd src
      ADD_PATH="$(pwd)" 
      PATH="${ADD_PATH}:${PATH}"
      export PATH
    3. 执行iperf3 -v命令,验证安装是否成功。
      系统回显以下信息时,表示安装成功。
      iperf 3.10.1+ (cJSON 1.7.13)
      Linux iZbp15y0zrhx2ry6vo1b4wZ 3.10.0-957.21.3.el7.x86_64 #1 SMP Tue Jun 18 16:35:19 UTC 2019 x86_64

开启多队列功能

假设与物理专线相连的接口为eth0,在IDC网络接入设备执行ethtool -L eth0 combined 4命令,开启多队列功能。

执行命令后,系统回显以下信息:

echo "ff" > /sys/class/net/eth0/queues/rx-0/rps_cpus
echo "ff" > /sys/class/net/eth0/queues/rx-1/rps_cpus
echo "ff" > /sys/class/net/eth0/queues/rx-2/rps_cpus
echo "ff" > /sys/class/net/eth0/queues/rx-3/rps_cpus

使用Netperf工具测试物理专线的包转发性能

Netperf概述

Netperf安装完成后会创建两个命令行工具:netserver(服务端:接收端工具)和netperf(客户端:发送端工具),主要参数说明如下表所示。

工具名称主要参数参数说明
netserver-p监听的端口号。
netperf-HIDC网络接入设备或ECS实例的IP地址。
-pIDC网络接入设备或ECS实例的端口。
-l运行时间。
-t发送报文的协议类型:TCP_STREAM或UDP_STREAM。

推荐使用UDP_STREAM。

-m数据包大小。
  • 测试pps(packet per second)时,建议设置为1。
  • 测试bps(bit per second)时,建议设置为1400。

测试IDC网络接入设备作为服务端的包转发性能

  1. 在IDC网络接入设备启动netserver进程,指定不同端口。
     netserver -p 11256
     netserver -p 11257 
     netserver -p 11258 
     netserver -p 11259 
     netserver -p 11260 
     netserver -p 11261 
     netserver -p 11262 
     netserver -p 11263
  2. 分别在8个ECS实例上执行netperf -H server_ip -p port 6 -t UDP_STREAM -l 300 -- -m 1命令,启动netperf进程,并指定到IDC网络接入设备的不同netserver端口。
    • 测试pps时,执行命令示例如下所示:
      netperf -H 192.168.100.1 -p 11256 -t UDP_STREAM -l 300 -- -m 1 #第一个ECS实例
      netperf -H 192.168.100.1 -p 11257 -t UDP_STREAM -l 300 -- -m 1 #第二个ECS实例
      netperf -H 192.168.100.1 -p 11258 -t UDP_STREAM -l 300 -- -m 1 #第三个ECS实例
      netperf -H 192.168.100.1 -p 11259 -t UDP_STREAM -l 300 -- -m 1 #第四个ECS实例
      netperf -H 192.168.100.1 -p 11260 -t UDP_STREAM -l 300 -- -m 1 #第五个ECS实例
      netperf -H 192.168.100.1 -p 11261 -t UDP_STREAM -l 300 -- -m 1 #第六个ECS实例
      netperf -H 192.168.100.1 -p 11262 -t UDP_STREAM -l 300 -- -m 1 #第七个ECS实例
      netperf -H 192.168.100.1 -p 11263 -t UDP_STREAM -l 300 -- -m 1 #第八个ECS实例
    • 测试bps时,执行命令示例如下所示:
      netperf -H 192.168.100.1 -p 11256 -t UDP_STREAM -l 300 -- -m 1400 #第一个ECS实例
      netperf -H 192.168.100.1 -p 11257 -t UDP_STREAM -l 300 -- -m 1400 #第二个ECS实例
      netperf -H 192.168.100.1 -p 11258 -t UDP_STREAM -l 300 -- -m 1400 #第三个ECS实例
      netperf -H 192.168.100.1 -p 11259 -t UDP_STREAM -l 300 -- -m 1400 #第四个ECS实例
      netperf -H 192.168.100.1 -p 11260 -t UDP_STREAM -l 300 -- -m 1400 #第五个ECS实例
      netperf -H 192.168.100.1 -p 11261 -t UDP_STREAM -l 300 -- -m 1400 #第六个ECS实例
      netperf -H 192.168.100.1 -p 11262 -t UDP_STREAM -l 300 -- -m 1400 #第七个ECS实例
      netperf -H 192.168.100.1 -p 11263 -t UDP_STREAM -l 300 -- -m 1400 #第八个ECS实例

测试IDC网络接入设备作为客户端的包转发性能

  1. 分别在8个ECS实例上执行netserver -p 11256命令,启动netserver进程,并指定端口。
  2. 在IDC网络接入设备内执行netperf -H ECS_ip -p port -t UDP_STREAM -l 300 -- -m 1命令,启动8个netperf进程,并指定为不同的ECS实例IP地址。
    • 测试pps时,执行命令示例如下所示:
       netperf -H 172.16.0.2 -p 11256 -t UDP_STREAM -l 300 -- -m 1 #第一个ECS实例
       netperf -H 172.16.0.3 -p 11256 -t UDP_STREAM -l 300 -- -m 1 #第二个ECS实例
       netperf -H 172.16.0.4 -p 11256 -t UDP_STREAM -l 300 -- -m 1 #第三个ECS实例
       netperf -H 172.16.0.5 -p 11256 -t UDP_STREAM -l 300 -- -m 1 #第四个ECS实例
       netperf -H 172.16.0.6 -p 11256 -t UDP_STREAM -l 300 -- -m 1 #第五个ECS实例
       netperf -H 172.16.0.7 -p 11256 -t UDP_STREAM -l 300 -- -m 1 #第六个ECS实例
       netperf -H 172.16.0.8 -p 11256 -t UDP_STREAM -l 300 -- -m 1 #第七个ECS实例
       netperf -H 172.16.0.9 -p 11256 -t UDP_STREAM -l 300 -- -m 1 #第八个ECS实例
    • 测试bps时,执行命令示例如下所示:
       netperf -H 172.16.0.2 -p 11256 -t UDP_STREAM -l 300 -- -m 1400 #第一个ECS实例
       netperf -H 172.16.0.3 -p 11257 -t UDP_STREAM -l 300 -- -m 1400 #第二个ECS实例
       netperf -H 172.16.0.4 -p 11258 -t UDP_STREAM -l 300 -- -m 1400 #第三个ECS实例
       netperf -H 172.16.0.5 -p 11259 -t UDP_STREAM -l 300 -- -m 1400 #第四个ECS实例
       netperf -H 172.16.0.6 -p 11260 -t UDP_STREAM -l 300 -- -m 1400 #第五个ECS实例
       netperf -H 172.16.0.7 -p 11261 -t UDP_STREAM -l 300 -- -m 1400 #第六个ECS实例
       netperf -H 172.16.0.8 -p 11262 -t UDP_STREAM -l 300 -- -m 1400 #第七个ECS实例
       netperf -H 172.16.0.9 -p 11263 -t UDP_STREAM -l 300 -- -m 1400 #第八个ECS实例

分析测试结果

客户端的netperf进程执行完毕后,会显示以下结果。通过发送成功的报文数除以测试时间,计算出测试链路的pps,即pps=发送成功的报文数÷测试时间。

Socket  Message  Elapsed      Messages
Size    Size     Time         Okay Errors   Throughput
bytes   bytes    secs            #      #   10^6bits/sec
124928       1   10.00     4532554      0       3.63
212992           10.00     1099999              0.88

显示结果中各字段含义如下表所示。

字段含义
Socket Size缓冲区大小
Message Size数据包大小(Byte)
Elapsed Time测试时间(s)
Message Okay发送成功的报文数
Message Errors发送失败的报文数
Throughput网络吞吐量(Mbps)

使用iPerf3测试物理专线的带宽

iPerf3概述

iPerf3的主要参数说明如下表所示。

主要参数参数说明
-s服务端专用参数,表示iPerf3以服务端模式运行。
-c客户端专用参数,表示iPerf3以客户端模式运行。
-i设置每次报告之间的时间间隔,单位为秒。
-p
  • 服务端:指定服务端监听的端口,默认为5201,同时监听TCP/UDP。
  • 客户端:指定客户端连接服务端的端口,默认为5201。如果同时有-u参数,表示通过UDP发起连接,否则默认使用TCP连接。
-u表示使用UDP协议发送报文。若不指定该参数则表示使用TCP协议。
-l设置读写缓冲区的长度。通常测试包转发性能时建议该值设为16,测试带宽时建议该值设为1400。
-bUDP模式使用的带宽,单位bit/s。
-t设置传输的总时间。iPerf3在指定时间内,重复发送指定长度数据包的时间,默认值为10秒。
-A设置CPU亲和性,可以将iPerf3进程绑定对应编号的逻辑CPU,避免iPerf3进程在不同的CPU间被调度。

测试IDC网络接入设备作为服务端的带宽

  1. 在IDC网络接入设备上执行以下命令,以服务端模式启动iPerf3进程,指定不同端口。
     iperf3 -s -i 1 -p 16001
     iperf3 -s -i 1 -p 16002
     iperf3 -s -i 1 -p 16003
     iperf3 -s -i 1 -p 16004
     iperf3 -s -i 1 -p 16005
     iperf3 -s -i 1 -p 16006
     iperf3 -s -i 1 -p 16007
     iperf3 -s -i 1 -p 16008
  2. 分别在8个ECS实例上执行iperf3 -u -l 16 -b 100m -t 120 -c server_ip -i 1 -p port -A 1命令,以客户端模式启动iPerf3进程,并指定到IDC网络接入设备的不同端口。
    执行命令示例如下:
     iperf3 -u -l 16 -b 100m -t 120 -c 192.168.100.1 -i 1 -p 16001 -A 1 #第一个ECS实例
     iperf3 -u -l 16 -b 100m -t 120 -c 192.168.100.1 -i 1 -p 16002 -A 2 #第二个ECS实例
     iperf3 -u -l 16 -b 100m -t 120 -c 192.168.100.1 -i 1 -p 16003 -A 3 #第三个ECS实例
     iperf3 -u -l 16 -b 100m -t 120 -c 192.168.100.1 -i 1 -p 16004 -A 4 #第四个ECS实例
     iperf3 -u -l 16 -b 100m -t 120 -c 192.168.100.1 -i 1 -p 16005 -A 5 #第五个ECS实例
     iperf3 -u -l 16 -b 100m -t 120 -c 192.168.100.1 -i 1 -p 16006 -A 6 #第六个ECS实例
     iperf3 -u -l 16 -b 100m -t 120 -c 192.168.100.1 -i 1 -p 16007 -A 7 #第七个ECS实例
     iperf3 -u -l 16 -b 100m -t 120 -c 192.168.100.1 -i 1 -p 16008 -A 8 #第八个ECS实例

测试IDC网络接入设备作为客户端的带宽

  1. 分别在8个ECS实例上执行iperf3 -s -i 1 -p 16001命令,以服务端模式启动iPerf3进程并指定端口。
  2. 在IDC网络接入设备上执行以下命令,以客户端模式启动8个iPerf3进程。
     iperf3 -u -l 16 -b 100m -t 120 -c 172.16.0.2 -i 1 -p 16001 -A 1
     iperf3 -u -l 16 -b 100m -t 120 -c 172.16.0.3 -i 1 -p 16001 -A 2
     iperf3 -u -l 16 -b 100m -t 120 -c 172.16.0.4 -i 1 -p 16001 -A 3
     iperf3 -u -l 16 -b 100m -t 120 -c 172.16.0.5 -i 1 -p 16001 -A 4
     iperf3 -u -l 16 -b 100m -t 120 -c 172.16.0.6 -i 1 -p 16001 -A 5
     iperf3 -u -l 16 -b 100m -t 120 -c 172.16.0.7 -i 1 -p 16001 -A 6
     iperf3 -u -l 16 -b 100m -t 120 -c 172.16.0.8 -i 1 -p 16001 -A 7
     iperf3 -u -l 16 -b 100m -t 120 -c 172.16.0.9 -i 1 -p 16001 -A 8

分析测试结果

客户端的iPerf3进程执行完毕后,会显示以下结果。通过将对端收到的包数除以时间,计算出测试链路的pps,即pps=对端收到的包÷时间。

[ ID]  Interval        Transfer    Bandwidth      Jitter    Lost/Total Datagrams
[  4]  0.00-10.00 sec  237 MBytes  199 Mbits/sec  0.027 ms  500/30352 (1.6%)
[  4]  Sent 30352  datagrams
说明 建议您在服务端通过sar命令来统计实际收到的包并作为实际结果,例如:sar -n DEV 1 320

显示结果中各字段含义如下表所示。

字段含义
Transfer传输的总数据量
Bandwidth带宽大小
Jitter抖动
Lost/Total Datagrams丢失报文数/总报文数(丢包率)