You need to enable JavaScript to run this app.
导航

使用iPerf3测试网络性能

最近更新时间2023.12.07 17:11:01

首次发布时间2022.03.25 07:32:09

本文介绍如何使用iPerf3测试云服务器的网络性能。

iPerf3介绍

iPerf3是用于测试IP网络上最大可用带宽的工具,支持调节时序、缓冲区、协议(TCP,UDP,SCTP与IPv4和IPv6)有关的各种参数。对于每次测试,它都会详细的报告网络带宽,延迟抖动和数据包丢失率。

操作步骤

说明

本文的测试结果仅作为参考,不代表云服务器的真实最优性能。

步骤一:准备环境

参考 购买云服务器,准备被测试机器和辅助测试机器。本文测试环境如下表所示:

ECS云服务器
云服务器信息
数量IP地址说明

被测试机器

  • 镜像:Debian 10 64位
  • 规格:ecs.ebmg2i.32xlarge

1

172.0.0.1

被压力测试网络PPS的ECS实例,在iperf3测试中可作为Client端或Server端。

辅助测试机器

  • 镜像:Debian 10 64位
  • 规格:ecs.ebmg2i.32xlarge

4

172.0.0.2 ~ 172.0.0.5

在iperf3测试中作为Client端或Server端,与测试机间建立控制连接,传递测试信息及结果。

说明

所有ECS云服务器必须在同一个安全组。

步骤二:安装iperf3

  1. 分别远程登录被测试机器和辅助测试机器,详细请参见 登录实例
  2. 在被测试机器和辅助测试机器,执行以下命令安装iperf3。
    apt update
    apt install -y iperf3
    

步骤三:测试网络性能

测试收方向

  • 被测试机器启动128个iperf3 server进程。
  • 将128个端口均分给4台辅助测试机器,每个辅助机器启动32个iperf3 client进程。
  1. 在被测试机器(172.0.0.1)上创建脚本server.sh,并添加可执行权限。

    1. 执行vim server.sh命令,创建server.sh文件。
    2. i,进入编辑模式。
    3. 在server.sh文件中,输入如下内容。
      #! /bin/bash
      
      proc_num=$1
      port_begin=12000
      ls
      for ((i=0; i<proc_num; i++))
      do
          port=$((port_begin + i))
          cpu=$((i%$1 + 1))
      
          iperf3 -s -i 1 -p $port -A $(( $cpu % $1 )) -D > /dev/null &
      done
      
      
    4. Esc退出编辑模式,然后输入:wq并回车。
    5. 执行chmod +x server.sh指令,赋予server.sh文件执行权限。
  2. 在被测试机器(172.0.0.1)上运行./server.sh 128,启动128个iperf3 server进程。

  3. 在四台辅助测试机器上创建脚本client.sh,并添加可执行权限。

    1. 执行vim client.sh命令,创建client.sh文件。
    2. i,进入编辑模式。
    3. 在client.sh文件中,输入如下内容。
      #! /bin/bash
      
      dst_ip=$1
      proc_num=$2
      port_begin=12000
      
      for ((i=0; i<proc_num; i++))
      do
          port=$((port_begin + i))
          iperf3  -c $dst_ip -u -l 16 -b 10000M -i 1 -t 3600 -p $port -A $(( $i % $2)) -P 1 > /dev/null 2>&1 &
      done
      

      说明

      4台辅助测试机器的port_begin需要递增,如:
      172.0.0.2使用12000
      172.0.0.3使用12032
      172.0.0.4使用12064
      172.0.0.5使用12096

    4. Esc退出编辑模式,然后输入:wq并回车。
    5. 执行chmod +x client.sh指令,赋予client.sh文件执行权限。
  4. 在四台辅助测试机器分别执行./client.sh 172.0.0.1 32,为每台辅助测试机器启动32个iperf3 client进程。

  5. 在被测试机器端执行sar -n DEV 1,查看测试结果。
    alt

测试发方向

  • 128个iperf server均分给4台辅助测试机器,每个辅助机器启动32个iperf server进程。

  • 被测试机器(172.0.0.1)分别向每一台辅助测试机器(172.0.0.2~172.0.0.5)启动32个iperf client进程打流,总共128个iperf client进程。

  1. 在四台辅助测试机器上创建脚本server.sh,并添加可执行权限。

    1. 执行vim server.sh命令,创建server.sh文件。
    2. i,进入编辑模式。
    3. 在server.sh文件中,输入如下内容。
      #! /bin/bash
      
      proc_num=$1
      port_begin=12000
      
      for ((i=0; i<proc_num; i++))
      do
          port=$((port_begin + i))
          cpu=$((i%$1 + 1))
      
          iperf3 -s -i 1 -p $port -A $(( $cpu % $1 )) -D > /dev/null &
      done
      
      

      说明

      4台辅助测试机器的port_begin需要递增,如:
      172.0.0.2使用12000
      172.0.0.3使用12032
      172.0.0.4使用12064
      172.0.0.5使用12096

    4. Esc退出编辑模式,然后输入:wq并回车。
    5. 执行chmod +x server.sh指令,赋予server.sh文件执行权限。
  2. 在辅助测试机器上运行./server.sh 32,启动32个iperf3 server进程。

  3. 在被测试机器上(172.0.0.1)创建脚本client.sh,并添加可执行权限。

    1. 执行vim client.sh命令,创建client.sh文件。

    2. i,进入编辑模式。

    3. 在client.sh文件中,输入如下内容。

      #! /bin/bash
      
      dst_ip=$1
      port_begin=$2
      cpu_start=$3
      proc_num=$4
      
      for ((i=0; i<proc_num; i++))
      do
          port=$((port_begin + i))
          cpu=$((cpu_start + i))
          iperf3  -c $dst_ip -u -l 16 -b 10000M -i 1 -t 180 -p $port -A $(( $cpu % $4)) -P 1 > /dev/null 2>&1 &
      done
      
    4. Esc退出编辑模式,然后输入:wq并回车。

    5. 执行chmod +x client.sh指令,赋予client.sh文件执行权限。

  4. 在被测试机器(172.0.0.1)执行以下命令,运行client.sh脚本文件。

    ./client.sh 172.0.0.2  12000  0   128
    ./client.sh 172.0.0.3  12032  32  128
    ./client.sh 172.0.0.4  12064  64  128
    ./client.sh 172.0.0.5  12096  96  128
    
  5. 在四台辅助测试机器分别执行sar -n DEV 1,查看测试结果。
    四台辅助测试机器测试结果的总和即为被测试机器的测试结果: 3790019 + 3183582 + 3500913 + 3564047 约为14Mpps。
    alt