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

  • 相关阅读:
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    微信小程序TodoList
    C语言88案例-找出数列中的最大值和最小值
    C语言88案例-使用指针的指针输出字符串
  • 原文地址:https://www.cnblogs.com/kcxg/p/10904189.html
Copyright © 2011-2022 走看看