
# 云服务器网络性能测试指导
#### 操作场景
本文介绍如何测试云服务器网络数据面性能，包含如下内容：
- [测试网络时延（ping、udp、tcp时延）]：评估云服务器网络时延情况。
- [测试接收带宽]：评估云服务器接收带宽情况。
- [测试发送带宽]：评估云服务器发送带宽情况。
- [测试接收PPS]：评估云服务器接收PPS情况。
- [测试发送PPS]：评估云服务器发送PPS情况。
- [测试新建连接]：评估云服务器新建连接情况。
- [测试并发连接]：评估云服务器并发连接情况。
 
#### 前提条件
- 准备2台规格一致的云服务器。
- 云服务器运行状态正常。
- 云服务器已绑定弹性公网IP。
- 云服务器内部已安装wget、tar工具，如果没有安装请执行以下命令进行安装：
  ```
  yum install -y wget tar
  ```
  
 
 #### 测试网络时延（ping、udp、tcp时延）
1. 安装和编译测试工具qperf。 
   测试网络时延，需要分别在2台云服务器上安装工具。
   1. 远程登录云服务器实例。 详细操作，请参见[Linux BMS登录方式概述](https://support.huaweicloud.com/usermanual-bms/bms_umn_0011.html)。
      
   
   2. 执行以下命令，下载工具安装包。 HCE OS、CentOS等操作系统：
      ```
      sudo yum install qperf
      ```
      Ubuntu操作系统：
      ```
      sudo apt install qperf
      ```
      
   
   3. 测试工具。 安装完成后，在一台云服务器上执行以下命令，使其作为服务器（server）端。
      ```
      sudo qperf
      ```
      然后在另一台作为客户（client）端的云服务器上通过以下命令进行连接并运行测试。
      ```
      qperf [服务器地址] tcp_lat udp_lat  -t 20 -m 64 -vvu
      ```
      
   
   
   
   
2. 测试网络时延。 
   1. 在server端，执行以下命令，运行测试工具。
      ```
      qperf &
      ```
      
   
   2. 在client端，执行以下命令。
      ```
      qperf [server端服务器ip地址] -t 60  tcp_lat udp_lat   -m 64  -vvu
      ```
      其中，-t为测试时长，单位为s。
      
   
   3. 在client端，执行以下命令。
      ```
      ping [server端服务器ip地址] -c 120
      ```
      其中，-c 为测试时长，单位为s。
      
   
   
   测试结束后qperf执行语句以返回的latency为测试结果，ping执行语句以rtt中的avg时延为测试结果，并分别测试三次取平均值。
   如果测试正常完成，过程中未报错且软件不退出，表示测试结果符合预期。
   
   
3. 查看网络时延测试结果。 
   在输出结果中，如下指标用于评估云服务器的网络时延：
   - tcp时延：qperf执行语句tcp_lat中的latency
   
   - udp时延：udp_lat中的latency
   
   - ping时延：ping执行语句中rtt中的avg时延
   
   
   示例以HCE OS 2.0操作系统为例介绍网络时延测试的结果：
   表1网络时延测试的结果记录 
   |  云服务器操作系统  | HCE OS 2.0 |
   |---|---|
   | **Flavor** | xlarge     |
   | **规格**     | 4U8G       |
   | **tcp时延**  | 23 us      |
   | **udp时延**  | 24 us      |
   | **ping时延** | 0.08 ms    |
      
   
   
 
 #### 测试接收带宽
1. 安装和编译测试工具netperf。 
   测试接收带宽，需要分别在2台云服务器上安装工具。
   1. 远程登录云服务器实例。 详细操作，请参见[Linux BMS登录方式概述](https://support.huaweicloud.com/usermanual-bms/bms_umn_0011.html)。
      
   
   2. 执行以下命令，下载工具安装包。
      - 方法一： HCE OS、CentOS等操作系统：
        ```
        sudo yum install netperf
        ```
        Ubuntu操作系统：
        ```
        sudo apt install netperf
        ```
        
      
      - 方法二：
        ```
        wget https://github.com/HewlettPackard/netperf/archive/refs/tags/netperf-2.7.0.zip
        unzip netperf-2.7.0.zip
        cd netperf-netperf-2.7.0/
        ./configure && make && make install
        ```
        
       
   
   3. 测试工具。 安装完成后，在一台云服务器上执行以下命令，使其作为服务器（server）端。
      ```
      netperf -p 5001
      ```
      然后在另一台作为客户（client）端的云服务器上通过以下命令进行连接并运行测试。
      ```
      netperf -H [服务器ip地址] -t TCP_STREAM -l 15  -p 5001 -- -m 1440
      ```
      其中，-l为测试时长，单位为s。
      图1工具测试结果   
      ![](https://support.huaweicloud.com/bestpractice-bms/zh-cn_image_0000002698537367.png "点击放大") 
   
   
   
   
2. 测试接收带宽。 
   1. 在server端，执行以下命令。
      ```
      for i in `seq 5001 5128`; do netserver  -p $i & done
      ```
      其中，-p为测试端口，打流的条数通常为云服务器队列数的2\~3倍。
      
   
   2. 在client端，执行以下命令。
      ```
      for i in `seq 5001 5128`; do netperf -H [server端服务器ip地址] -t TCP_STREAM -l 300  -p $i -- -m 1440 & done
      ```
      
   
   3. 在server端，执行以下命令。
      ```
      sar -n DEV 1 180
      ```
      表示每1秒采集一次，共采集180s。
      
   
   
   测试结束后，观测云服务器接收带宽指标，共测试三次取平均值。
   如果测试正常完成，过程中未报错且软件不退出，表示测试结果符合预期。
   
   
3. 查看接收带宽测试结果。 
   在输出结果中，关注server端服务器的接收带宽结果。
   Average中的rxkB/s值为接收带宽temp，将结果换算成Gbps，换算公式temp/1000000 \*8。
   示例以HCE OS 2.0操作系统为例介绍接收带宽测试的结果：
   表2接收带宽测试的结果记录 
   |  云服务器操作系统  | HCE OS 2.0 |
   |---|---|
   | **Flavor** | xlarge     |
   | **规格**     | 4U8G       |
   | **接收带宽**   | 11Gbps     |
      
   
   
 
 #### 测试发送带宽
1. 安装和编译测试工具netperf。 
   测试发送带宽，需要分别在2台云服务器上安装工具。
   1. 远程登录云服务器实例。 详细操作，请参见[Linux BMS登录方式概述](https://support.huaweicloud.com/usermanual-bms/bms_umn_0011.html)。
      
   
   2. 执行以下命令，下载工具安装包。
      - 方法一： HCE OS、CentOS等操作系统：
        ```
        sudo yum install netperf
        ```
        Ubuntu操作系统：
        ```
        sudo apt install netperf
        ```
        
      
      - 方法二：
        ```
        wget https://github.com/HewlettPackard/netperf/archive/refs/tags/netperf-2.7.0.zip
        unzip netperf-2.7.0.zip
        cd netperf-netperf-2.7.0/
        ./configure && make && make install
        ```
        
       
   
   3. 测试工具。 安装完成后，在一台云服务器上执行以下命令，使其作为服务器（server）端。
      ```
      netperf -p 5001
      ```
      然后在另一台作为客户（client）端的云服务器上通过以下命令进行连接并运行测试。
      ```
      netperf -H [服务器ip地址] -t TCP_STREAM -l 15  -p 5001 -- -m 1440
      ```
      其中，-l为测试时长，单位为s。
      图2工具测试结果   
      ![](https://support.huaweicloud.com/bestpractice-bms/zh-cn_image_0000002698537367.png "点击放大") 
   
   
   
   
2. 测试发送带宽。 
   1. 在client端，执行以下命令。
      ```
      for i in `seq 5001 5128`; do netserver  -p $i & done
      ```
      其中，-p为测试端口，打流的条数通常为云服务器队列数的2\~3倍。
      
   
   2. 在server端，执行以下命令。
      ```
      for i in `seq 5001 5128`; do netperf -H [client端服务器ip地址] -t TCP_STREAM -l 300  -p $i -- -m 1440 & done
      ```
      
   
   3. 在server端，执行以下命令。
      ```
      sar -n DEV 1 180
      ```
      表示每1秒采集一次，共采集180s。
      
   
   
   测试结束后，观测云服务器发送带宽指标，共测试三次取平均值。
   如果测试正常完成，过程中未报错且软件不退出，表示测试结果符合预期。
   
   
3. 查看发送带宽测试结果。 
   在输出结果中，关注server端服务器的发送带宽结果。
   Average中的txkB/s值为接收带宽temp，可以将结果换算成Gbps，换算公式temp/1000000 \*8。
   示例以HCE OS 2.0操作系统为例介绍发送带宽测试的结果：
   表3发送带宽测试的结果记录 
   |  云服务器操作系统  | HCE OS 2.0 |
   |---|---|
   | **Flavor** | xlarge     |
   | **规格**     | 4U8G       |
   | **发送带宽**   | 11Gbps     |
      
   
   
 
 #### 测试接收PPS
1. 安装和编译测试工具iperf。 
   测试接收PPS，需要分别在2台云服务器上安装工具。
   1. 远程登录云服务器实例。 详细操作，请参见[Linux BMS登录方式概述](https://support.huaweicloud.com/usermanual-bms/bms_umn_0011.html)。
      
   
   2. 执行以下命令，下载工具安装包。
      - 方法一： HCE OS、CentOS等操作系统：
        ```
        sudo yum install iperf3
        ```
        Ubuntu操作系统：
        ```
        sudo apt-get install iperf3
        ```
        
      
      - 方法二：
        ```
        wget --no-check-certificate https://codeload.github.com/esnet/iperf/zip/master -O iperf3.zip
        unzip iperf3.zip
        cd iperf-master/
        ./configure && make && make install
        ```
        
       
   
   3. 测试工具。 安装完成后，在一台云服务器上执行以下命令，使其作为服务器（server）端。
      ```
      iperf3 -s -p 5001
      ```
      然后在另一台作为客户（client）端的云服务器上通过以下命令进行连接并运行测试。
      ```
      iperf3 -c  [服务器ip地址]  -u -t 300 -l 64 -p 5001
      ```
      其中，-u为udp测试打流，-t为测试时长，单位为s，-p是打流端口号。
      图3工具测试结果   
      ![](https://support.huaweicloud.com/bestpractice-bms/zh-cn_image_0000002668777592.png "点击放大") 
   
   
   
   
2. 测试接收PPS。 
   1. 在server端，执行以下命令。
      ```
      for i in `seq 5001 5128`; do iperf3 -s -p $i  > /dev/null 2>&1 & done
      ```
      其中，-p为测试端口，打流的条数通常为云服务器队列数的2\~3倍。
      
   
   2. 在client端，执行以下命令。
      ```
      for i in `seq 5001 5128`; do iperf3 -c  [server端服务器ip地址] -b 0M -u -t 300 -l 64 -p $i   > /dev/null 2>&1 & done
      ```
      
   
   3. 在server端，执行以下命令。
      ```
      sar -n DEV 1 180
      ```
      表示每1秒采集一次，共采集180s。
      
   
   
   测试结束后，观测云服务器接收PPS指标，共测试三次取平均值。
   如果测试正常完成，过程中未报错且软件不退出，表示测试结果符合预期。
   
   
3. 查看接收PPS测试结果。 
   在输出结果中，关注server端服务器的接收PPS结果。
   Average中的rxpck/s 值为接收PPS（单位：个）。
   示例以HCE OS 2.0操作系统为例介绍接收PPS测试的结果：
   表4接收PPS测试的结果记录 
   |  云服务器操作系统  | HCE OS 2.0 |
   |---|---|
   | **Flavor** | xlarge     |
   | **规格**     | 4U8G       |
   | **接收PPS**  | 1001017.45 |
      
   
   
 
 #### 测试发送PPS
1. 安装和编译测试工具iperf。 
   测试发送PPS，需要分别在2台云服务器上安装工具。
   1. 远程登录云服务器实例。 详细操作，请参见[Linux BMS登录方式概述](https://support.huaweicloud.com/usermanual-bms/bms_umn_0011.html)。
      
   
   2. 执行以下命令，下载工具安装包。
      - 方法一： HCE OS、CentOS等操作系统：
        ```
        sudo yum install iperf3
        ```
        Ubuntu操作系统：
        ```
        sudo apt-get install iperf3
        ```
        
      
      - 方法二：
        ```
        wget --no-check-certificate https://codeload.github.com/esnet/iperf/zip/master -O iperf3.zip
        unzip iperf3.zip
        cd iperf-master/
        ./configure && make && make install
        ```
        
       
   
   3. 测试工具。 安装完成后，在一台云服务器上执行以下命令，使其作为服务器（server）端。
      ```
      iperf3 -s -p 5001
      ```
      然后在另一台作为客户（client）端的云服务器上通过以下命令进行连接并运行测试。
      ```
      iperf3 -c  [服务器ip地址]  -u -t 300 -l 64 -p 5001
      ```
      其中，-u为udp测试打流，-t为测试时长，单位为s，-p是打流端口号。
      图4工具测试结果   
      ![](https://support.huaweicloud.com/bestpractice-bms/zh-cn_image_0000002668777592.png "点击放大") 
   
   
   
   
2. 测试发送PPS。 
   1. 在client端，执行以下命令。
      ```
      for i in `seq 5001 5128`; do iperf3 -s -p $i   > /dev/null 2>&1 & done
      ```
      其中，-p为测试端口，打流的条数通常为云服务器队列数的2\~3倍。
      
   
   2. 在server端，执行以下命令。
      ```
      for i in `seq 5001 5128`; do iperf3 -c  [client端服务器ip地址] -b 0M -u -t 300 -l 64 -p $i   > /dev/null 2>&1 & done
      ```
      
   
   3. 在server端，执行以下命令。
      ```
      sar -n DEV 1 180
      ```
      表示每1秒采集一次，共采集180s。
      
   
   
   测试结束后，观测云服务器发送PPS指标，共测试三次取平均值。
   如果测试正常完成，过程中未报错且软件不退出，表示测试结果符合预期。
   
   
3. 查看发送PPS测试结果。 
   在输出结果中，关注server端服务器的发送PPS结果。
   Average中的rxpck/s值为发送PPS（单位：个）。
   示例以HCE OS 2.0操作系统为例介绍发送PPS测试的结果：
   表5发送PPS测试的结果记录 
   |  云服务器操作系统  | HCE OS 2.0 |
   |---|---|
   | **Flavor** | xlarge     |
   | **规格**     | 4U8G       |
   | **发送PPS**  | 1001028.23 |
      
   
   
 
 #### 测试新建连接
1. 安装和编译测试工具netperf。 
   测试新建连接，需要分别在2台云服务器上安装工具。
   1. 远程登录云服务器实例。 详细操作，请参见[Linux BMS登录方式概述](https://support.huaweicloud.com/usermanual-bms/bms_umn_0011.html)。
      
   
   2. 执行以下命令，下载工具安装包。
      - 方法一： HCE OS、CentOS等操作系统：
        ```
        sudo yum install netperf
        ```
        Ubuntu操作系统：
        ```
        sudo apt install netperf
        ```
        
      
      - 方法二：
        ```
        wget https://github.com/HewlettPackard/netperf/archive/refs/tags/netperf-2.7.0.zip
        unzip netperf-2.7.0.zip
        cd netperf-netperf-2.7.0/
        ./configure && make && make install
        ```
        
       
   
   3. 测试工具。 安装完成后，在一台云服务器上执行以下命令，使其作为服务器（server）端。
      ```
      netperf -p 5001
      ```
      然后在另一台作为客户（client）端的云服务器上通过以下命令进行连接并运行测试。
      ```
      netperf -H [服务器ip地址] -t TCP_STREAM -l 15  -p 5001 -- -m 1440
      ```
      其中，-l为测试时长，单位为s。
      图5工具测试结果   
      ![](https://support.huaweicloud.com/bestpractice-bms/zh-cn_image_0000002698537367.png "点击放大") 
   
   
   
   
2. 测试新建连接。 
   1. 在server端，执行以下命令。
      ```
      for i in `seq 9001 9256`; do netserver  -p $i & done
      ```
      其中，-p为测试端口。
      
   
   2. 在client端，执行以下命令。
      ```
      for i in `seq 9001 9256`; do netperf -H [server端服务器ip地址] -t TCP_CRR -l 20  -p $i -- -r 64 2>&1 >>tcp_crr_22.log & done
      ```
      
   
   3. 在client端，执行以下命令。
      ```
      cat tcp_crr_22.log |grep 20 |awk '{print $6}' |awk '{sum+= $1};END {print sum}'
      ```
      
   
   
   client端执行步骤[2.b]的时间\>20s后，在client端查看日志，打印出的数据即为新建连接测试结果。
   如果测试正常完成，过程中未报错且软件不退出，表示测试结果符合预期。
   
   
3. 查看新建连接测试结果。 
   在输出结果中，关注client端日志，打印出的数据即为新建连接。
   Average中的rxpck/s值为发送PPS（单位：个）。
   示例以HCE OS 2.0操作系统为例介绍新建连接测试的结果：
   表6新建连接测试的结果记录 
   |  云服务器操作系统  | HCE OS 2.0 |
   |---|---|
   | **Flavor** | xlarge     |
   | **规格**     | 4U8G       |
   | **新建连接**   | 21400.6    |
      
   
   
 
 #### 测试并发连接
1. 安装和注册二进制文件server、client工具。 
   测试并发连接，需要分别在2台云服务器上安装工具。
   1. 远程登录云服务器实例。 详细操作，请参见[Linux BMS登录方式概述](https://support.huaweicloud.com/usermanual-bms/bms_umn_0011.html)。
      
   
   2. 执行以下命令，下载工具安装包。 开源工具：
      ```
      wget https://github.com/ideawu/c1000k
      ```
      
   
   3. 测试工具。 安装完成后，在两台云服务器上分别执行以下命令。
      ```
      cd  c1000k
      make
      chmod 777 client server
      ```
      
   
   
   
   
2. 测试并发连接。 
   1. 在server端，执行以下测试步骤。
      1. 执行以下命令，查看云服务器中的最大连接数。
         ```
         ulimit -n
         ```
         
      
      2. 执行以下命令，修改最大连接数上限。
         ```
         sysctl -w fs.nr_open=15000000
         sysctl -w fs.file-max=15000000
         ulimit -n 15000000
         echo "fs.nr_open=15000000" >> /etc/sysctl.conf
         echo "fs.file-max=15000000" >> /etc/sysctl.conf
         echo "* soft nofile 15000000" >> /etc/security/limits.d/huawei-nofile.conf
         echo "* hard nofile 15000000" >> /etc/security/limits.d/huawei-nofile.conf
         echo "* soft nofile 15000000" >> /etc/security/limits.d/20-nproc.conf
         echo "* hard nofile 15000000" >> /etc/security/limits.d/20-nproc.conf
         echo "* soft nofile 15000000" >> /etc/security/limits.conf
         echo "* hard nofile 15000000" >> /etc/security/limits.conf
         ```
         
      
      3. 执行以下命令。
         ```
         for port in $(seq 2000 2000 64000); do
             ./server $port &
         done
         ```
         
       
   
   2. 在client端，执行以下测试步骤。
      1. 执行以下命令，查看云服务器中的最大连接数。
         ```
         ulimit -n
         ```
         
      
      2. 执行以下命令，修改最大连接数上限。
         ```
         sysctl -w fs.nr_open=15000000
         sysctl -w fs.file-max=15000000
         ulimit -n 15000000
         echo "fs.nr_open=15000000" >> /etc/sysctl.conf
         echo "fs.file-max=15000000" >> /etc/sysctl.conf
         echo "* soft nofile 15000000" >> /etc/security/limits.d/huawei-nofile.conf
         echo "* hard nofile 15000000" >> /etc/security/limits.d/huawei-nofile.conf
         echo "* soft nofile 15000000" >> /etc/security/limits.d/20-nproc.conf
         echo "* hard nofile 15000000" >> /etc/security/limits.d/20-nproc.conf
         echo "* soft nofile 15000000" >> /etc/security/limits.conf
         echo "* hard nofile 15000000" >> /etc/security/limits.conf
         ```
         
      
      3. 执行以下命令。
         ```
         for port in $(seq 2000 2000 64000); do
             ./client <server_ip> $port &
         done
         ```
         
       
   
   3. 在server端，重新打开一个登录窗口，执行以下命令进行观测。
      ```
      watch "ss -s"
      ```
      当数据达到最大，且短时间不变即为最大连接。
      
   
   
   如果测试正常完成，过程中未报错且软件不退出，表示测试结果符合预期。
   
   
3. 查看并发连接测试结果。 
   在输出结果中，关注TCP连接数，数据达到最大，且短时间不变即为最大连接，单位：个。
   示例以HCE OS 2.0操作系统为例介绍并发连接测试的结果：
   表7并发连接测试的结果记录 
   |  云服务器操作系统  | HCE OS 2.0 |
   |---|---|
   | **Flavor** | xlarge     |
   | **规格**     | 4U8G       |
   | **并发连接**   | 150w       |
      
   
   
 
