物理专线接入完成后,您需要需要对物理专线的性能进行测试,确保物理专线可以满足您的业务需求。

前提条件

在测试前,确保您完成以下环境准备:

  • 完成物理专线接入和路由配置。本地IDC与VPC必须由一根专线连通。

  • 准备1台本地IDC网络接入设备: 被压力测试网络PPS的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

Netperf是一个网络性能的测量工具,主要针对基于TCP或UDP传输。

完成以下操作,分别在IDC网络设备和8台ECS实例上安装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 -hnetserver -h验证安装是否成功。

安装iPerf3

Iperf3是一个网络性能测试工具。Iperf3可以测试最大TCP和UDP带宽性能。

完成以下操作,分别在IDC网络设备和8台ECS实例上安装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 -h,验证安装是否成功。

开启多队列功能

在IDC网络接入设备内部执行以下命令,开启多队列功能。(假设与物理专线相连的接口为eth0。)

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安装完成后会创建两个命令行工具:netserver(服务器端)和netperf(客户端)。两个工具的主要参数说明如下表所示。

工具名称 主要参数 参数说明
Netserver(服务器端:接收端工具) -p 监听的的端口号。
netperf(客户端:发送端工具) -H IDC网络接入设备或VPC服务器的IP地址。
-p IDC网络接入设备或VPC服务器的端口。
-l 运行时间。
-t 发送报文的协议类型:TCP_STREAM 或 UDP_STREAM。

建议使用UDP_STREAM。

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

测试收方向

  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. 在VPC内的8台ECS实例上启动netperf进程,分别指定到IDC网络接入设备的不同netserver端口。
     netperf -H 192.168.100.1 -p 11256 -t UDP_STREAM -l 300 -- -m 1 #第一台
    netperf -H 192.168.100.1 -p 11257 -t UDP_STREAM -l 300 -- -m 1 #第二台
    netperf -H 192.168.100.1 -p 11258 -t UDP_STREAM -l 300 -- -m 1 #第三台
    netperf -H 192.168.100.1 -p 11259 -t UDP_STREAM -l 300 -- -m 1 #第四台
    netperf -H 192.168.100.1 -p 11260 -t UDP_STREAM -l 300 -- -m 1 #第五台
    netperf -H 192.168.100.1 -p 11261 -t UDP_STREAM -l 300 -- -m 1 #第六台
    netperf -H 192.168.100.1 -p 11262 -t UDP_STREAM -l 300 -- -m 1 #第七台
    netperf -H 192.168.100.1 -p 11263 -t UDP_STREAM -l 300 -- -m 1 #第八台
  3. 如果需要测试bps,将上述命令修改为:
     netperf -H 192.168.100.1 -p 11256 -t UDP_STREAM -l 300 -- -m 1400 #第一台
    netperf -H 192.168.100.1 -p 11257 -t UDP_STREAM -l 300 -- -m 1400 #第二台
    netperf -H 192.168.100.1 -p 11258 -t UDP_STREAM -l 300 -- -m 1400 #第三台
    netperf -H 192.168.100.1 -p 11259 -t UDP_STREAM -l 300 -- -m 1400 #第四台
    netperf -H 192.168.100.1 -p 11260 -t UDP_STREAM -l 300 -- -m 1400 #第五台
    netperf -H 192.168.100.1 -p 11261 -t UDP_STREAM -l 300 -- -m 1400 #第六台
    netperf -H 192.168.100.1 -p 11262 -t UDP_STREAM -l 300 -- -m 1400 #第七台
    netperf -H 192.168.100.1 -p 11263 -t UDP_STREAM -l 300 -- -m 1400 #第八台

测试发方向

  1. 在8台VPC ECS实例内启动netserver进程,指定端口,如下所示:
    netserver -p 11256
  2. 在IDC网络接入设备内启动8个netperf进程,指定为不同IP地址。
     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实例
  3. 如果需要测试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实例

