# Linux云服务器网络性能测试方法
手把手教您用netperf工具、iperf3工具，测试弹性云服务器间网络性能。主要包括"测试准备"、"TCP带宽测试"、"UDP PPS测试"和"时延测试"。
#### 背景知识
- 被测机：被压力测试网络性能的弹性云服务器，可作为netperf测试中的client端（发送端）或server端（接收端）。
- 辅助云服务器：弹性云服务器，用于netperf测试中的client端（发送端）或server端（接收端），用于与被测机建立连接，传递测试数据。
- 测试工具常用参数说明如[表1]、[表2]所示。
   表1netperf工具常用参数说明 
  | 参数 | 参数说明                      |
  |:---|:---|
  | -p   | 端口号                      |
  | -H   | 接收端IP地址                    |
  | -t  | 发包协议类型，测带宽时参数值为"TCP_STREAM" |
  | -l    | 测试时长                      |
  | -m   | 数据包大小，测试带宽时建议设置为"1440"     |
     
   表2iperf3工具常用参数说明 
  | 参数  | 参数说明                                                                                                                |
  |:---|:---|
  | -p | 端口号                                                                                                                   |
  | -c | 接收端IP地址                                                                                                               |
  | -u | UDP报文                                                                                                                |
  | -b | 发送带宽                                                                                                                 |
  | -t | 测试时长                                                                                                                  |
  | -l  | 数据包大小，测试PPS时建议设置为"16"                                                                                                |
  | -A  | iperf3占用的cpu编号。 本文示例中假设ECS最大为16vcpu，实际中根据ECS CPU数量进行循环。如ECS为8vcpu，则-A范围0\~7。 |
     
  
 
#### 测试准备
1. 准备弹性云服务器。 
   要求：被测机与辅助弹性云服务器的类型、规格需保持一致，并在同一云服务器组，遵循反亲和部署。
   表3环境准备 
   | 类型      | 数量 | 镜像                    | 规格         | IP地址                      |
   |:---|:---|:---|:---|:---|
   | 被测机    | 1台  | CentOS 7.4 64bit（推荐） | -          | 192.168.2.10            |
   | 辅助云服务器 | 2台  | CentOS 7.4 64bit（推荐）  | vCPU：8核及以上 | 192.168.2.11、192.168.2.12 |
      
   
   
2. 准备测试工具。 
   要求：需分别在被测机和辅助云服务器上安装测试工具netperf、iperf3、sar。安装方法如[表4]所示。
    表4安装测试工具 
   | 测试工具     | 安装方法                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
   |:---|:---|
   | netperf | 1. 执行以下命名，安装gcc。 ``` yum -y install unzip gcc gcc-c++ ```   2. 执行以下命令，下载netperf。 ``` wget https://github.com/HewlettPackard/netperf/archive/refs/tags/netperf-2.7.0.zip ```   3. 执行以下命令，解压并安装netperf。 ``` unzip netperf-2.7.0.zip cd netperf-netperf-2.7.0/ ./configure && make && make install ```    |
   | iperf3   | 1. 执行以下命令，下载iperf3。 ``` wget --no-check-certificate https://codeload.github.com/esnet/iperf/zip/master -O iperf3.zip ```   2. 执行以下命令，解压并安装iperf3。 ``` unzip iperf3.zip cd iperf-master/ ./configure && make && make install ```                                                                                                                                                    |
   | sar     | 执行以下命令，安装sar。 ``` yum -y install sysstat ```                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
      
   
   
 
