网络性能测试方法

网络性能测试方法

更新时间:2019-08-13 11:08:49

免责声明: 本文档可能包含第三方产品信息,该信息仅供参考。阿里云对第三方产品的性能、可靠性以及操作可能带来的潜在影响,不做任何暗示或其他形式的承诺。

 

概述

本文介绍了如何测试ECS实例的网络性能。

 

详细信息

关于如何进行网络性能测试的具体内容如下。

 

准备环境

需要准备如下设备。

注:所有ECS实例必须在同一个安全组内。

  • 1台测试机:被压力测试网络PPS的ECS实例,可作为Netperf或iperf3测试中的client端或server端。具体规格如下。
    注:假设测试机IP地址为:172.0.0.1。 
    • 镜像:centos_7_2_64_40G_base_20170222.vhd
    • 规格:ecs.se1.14xlarge
    • 数量:1
    • 虚拟机名称:i-test-vm(以现场实际情况进行命名)
  • 8台陪练机:主体为ECS实例,作为Netperf测试或iperf3测试中的client端或server端,与测试机之间建立控制连接,传递测试配置相关的信息,以及测试结果。具体规格如下。
    注:假设8台陪练机的IP地址为:172.0.0.2 − 172.0.0.9。
    • 镜像:centos_7_2_64_40G_base_20170222.vhd
    • 规格:ecs.se1.14xlarge
    • 数量:8
    • 虚拟机名称:i-partnerVm-{1-8}

 

安装Netperf

按以下步骤在测试机和陪练机上安装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 && cd ..
  3. 执行netperf -hnetserver -h命令,确认安装成功。

 

安装iperf3

按以下步骤在测试机和陪练机上安装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="${APP_PATH}:${PATH}"
    export PATH
  3. 执行iperf3 -h命令,确认安装成功。

 

开启多队列功能

在测试机内部依次执行如下命令,开启多队列功能。

注:以开启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工具参数介绍和测试相关内容如下。

 

Netperf安装完成后会生成2个工具:netserver和netperf。以下为2个工具的主要参数。

工具名称 工具说明 主要参数 参数说明
netserver 接收端工具(server 端) -p 端口号
netperf 发送端工具(client 端) -H 指定 ECS 实例的 IP 地址。
-p 指定 ECS 实例的端口。
-l 指定运行时间。
-t 指定发包协议类型:TCP_STREAM 或 UDP_STREAM。建议使用 UDP_STREAM。
-m 指定数据包大小。
  • 测试 PPS 时,该值为 1。
  • 测试 BPS(bit per second)时,该值为 1400。

 

以下是测试收方向的具体步骤。

  1. 依次执行如下命令,在测试机内启动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
    注:-p为指定不同端口。
  2. 执行如下命令,在陪练机内启动netperf进程,分别指定到测试机的不同netserver端口。
    netperf -H 172.0.0.1 -p 11256 -t UDP_STREAM -l 300 -- -m 1 #第一台
    netperf -H 172.0.0.1 -p 11257 -t UDP_STREAM -l 300 -- -m 1 #第二台
    netperf -H 172.0.0.1 -p 11258 -t UDP_STREAM -l 300 -- -m 1 #第三台
    netperf -H 172.0.0.1 -p 11259 -t UDP_STREAM -l 300 -- -m 1 #第四台
    netperf -H 172.0.0.1 -p 11260 -t UDP_STREAM -l 300 -- -m 1 #第五台
    netperf -H 172.0.0.1 -p 11261 -t UDP_STREAM -l 300 -- -m 1 #第六台
    netperf -H 172.0.0.1 -p 11262 -t UDP_STREAM -l 300 -- -m 1 #第七台
    netperf -H 172.0.0.1 -p 11263 -t UDP_STREAM -l 300 -- -m 1 #第八台
  3. 如果需要测试BPS,则第二步命令应该改为如下。
    netperf -H 172.0.0.1 -p 11256 -t UDP_STREAM -l 300 -- -m 1400 #第一台
    netperf -H 172.0.0.1 -p 11257 -t UDP_STREAM -l 300 -- -m 1400 #第二台
    netperf -H 172.0.0.1 -p 11258 -t UDP_STREAM -l 300 -- -m 1400 #第三台
    netperf -H 172.0.0.1 -p 11259 -t UDP_STREAM -l 300 -- -m 1400 #第四台
    netperf -H 172.0.0.1 -p 11260 -t UDP_STREAM -l 300 -- -m 1400 #第五台
    netperf -H 172.0.0.1 -p 11261 -t UDP_STREAM -l 300 -- -m 1400 #第六台
    netperf -H 172.0.0.1 -p 11262 -t UDP_STREAM -l 300 -- -m 1400 #第七台
    netperf -H 172.0.0.1 -p 11263 -t UDP_STREAM -l 300 -- -m 1400 #第八台