测试发方向

  1. 在8台VPC ECS实例内启动netserver进程,指定端口,如下所示:
    netserver -p 11256
  2. 在IDC网络接入设备内启动8个netperf进程,指定为不同IP地址。
     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实例
  3. 如果需要测试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实例

分析测试结果

客户端的netperf进程执行完毕后,会显示如下结果。
   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 网络吞吐量(Mbit/s)

通过发送成功的报文数除以测试时间,即可算出测试链路的pps,即pps=发送成功的报文数/测试时间。

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

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

工具名称 主要参数 参数说明
iPerf3 -s 表示作为服务器端接收数据。
-i 设置每次报告之间的时间间隔,单位为秒。
-p 指定服务端的监听端口。
-u 表示使用UDP协议发送报文。若不指定该参数则表示使用TCP协议。
-l 设置读写缓冲区的长度。通常测试包转发性能是建议该值设为16,测试带宽是建议该值设为1400。
-b UDP模式使用的带宽,单位bits/s。
-t 设置传输的总时间。Iperf在指定的时间内,重复的发送指定长度的数据包,默认值为10秒。
-A 设置CPU亲和性,可以将的iPerf3进程绑定对应编号的逻辑CPU,避免iPerf3的进程在不同的CPU间被调度。

测试收方向

  1. 在IDC网络接入设备中以server模式启动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. 在VPC ECS实例上以client模式启动iperf3进程,分别指定到IDC网络接入设备的不同端口。
     iPerf3 -u -l 16 -b 100m -t 120 -c 192.168.100.1 -i 1 -p 16001 -A 1
     iPerf3 -u -l 16 -b 100m -t 120 -c 192.168.100.1 -i 1 -p 16002 -A 2
     iPerf3 -u -l 16 -b 100m -t 120 -c 192.168.100.1 -i 1 -p 16003 -A 3
     iPerf3 -u -l 16 -b 100m -t 120 -c 192.168.100.1 -i 1 -p 16004 -A 4
     iPerf3 -u -l 16 -b 100m -t 120 -c 192.168.100.1 -i 1 -p 16005 -A 5
     iPerf3 -u -l 16 -b 100m -t 120 -c 192.168.100.1 -i 1 -p 16006 -A 6
     iPerf3 -u -l 16 -b 100m -t 120 -c 192.168.100.1 -i 1 -p 16007 -A 7
     iPerf3 -u -l 16 -b 100m -t 120 -c 192.168.100.1 -i 1 -p 16008 -A 8

测试发方向

  1. 在每个VPC ECS实例上server模式启动iperf3进程并指定端口。
     iPerf3 -s -i 1 -p 16001
  2. 在IDC接入设备上以client模式启动8个iperf3进程,-c的值为各个陪练机的IP地址。
     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进程执行完毕后,会显示如下结果。

[ 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
显示结果中各字段含义如下表所示。
字段 含义
Transfer 传输的总数据量
Bandwidth 带宽大小
Jitter 抖动
Lost/Total Datagrams 丢失报文数/总报文数(丢包率)

PPS=对端收到的包/时间

说明
建议您在server端运行sar命令来统计实际收到的包并作为实际结果,例如:sar -n DEV 1 320

阿里云侧速率限制

除了物理专线的限制外,VPC与本地数据中心之间的通信还受到以下限制。

  • OSS的读写速率上限为5Gbit/s。
  • 为了提高可靠性,从VPC到边界路由器(VBR)方向的单个hash流,在阿里云内部被限速为“高速通道规格带宽/12”。例如VBR到VPC的带宽为large1,即1Gbps带宽,则单个hash流的最大带宽为85Mbps。

    hash流定义:源IP地址、源端口、传输层协议、目的IP地址和目的端口,这五个量组成的一个集合所定义的数据流。 例如:“192.168.1.1 10000 TCP 121.14.88.76 80” 就构成了一个hash流。即一个IP地址为192.168.1.1的终端通过端口10000,利用TCP协议,和IP地址为121.14.88.76,端口为80的终端进行的连接就是一个hash流。