#### TCP带宽测试（使用netperf工具）
采用多流进行测试，本文以64条流为例，均分到2个辅助云服务器上，其他流数以此类推。
![](https://support.huaweicloud.com/ecs_faq/public_sys-resources/note_3.0-zh-cn.png)
TCP带宽测试采用多流模型：
- 当测试TCP发送带宽时，采用一对多模型，即保证接收端能力足够。
- 当测试TCP接收带宽时，采用多对一模型，即保证发送端能力足够。
 
1. 测试TCP发送带宽。 
   1. 分别在"所有辅助云服务器"中执行以下命令，启动netserver进程。
      ```
      #!/bin/bash
      for port in {1..32}; do
          netserver -p $((12000 + port)) > /dev/null 2>&1 &
      done
      ```
      
   
   2. 在"被测机"中执行以下命令，启动netperf进程，分别指定到辅助云服务器的不同netserver端口。其中，netperf工具的常用参数说明请参见[表1]。
      ```
      ##IP地址对应第一台辅助云服务器：
      #!/bin/bash
      server_ip=192.168.2.11 #测试机私网IP地址
      for port in {1..32}; do
          netperf -H ${server_ip} -p $((12000 + port))  -t TCP_STREAM  -l 300 -- -m 1440 > netperf_${server_ip}_$((12000 + port)).log 2>&1 &
      done
       
      ##IP地址对应第二台辅助云服务器：
      #!/bin/bash
      server_ip2=192.168.2.12 #测试机私网IP地址
      for port in {1..32}; do
          netperf -H ${server_ip2} -p $((12000 + port))  -t TCP_STREAM  -l 300 -- -m 1440 > netperf_${server_ip2}_$((12000 + port)).log 2>&1 &
      done
      ```
      
   
   
   
   
2. 测试TCP接收带宽。 
   1. 在"被测机"中执行以下命令，启动netserver进程。
      ```
      #!/bin/bash
      for port in {1..64}; do
          netserver -p $((12000 + port)) > /dev/null 2>&1 &
      done
      ```
      
   
   2. 执行以下命令，分别在"辅助云服务器"中启动netperf进程。
      ```
      ##登录辅助云服务器1：
      #!/bin/bash
      server_ip=192.168.2.10 #测试机私网IP地址
      for port in {1..32}; do
          netperf -H ${server_ip} -p $((12000 + port))  -t TCP_STREAM  -l 300 -- -m 1440  > netperf_${server_ip}_$((12000 + port)).log  2>&1 &
      done
      ##登录辅助云服务器2：
      #!/bin/bash
      server_ip=192.168.2.10 #测试机私网IP地址
      for port in {33..64}; do
          netperf -H ${server_ip} -p $((12000 + port))  -t TCP_STREAM  -l 300 -- -m 1440  > netperf_${server_ip}_$((12000 + port)).log  2>&1 &
      done
      ```
      
   
   
   
   
3. 解析TCP测试结果。 
   测试结束后，发送端netperf进程输出结果如[图1]所示，最终结果为所有netperf进程测试结果之和。
   图1发送端进程输出结果   
   ![](https://support.huaweicloud.com/ecs_faq/zh-cn_image_0115873247.png)
   ![](https://support.huaweicloud.com/ecs_faq/public_sys-resources/note_3.0-zh-cn.png)
   由于netperf进程众多，为方便统计，强烈建议测试指令输入完毕后，直接在被测弹性云服务器上用sar查看测试数据，命令为：
   ```
   sar -n DEV 1 60
   ```
   
   
 
#### UDP PPS测试（使用iperf3工具）
1. 测试UDP发送PPS。 
   1. 登录辅助云服务器。
   
   2. 分别在所有"辅助云服务器"中执行以下命令，启动server进程。
      ```
      #!/bin/bash
      for port in {1..32}; do
          iperf3 -s -p $((12000 + port)) > /dev/null 2>&1  &
      done
      ```
      
   
   3. 在"被测机"中执行如下命令，启动client进程。其中，iperf3工具的常用参数说明请参见[表2]。
      ```
      ##辅助云服务器1：
      #!/bin/bash
      for port in {1..32}; do
      server_ip=192.168.2.11 #测试机私网IP地址
      iperf3 -c ${server_ip} -p $((12000 + port)) -u -b 0M -t 300 -l 64 -i 30 --logfile iperf_${server_ip}_$((12000 + port)).log > /dev/null 2>&1 &
      done
       
      ##辅助云服务器2：
      #!/bin/bash
      for port in {1..32}; do
      server_ip2=192.168.2.12 #测试机私网IP地址
      iperf3 -c ${server_ip2} -p $((12000 + port)) -u -b 0M -t 300 -l 64 -i 30 --logfile iperf_${server_ip2}_$((12000 + port)).log > /dev/null 2>&1 &
       done
      ```
      
   
   
   
   
2. 测试UDP接收PPS。 
   1. 执行以下命令，在"被测机"中启动server进程。其中，iperf3工具的常用参数说明请参见[表2]。
      ```
      #!/bin/bash
      for port in {1..64}; do
          iperf3 -s -p $((12000 + port))  > /dev/null 2>&1 &
      done
      ```
      
   
   2. 分别在"辅助云服务器"中，执行以下命令，启动client进程。其中，iperf3工具的常用参数说明请参见[表2]。
      ```
      ##登录辅助云服务器1：
      #!/bin/bash
      for port in {1..32}; do
      server_ip=192.168.2.10 #测试机私网IP地址
      iperf3 -c ${server_ip} -p $((12000 + port)) -u -b 0M -t 300 -l 64 -i 30 --logfile iperf_${server_ip}_$((12000 + port)).log > /dev/null 2>&1 &
      done
      ##登录辅助云服务器2：
      #!/bin/bash
      for port in {33..64}; do
      server_ip=192.168.2.10 #测试机私网IP地址
      iperf3 -c ${server_ip} -p $((12000 + port)) -u -b 0M -t 300 -l 64 -i 30 --logfile iperf_${server_ip}_$((12000 + port)).log > /dev/null 2>&1 &
      done
      ```
      
   
   
   
   
3. 解析UDP PPS测试结果。 
   UDP PPS测试结果示例如[图2]所示。
   图2UDP PPS测试结果   
   ![](https://support.huaweicloud.com/ecs_faq/zh-cn_image_0115874559.png "点击放大")
   ![](https://support.huaweicloud.com/ecs_faq/public_sys-resources/note_3.0-zh-cn.png)
   由于iperf3进程众多，为方便统计，强烈建议测试指令输入完毕后，直接在被测弹性云服务器上用sar查看测试数据，命令为：
   ```
   sar -n DEV 1 60
   ```
   
   
 
#### 时延测试
1. 执行以下命令，在"被测机"中启动qperf进程。 
   ```
   qperf &
   ```
   
   
2. 登录辅助云服务器1，并执行以下命令，进行时延测试。 
   ```
   qperf 192.168.2.10 -m 64 -t 60 -vu udp_lat
   ```
   测试完后屏幕显示结果的latency字段就是ECS间时延。
   
   
 
#### 相关参考
- [云服务器网络优化方案](https://support.huaweicloud.com/ecs_faq/ecs_faq_0037.html)
- [如何修改网络接口的MTU？](https://support.huaweicloud.com/ecs_faq/ecs_faq_3320.html)
- [如何设置镜像的网卡多队列属性？](https://support.huaweicloud.com/ims_faq/ims_faq_0030.html)
 
