zoukankan      html  css  js  c++  java
  • 网络性能测试方法

    1. 准备环境

    您需要准备:

    • 测试机:被压力测试网络 PPS 的 ECS 实例,可作为 Netperf 或 iperf3 测试中的 client 端或 server 端。
    • 陪练机:ECS 实例,作为 Netperf 测试或 iperf3 测试中的 client 端或 server 端,与测试机之间建立控制连接,传递测试配置相关的信息,以及测试结果。

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

    1.1. 准备 1 台测试机

    • 镜像:centos_7_2_64_40G_base_20170222.vhd
    • 规格:ecs.se1.14xlarge
    • 数量:1
    • 虚拟机名称:i-test-vm(假设)

    假设测试机 IP 地址为:172.0.0.1。

    1.2. 准备 8 台陪练机

    • 镜像:centos_7_2_64_40G_base_20170222.vhd
    • 规格:ecs.se1.14xlarge
    • 数量:8
    • 虚拟机名称:i-partnerVm-{1-8}

    假设 8 台陪练机的 IP 地址为:172.0.0.2 − 172.0.0.9。

    1.3. 安装 Netperf

    按以下步骤在测试机和陪练机上安装 Netperf。

    1. 运行以下命令下载 Netperf。

       
      1. wget -c "https://codeload.github.com/HewlettPackard/netperf/tar.gz/netperf-2.5.0" -O netperf-2.5.0.tar.gz
    2. 运行以下命令安装 Netperf。

       
      1. tar -zxvf netperf-2.5.0.tar.gz
      2. cd netperf-netperf-2.5.0
      3. ./configure && make && make install && cd ..
    3. 运行 netperf -h 和 netserver -h 验证安装是否成功。

    1.4. 安装 iperf3

    按以下步骤在测试机和陪练机上安装 iperf3 工具。

    1. 运行以下命令下载 iperf3。

       
      1. yum install git -y
      2. git clone https://github.com/esnet/iperf
    2. 运行以下命令安装 iperf3。

       
      1. cd iperf
      2. ./configure && make && make install && cd ..
      3. cd src
      4. ADD_PATH="$(pwd)"
      5. PATH="${ADD_PATH}:${PATH}"
      6. export PATH
    3. 运行 iperf3 -h,验证安装是否成功。

    1.5. 开启多队列功能

    在测试机内部执行以下命令(假设需要开启的网卡是 eth0)开启多队列功能。

     
    1. ethtool -L eth0 combined 4
    2. echo "ff" > /sys/class/net/eth0/queues/rx-0/rps_cpus
    3. echo "ff" > /sys/class/net/eth0/queues/rx-1/rps_cpus
    4. echo "ff" > /sys/class/net/eth0/queues/rx-2/rps_cpus
    5. echo "ff" > /sys/class/net/eth0/queues/rx-3/rps_cpus

    2. 使用 Netperf 工具测试网络性能

    2.1. 介绍工具相关参数

    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。

    2.2. 测试收方向

    1. 在测试机内启动 netserver 进程,-p 指定不同端口:

       
      1. netserver -p 11256
      2. netserver -p 11257
      3. netserver -p 11258
      4. netserver -p 11259
      5. netserver -p 11260
      6. netserver -p 11261
      7. netserver -p 11262
      8. netserver -p 11263
    2. 在陪练机内启动 netperf 进程,分别指定到测试机的不同 netserver 端口。

       
      1. netperf -H 172.0.0.1 -p 11256 -t UDP_STREAM -l 300 -- -m 1 #第一台
      2. netperf -H 172.0.0.1 -p 11257 -t UDP_STREAM -l 300 -- -m 1 #第二台
      3. netperf -H 172.0.0.1 -p 11258 -t UDP_STREAM -l 300 -- -m 1 #第三台
      4. netperf -H 172.0.0.1 -p 11259 -t UDP_STREAM -l 300 -- -m 1 #第四台
      5. netperf -H 172.0.0.1 -p 11260 -t UDP_STREAM -l 300 -- -m 1 #第五台
      6. netperf -H 172.0.0.1 -p 11261 -t UDP_STREAM -l 300 -- -m 1 #第六台
      7. netperf -H 172.0.0.1 -p 11262 -t UDP_STREAM -l 300 -- -m 1 #第七台
      8. netperf -H 172.0.0.1 -p 11263 -t UDP_STREAM -l 300 -- -m 1 #第八台

      如果需要测试 bps,上述命令应该为:

       
      1. netperf -H 172.0.0.1 -p 11256 -t UDP_STREAM -l 300 -- -m 1400 #第一台
      2. netperf -H 172.0.0.1 -p 11257 -t UDP_STREAM -l 300 -- -m 1400 #第二台
      3. netperf -H 172.0.0.1 -p 11258 -t UDP_STREAM -l 300 -- -m 1400 #第三台
      4. netperf -H 172.0.0.1 -p 11259 -t UDP_STREAM -l 300 -- -m 1400 #第四台
      5. netperf -H 172.0.0.1 -p 11260 -t UDP_STREAM -l 300 -- -m 1400 #第五台
      6. netperf -H 172.0.0.1 -p 11261 -t UDP_STREAM -l 300 -- -m 1400 #第六台
      7. netperf -H 172.0.0.1 -p 11262 -t UDP_STREAM -l 300 -- -m 1400 #第七台
      8. netperf -H 172.0.0.1 -p 11263 -t UDP_STREAM -l 300 -- -m 1400 #第八台

    2.3. 测试发方向

    1. 在所有陪练机内启动 1 个 netserver 进程,-p 指定端口。

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

       
      1. netperf -H 172.0.0.2 -p 11256 -t UDP_STREAM -l 300 -- -m 1 #第一台
      2. netperf -H 172.0.0.3 -p 11256 -t UDP_STREAM -l 300 -- -m 1 #第二台
      3. netperf -H 172.0.0.4 -p 11256 -t UDP_STREAM -l 300 -- -m 1 #第三台
      4. netperf -H 172.0.0.5 -p 11256 -t UDP_STREAM -l 300 -- -m 1 #第四台
      5. netperf -H 172.0.0.6 -p 11256 -t UDP_STREAM -l 300 -- -m 1 #第五台
      6. netperf -H 172.0.0.7 -p 11256 -t UDP_STREAM -l 300 -- -m 1 #第六台
      7. netperf -H 172.0.0.8 -p 11256 -t UDP_STREAM -l 300 -- -m 1 #第七台
      8. netperf -H 172.0.0.9 -p 11256 -t UDP_STREAM -l 300 -- -m 1 #第八台

      如果需要测试 bps,上述命令应该为:

       
      1. netperf -H 172.0.0.2 -p 11256 -t UDP_STREAM -l 300 -- -m 1400 #第一台
      2. netperf -H 172.0.0.3 -p 11256 -t UDP_STREAM -l 300 -- -m 1400 #第二台
      3. netperf -H 172.0.0.4 -p 11256 -t UDP_STREAM -l 300 -- -m 1400 #第三台
      4. netperf -H 172.0.0.5 -p 11256 -t UDP_STREAM -l 300 -- -m 1400 #第四台
      5. netperf -H 172.0.0.6 -p 11256 -t UDP_STREAM -l 300 -- -m 1400 #第五台
      6. netperf -H 172.0.0.7 -p 11256 -t UDP_STREAM -l 300 -- -m 1400 #第六台
      7. netperf -H 172.0.0.8 -p 11256 -t UDP_STREAM -l 300 -- -m 1400 #第七台
      8. netperf -H 172.0.0.9 -p 11256 -t UDP_STREAM -l 300 -- -m 1400 #第八台

    2.4. 分析测试结果

    最终发送端每个 netperf 进程会输出如下结果,第一条数据行为发包信息概览如下。

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

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

    字段数据含义
    124928 缓冲区大小
    1 数据包大小(Byte)
    10.00 测试时间(s)
    4532554 数据包成功数
    0 失败数
    3.63 网络吞吐量(Mbit/s)

    PPS = 数据包成功数/测试时间

    通常我们建议在 server 端运行 sar 来统计实际收到的包并作为实际结果,具体命令为: sar -n DEV 1 320

    3. 使用 iperf3 工具测试网络性能

    3.1. 介绍工具相关参数

    iperf3 安装完成后,在对应的 src 的。以下为工具的主要参数。

    工具名称 工具说明 主要参数 参数说明
    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 间调度。

    3.2. 测试收方向

    1. 在测试机中以 server 模式启动 iperf3 进程,-p 指定不同端口:

       
      1. iperf3 -s -i 1 -p 16001
      2. iperf3 -s -i 1 -p 16002
      3. iperf3 -s -i 1 -p 16003
      4. iperf3 -s -i 1 -p 16004
      5. iperf3 -s -i 1 -p 16005
      6. iperf3 -s -i 1 -p 16006
      7. iperf3 -s -i 1 -p 16007
      8. iperf3 -s -i 1 -p 16008
    2. 在陪练机中以 client 模式启动 iperf3 进程,分别指定到测试机的不同端口。

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

    3.3. 测试发方向

    1. 在每个陪练机中以 server 模式启动 1 个 iperf3 进程,-p 指定端口。

       
      1. iperf3 -s -i 1 -p 16001
    2. 在测试机中以 client 模式启动 8 个 iperf3 进程,-c 指定为各个陪练机的 IP 地址。

       
      1. iperf3 -u -l 16 -b 100m -t 120 -c 172.0.0.2 -i 1 -p 16001 -A 1
      2. iperf3 -u -l 16 -b 100m -t 120 -c 172.0.0.3 -i 1 -p 16001 -A 2
      3. iperf3 -u -l 16 -b 100m -t 120 -c 172.0.0.4 -i 1 -p 16001 -A 3
      4. iperf3 -u -l 16 -b 100m -t 120 -c 172.0.0.5 -i 1 -p 16001 -A 4
      5. iperf3 -u -l 16 -b 100m -t 120 -c 172.0.0.6 -i 1 -p 16001 -A 5
      6. iperf3 -u -l 16 -b 100m -t 120 -c 172.0.0.7 -i 1 -p 16001 -A 6
      7. iperf3 -u -l 16 -b 100m -t 120 -c 172.0.0.8 -i 1 -p 16001 -A 7
      8. iperf3 -u -l 16 -b 100m -t 120 -c 172.0.0.9 -i 1 -p 16001 -A 8

    3.4. 分析测试结果

    最终发送端每个 iperf3 进程会输出如下结果,第一条数据行为发包信息概览如下。

     
    1. [ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams
    2. [ 4] 0.00-10.00 sec 237 MBytes 199 Mbits/sec 0.027 ms 500/30352 (1.6%)
    3. [ 4] Sent 30352 datagrams

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

    字段数据含义
    237 传送的总数据量
    199 带宽大小
    0.027 波动率
    500/30352 丢包/总报文数
    1.6% 丢包率

    PPS = 对端收到的包/时间

    通常我们建议在 server 端运行 sar 来统计实际收到的包并作为实际结果,具体命令为: sar -n DEV 1 320

  • 相关阅读:
    细细审视的你代码:异步消息处理
    [C++] 加速make的编译
    分析一下12306网站
    [Linux] 通过shell给unix socket发送数据
    shell中如何设置自增的变量
    多系统的 启动 顺序 修改
    对apk包进行odex优化的目的
    Android之所以不需要关闭后台运行程序 的 理由
    shell中如何设置自增的变量
    eclipse 小结
  • 原文地址:https://www.cnblogs.com/kcxg/p/10904189.html
Copyright © 2011-2022 走看看