以下是测试发方向的具体步骤。

  1. 执行如下命令,在所有陪练机内启动1个netserver进程。

    netserver -p 11256
  2. 执行如下命令,在测试机内启动8个netperf进程,-H指定为不同 IP 地址。

    netperf -H 172.0.0.2 -p 11256 -t UDP_STREAM -l 300 -- -m 1 #第一台
    netperf -H 172.0.0.3 -p 11256 -t UDP_STREAM -l 300 -- -m 1 #第二台
    netperf -H 172.0.0.3 -p 11256 -t UDP_STREAM -l 300 -- -m 1 #第三台
    netperf -H 172.0.0.4 -p 11256 -t UDP_STREAM -l 300 -- -m 1 #第四台
    netperf -H 172.0.0.5 -p 11256 -t UDP_STREAM -l 300 -- -m 1 #第五台
    netperf -H 172.0.0.6 -p 11256 -t UDP_STREAM -l 300 -- -m 1 #第六台
    netperf -H 172.0.0.7 -p 11256 -t UDP_STREAM -l 300 -- -m 1 #第七台
    netperf -H 172.0.0.8 -p 11256 -t UDP_STREAM -l 300 -- -m 1 #第八台
  3. 如果需要测试BPS,则上一步命令应该改为如下。
    netperf -H 172.0.0.2 -p 11256 -t UDP_STREAM -l 300 -- -m 1400 #第一台
    netperf -H 172.0.0.3 -p 11256 -t UDP_STREAM -l 300 -- -m 1400 #第二台
    netperf -H 172.0.0.3 -p 11256 -t UDP_STREAM -l 300 -- -m 1400 #第三台
    netperf -H 172.0.0.4 -p 11256 -t UDP_STREAM -l 300 -- -m 1400 #第四台
    netperf -H 172.0.0.5 -p 11256 -t UDP_STREAM -l 300 -- -m 1400 #第五台
    netperf -H 172.0.0.6 -p 11256 -t UDP_STREAM -l 300 -- -m 1400 #第六台
    netperf -H 172.0.0.7 -p 11256 -t UDP_STREAM -l 300 -- -m 1400 #第七台
    netperf -H 172.0.0.8 -p 11256 -t UDP_STREAM -l 300 -- -m 1400 #第八台

 

最终发送端每个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

注:

  • 输出结果中各字段含义解释如下表所示。

    字段数据 含义
    124928 缓冲区大小
    1 数据包大小(Byte)
    10.00 测试时间(s)
    4532554 数据包成功数
    0 失败数
    3.63 网络吞吐量(Mbit/s)
  • 通常我们建议在server端执行sar命令来统计实际收到的包并作为实际结果,具体命令为sar -n DEV 1 320

 

使用iperf3工具测试网络性能

iperf3工具参数介绍和测试相关内容如下。

 

以下为iperf3工具的主要参数。

工具名称 工具说明 主要参数 参数说明
iperf3 收发一体 -s 表示作为server端接收包。
-i 间隔多久输出信息流量信息,默认单位为秒。
-p 指定服务的监听端口。
-u 表示采用UDP协议发送报文,不带该参数表示采用TCP协议
-l 表示包大小,默认单位为 Byte。通常测试 PPS 的时候该值为16,测试BPS时该值为1400。
-b 设定流量带宽,可选单位包括:k/m/g。
-t 流量的持续时间,默认单位为秒。
-A CPU亲和性,可以将具体的iperf3进程绑定对应编号的逻辑CPU,避免iperf进程在不同的CPU间调度。

 

以下是测试收方向的具体步骤。

  1. 在测试机中以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. 在陪练机中以client模式启动iperf3进程,分别指定到测试机的不同端口。

    iperf3 -u -l 16 -b 100m -t 120 -c 172.0.0.1 -i 1 -p 16001 -A 1
    iperf3 -u -l 16 -b 100m -t 120 -c 172.0.0.1 -i 1 -p 16002 -A 2
    iperf3 -u -l 16 -b 100m -t 120 -c 172.0.0.1 -i 1 -p 16003 -A 3
    iperf3 -u -l 16 -b 100m -t 120 -c 172.0.0.1 -i 1 -p 16004 -A 4
    iperf3 -u -l 16 -b 100m -t 120 -c 172.0.0.1 -i 1 -p 16005 -A 5
    iperf3 -u -l 16 -b 100m -t 120 -c 172.0.0.1 -i 1 -p 16006 -A 6
    iperf3 -u -l 16 -b 100m -t 120 -c 172.0.0.1 -i 1 -p 16007 -A 7
    iperf3 -u -l 16 -b 100m -t 120 -c 172.0.0.1 -i 1 -p 16008 -A 8

 

以下是测试发方向的具体步骤。

  1. 执行如下命令,在每个陪练机中以server模式启动1个iperf3进程。

    iperf3 -s -i 1 -p 16001
  2. 在测试机中以client模式启动8个iperf3进程。

    iperf3 -u -l 16 -b 100m -t 120 -c 172.0.0.2 -i 1 -p 16001 -A 1
    iperf3 -u -l 16 -b 100m -t 120 -c 172.0.0.3 -i 1 -p 16001 -A 2
    iperf3 -u -l 16 -b 100m -t 120 -c 172.0.0.4 -i 1 -p 16001 -A 3
    iperf3 -u -l 16 -b 100m -t 120 -c 172.0.0.5 -i 1 -p 16001 -A 4
    iperf3 -u -l 16 -b 100m -t 120 -c 172.0.0.6 -i 1 -p 16001 -A 5
    iperf3 -u -l 16 -b 100m -t 120 -c 172.0.0.7 -i 1 -p 16001 -A 6
    iperf3 -u -l 16 -b 100m -t 120 -c 172.0.0.8 -i 1 -p 16001 -A 7
    iperf3 -u -l 16 -b 100m -t 120 -c 172.0.0.9 -i 1 -p 16001 -A 8
    注:-c指定为各个陪练机的IP地址。

 

最终发送端每个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

注:

  • 输出结果中各字段含义解释如下表所示。

    字段数据 含义
    237 传送的总数据量
    199 带宽大小
    0.027 波动率
    500/30352 丢包/总报文数
    1.6% 丢包率
  • 通常我们建议在server端执行sar命令来统计实际收到的包并作为实际结果,具体命令为sar -n DEV 1 320

 

适用于

  • 云服务器 ECS