赛尔校园公共服务平台 Logo
平台使用
阿里云
百度云
移动云
智算服务
教育生态
登录 →
赛尔校园公共服务平台 Logo
平台使用 阿里云 百度云 移动云 智算服务 教育生态
登录
  1. 首页
  2. 阿里云
  3. 云服务器 ECS
  4. 实践教程
  5. 网络最佳实践
  6. 网络性能测试方法

网络性能测试方法

  • 网络最佳实践
  • 发布于 2025-04-01
  • 0 次阅读
文档编辑
文档编辑

网络PPS(每秒传输数据包数)、网络带宽(数据传输速度)和网络时延(数据从发送端发出到接收端接收到所需的时间)是衡量云服务器网络性能的重要指标,测试网络性能可以帮助您评估网络的稳定性、延迟和吞吐量,从而为您提供更好的用户体验和应用程序性能。本文为您介绍如何使用Netperf、sockperf等工具测试ECS实例的网络PPS、网络带宽和网络时延,您可以根据测试结果评估ECS实例的网络性能。

重要
  • 强烈建议您在新购买的无数据的ECS实例上使用工具测试网络性能,避免造成数据丢失。

  • 实例规格指标均在测试数据环境下验证获得。在真实场景中,受实例负载、组网模型等其他因素的影响,实例的性能表现可能存在差异,请您以实际情况为准。

准备测试环境

环境要求

  • 准备测试网络PPS、带宽和时延等不同测试场景的ECS实例。创建实例的操作,请参见自定义购买实例。

    重要

    在测试网络性能时,强烈建议您使用相同规格的实例来确保测试结果的准确性和可比性,避免不同实例规格的vCPU核数、内存大小、网络带宽等其他因素对测试结果产生影响。

  • 在同一测试场景下,所有ECS实例必须属于同一个VPC、同一台交换机和同一个安全组。

环境示例

本文测试网络性能使用的测试机(ECS实例)和辅助测试机(ECS实例)的实例规格及数量如下所示。在实际测试过程中,请您根据实际环境选择两台机器进行测试。

  • 测试ECS实例的网络PPS(仅适用于Linux)

    说明

    由于目前Windows没有较好的网络PPS测试工具,所以暂不提供Windows的网络PPS测试方法。

    网络PPS小于600万

    测试示例

    测试机

    辅助测试机

    实例规格

    ecs.g7.large

    ecs.g7.large

    镜像

    Alibaba Cloud Linux 3

    Alibaba Cloud Linux 3

    实例数量

    1台

    1台

    网络

    分配公网IP地址

    网络PPS大于600万小于2000万

    测试示例

    测试机

    辅助测试机

    实例规格

    ecs.g7.16xlarge

    ecs.g7.16xlarge

    镜像

    Alibaba Cloud Linux 3

    Alibaba Cloud Linux 3

    实例数量

    1台

    3台

    网络

    分配公网IP地址

    网络PPS大于2000万

    测试示例

    测试机

    辅助测试机

    实例规格

    ecs.g7.32xlarge

    ecs.g7.32xlarge

    镜像

    Alibaba Cloud Linux 3

    Alibaba Cloud Linux 3

    实例数量

    1台

    3台

    网络

    分配公网IP地址

  • 测试ECS实例的网络带宽和网络时延

    Linux实例

    测试示例

    测试机

    辅助测试机

    实例规格

    ecs.g7.large

    ecs.g7.large

    镜像

    Alibaba Cloud Linux 3

    Alibaba Cloud Linux 3

    实例数量

    1台

    1台

    网络

    分配公网IP地址

    Windows实例

    测试示例

    测试机

    辅助测试机

    实例规格

    ecs.g7.large

    ecs.g7.large

    镜像

    Windows Server 2022

    Windows Server 2022

    实例数量

    1台

    1台

    网络

    分配公网IP地址

测试网络性能

测试网络PPS(仅适用于Linux)

说明

由于目前Windows没有较好的PPS测试工具,所以暂不提供Windows的网络PPS测试方法。

网络PPS小于600万

  1. 分别远程连接测试机和辅助测试机。

    具体操作,请参见使用Workbench工具以SSH协议登录Linux实例。

  2. 分别在测试机和辅助测试机上执行以下命令,下载Netperf。

    wget https://benchmark-packages.oss-cn-qingdao.aliyuncs.com/netperf-2.7.0.tar.gz
  3. 分别在测试机和辅助测试机上执行以下命令,安装Netperf和sar监控工具。

    1. 执行以下命令,解压Netperf包。

      sudo yum install -y gcc autoconf automake libtool sysstat
      tar -zxvf netperf-2.7.0.tar.gz
    2. 执行以下命令,查询gcc版本号。

      gcc -v 2>&1
    3. 若测试机和辅助测试机安装的gcc版本高于10版本,则您需要继续执行下述操作,以确保gcc可以正常编译。否则,请忽略此步骤。

      1. 执行以下命令,修改nettest_omni.c文件。

        cd netperf
        vim src/nettest_omni.c
      2. 按i键进入编辑模式,手动删除nettest_omni.c文件中的声明变量内容。

        声明变量内容如下所示:

        /* different options for the sockets        */
        
        int
          loc_nodelay,    /* don't/do use NODELAY  locally    */
          rem_nodelay,    /* don't/do use NODELAY remotely  */
          loc_sndavoid,    /* avoid send copies locally    */
          loc_rcvavoid,    /* avoid recv copies locally    */
          rem_sndavoid,    /* avoid send copies remotely    */
          rem_rcvavoid;   /* avoid recv_copies remotely    */
      3. 修改完成后按Esc键,输入:wq后按下回车键,保存并退出。

    4. 执行以下命令,安装Netperf和sar监控工具。

      cd netperf
      sudo ./configure
      sudo make && sudo make install
  4. 在测试机上执行以下命令,启动64个netserver服务。

    #!/bin/bash
    for j in `seq 64`; do
        netserver -p $[16000+j] > server_$[16000+j].netperf > /dev/null 2>&1  &
    done
  5. 在测试机上执行以下命令,查询测试机的私网IP地址。

    ifconfig || ip addr

    image.png

  6. 在辅助测试机上执行以下命令,向测试机输入流量。

    #!/bin/bash
    server_ip=<测试机私网IP地址>
    for j in `seq 64`; do
        port=$[16000+j]
        netperf -H ${server_ip} -l ${run_time:-300} -t UDP_STREAM  -p $port  -- -m 1 -D > /dev/null 2>&1 &
    done

    <测试机私网IP地址>需替换为上一步查询的实际测试机的私网IP地址,示例如下图所示。

    image.png

  7. 在测试机上执行以下命令,测试网络PPS。

    sar -n DEV 1

    在测试结果中查看rxpck/s列的数据值,rxpck/s表示该测试机每秒钟接收的数据包总数。如下图所示,示例中测试机每秒钟接收到的数据包平均数约为94万。

    image.png

网络PPS大于600万小于2000万

  1. 分别远程连接测试机和辅助测试机。

    具体操作,请参见使用Workbench工具以SSH协议登录Linux实例。

  2. 分别在3台辅助测试机和1台测试机上执行以下命令,安装sockperf。

    sudo yum install -y autoconf automake libtool gcc-c++
    cd /opt
    sudo wget https://github.com/Mellanox/sockperf/archive/refs/tags/3.8.tar.gz
    sudo tar -zxf 3.8.tar.gz
    cd sockperf-3.8/
    sudo ./autogen.sh
    sudo ./configure
    sudo make -j `cat /proc/cpuinfo| grep process | wc -l`
    sudo make install
  3. 在测试机上执行以下命令,查询测试机的私网IP地址。

    ifconfig || ip addr

    image.png

  4. 分别在3台辅助测试机上执行以下命令,向测试机输入流量。

    server_ip="<测试机私网IP地址>"
    threads=64
    msg_size=14
    run_time=60
    
    basePort=6666
    for((i=0;i<$threads;++i));do
        nohup sockperf tp -i $server_ip --pps max -m ${msg_size} -t ${run_time} --port $[${basePort}+${i}] 2>&1 &
    done

    其中<测试机私网IP地址>是实际测试机的私网IP地址,run_time是输入流量的时间,请您根据实际情况修改。

  5. 分别在3台辅助测试机和1台测试机上执行以下命令,测试网络流量。

    sar -n DEV 1

    在测试机上查看rxpck/s列的数据值,rxpck/s表示该测试机每秒钟接收到的数据包。如下图所示,示例中测试机每秒钟接收到的数据包数约为1200万。接收数据包

网络PPS大于2000万

  1. 分别远程连接测试机和辅助测试机。

    具体操作,请参见使用Workbench工具以SSH协议登录Linux实例。

  2. 分别在3台辅助测试机和1台测试机上执行以下命令,安装sockperf。

    sudo yum install -y autoconf automake libtool gcc-c++
    cd /opt
    sudo wget https://github.com/Mellanox/sockperf/archive/refs/tags/3.8.tar.gz
    sudo tar -zxf 3.8.tar.gz
    cd sockperf-3.8/
    sudo ./autogen.sh
    sudo ./configure
    sudo make -j `cat /proc/cpuinfo| grep process | wc -l`
    sudo make install
  3. 在测试机上执行以下命令,绑定中断。

    在高PPS场景下,通过将中断绑定到特定的CPU核心,可以确保处理中断的CPU核心相对固定,减少上下文切换,提高处理效率。

    a=$(cat /proc/interrupts | grep virtio2-input | awk -F ':' '{print $1}')
    cpu=0
    for irq in $a; do
        echo $cpu >/proc/irq/$irq/smp_affinity_list
        let cpu+=2
    done
  4. 在测试机上执行以下命令,查询测试机的私网IP地址。

    ifconfig || ip addr

    image.png

  5. 分别在3台辅助测试机上执行以下命令,向测试机输入流量。

    server_ip="<测试机私网IP地址>"
    threads=64
    msg_size=14
    run_time=60
    
    basePort=6666
    for((i=0;i<$threads;++i));do
        nohup sockperf tp -i $server_ip --pps max -m ${msg_size} -t ${run_time} --port $[${basePort}+${i}] 2>&1 &
    done

    其中<测试机私网IP地址>是实际测试机的私网IP地址,run_time是输入流量的时间,请您根据实际情况修改。

  6. 分别在3台辅助测试机和1台测试机上执行以下命令,测试网络流量。

    sar -n DEV 1

    在测试机上查看rxpck/s列的数据值,rxpck/s表示该测试机每秒钟接收到的数据包。如下图所示,示例中测试机每秒钟接收到的数据包数约为2000万。2400万PPS

测试网络带宽

Linux实例

  1. 分别远程连接测试机和辅助测试机。

    具体操作,请参见使用Workbench工具以SSH协议登录Linux实例。

  2. 分别在测试机和辅助测试机上执行以下命令,下载Netperf。

    wget https://benchmark-packages.oss-cn-qingdao.aliyuncs.com/netperf-2.7.0.tar.gz
  3. 分别在测试机和辅助测试机上执行以下命令,安装Netperf和sar监控工具。

    1. 执行以下命令,解压Netperf包。

      sudo yum install -y gcc autoconf automake libtool sysstat
      tar -zxvf netperf-2.7.0.tar.gz
    2. 执行以下命令,查询gcc版本号。

      gcc -v 2>&1
    3. 若测试机和辅助测试机安装的gcc版本高于10版本,则您需要继续执行下述操作,以确保gcc可以正常编译。否则,请忽略此步骤。

      1. 执行以下命令,修改nettest_omni.c文件。

        cd netperf
        vim src/nettest_omni.c
      2. 按i键进入编辑模式,手动删除nettest_omni.c文件中的声明变量内容。

        声明变量内容如下所示:

        /* different options for the sockets        */
        
        int
          loc_nodelay,    /* don't/do use NODELAY  locally    */
          rem_nodelay,    /* don't/do use NODELAY remotely  */
          loc_sndavoid,    /* avoid send copies locally    */
          loc_rcvavoid,    /* avoid recv copies locally    */
          rem_sndavoid,    /* avoid send copies remotely    */
          rem_rcvavoid;   /* avoid recv_copies remotely    */
      3. 修改完成后按Esc键,输入:wq后按下回车键,保存并退出。

    4. 执行以下命令,安装Netperf和sar监控工具。

      cd netperf
      sudo ./configure
      sudo make && sudo make install
  4. 在测试机上执行以下命令,启动64个netserver服务。

    #!/bin/bash
    for j in `seq 64`; do
        netserver -p $[16000+j] > server_$[16000+j].netperf > /dev/null 2>&1  &
    done
  5. 在测试机上执行以下命令,查询测试机的私网IP地址。

    ifconfig || ip addr

    image.png

  6. 在辅助测试机上执行以下命令,向测试机输入流量。

    #!/bin/bash
    server_ip=<测试机私网IP地址>
    for j in `seq 64`; do
        port=$[16000+j]
        netperf -H ${server_ip} -l ${run_time:-300} -t TCP_STREAM -p $port -- -D > /dev/null 2>&1 & 
    done

    <测试机私网IP地址>需替换为上一步查询的实际测试机的私网IP地址,示例如下图所示。

    image.png

  7. 在测试机上执行以下命令,测试网络带宽。

    sar -n DEV 1

    在测试结果中查看rxkB/s列的数据值,rxkB/s表示该测试机每秒钟接收的数据包的大小,单位为KB/s(千字节/每秒)。1字节等于8比特,若要计算对应的带宽值,则可将rxkB/s列对应的数值乘以8,从而将其转换为Kbps(千比特/每秒)。

    示例如下图所示。image.png

Windows实例

  1. 分别远程连接测试机和辅助测试机。

    具体操作,请参见使用Workbench工具以RDP协议登录Windows实例。

  2. 分别在测试机和辅助测试机中安装测试工具并关闭防火墙。

    1. 下载ntttcp.exe工具,并获取存放路径。

    2. 打开运行对话框,输入powershell进入PowerShell命令行。

    3. 运行以下命令,关闭防火墙,避免防火墙可能阻止两台机器的连接。

      Set-NetFirewallProfile -Profile * -Enabled:false

      或者增加入方向规则以允许ntttcp.exe数据包通过防火墙。

      $ntttcpPath = "<ntttcp.exe实际路径>"
      New-NetFirewallRule -DisplayName ntttcp -Protocol Any -Direction Inbound -Action Allow -Enabled True -Profile Any -Program $ntttcpPath
      说明

      您需要根据实际环境替换测试机的<ntttcp.exe实际路径>。

  3. 在测试机中运行以下命令,设置网卡RSS功能。

    RSS(Receive Side Scaling)网络技术旨在通过将数据包分布到多个CPU核心上的接收队列来提高网络性能和效率,从而实现网络处理的并行化。以下命令表示:

    • 如果测试机的CPU数量不超过16,将RSS接收队列的数量设置为与CPU数量相等,这样可以确保每个CPU核心都有独立的接收队列来处理网络流量。

    • 如果测试机的CPU数量超过16,关闭RSS功能。因为很多网卡限制了RSS队列的最大数量为16,如果继续使用RSS可能导致资源分配不均或管理复杂性增加。

    $cpuNum = (Get-CimInstance -ClassName Win32_Processor).NumberOfLogicalProcessors
    if ($cpuNum -le 16) {
      Set-NetAdapterRss -Name <测试机网络适配器的名称> -NumberOfReceiveQueues $cpuNum
    } else {
      Disable-NetAdapterRss -Name <测试机网络适配器的名称>
    }
    说明
    • 您需要根据环境替换<测试机网络适配器的名称>(可通过Get-NetAdapter | Select-Object Name命令获取)。

    • 修改网卡的RSS配置通常需要重启网卡服务,可能会导致当前通过该网卡的网络连接暂时中断,请您在连接恢复后再进行后续操作。

  4. 在测试机中执行以下命令,准备接收数据。

    $serverIp = (Get-NetIPConfiguration -InterfaceAlias <测试机网络适配器的名称>).IPv4Address.IPAddress
    $cpuNum = (Get-CimInstance -ClassName Win32_Processor).NumberOfLogicalProcessors
    $threadNum = $cpuNum
    & <测试机ntttcp.exe实际路径> -r -m $threadNum,*,$serverIp -t 300
    说明

    您需要根据环境替换<测试机网络适配器的名称>和<测试机ntttcp.exe实际路径>。

  5. 在辅助测试机中执行以下命令,发送数据。

    $serverIp = "<测试机私网IP地址>"
    $threadNum = "<测试机threadNum>"
    <辅助测试机ntttcp.exe实际路径> -s -m $threadNum,*,$serverIp -t 100
    说明

    您需要根据环境替换<测试机私网IP地址>(可通过ipconfig命令获取)、<测试机threadNum>(可通过$cpuNum命令获取)和<辅助测试机ntttcp.exe实际路径>。

  6. 在测试机中查看测试的网络带宽。

    测试示例如下图所示,Throughput(MB/s)值表示网络带宽(数据传输速度)。

    image

测试网络时延

Linux实例

  1. 分别远程连接测试机和辅助测试机。

    具体操作,请参见使用Workbench工具以SSH协议登录Linux实例。

  2. 分别在测试机和辅助测试机上执行以下命令,安装sockperf。

    sudo yum install -y autoconf automake libtool gcc-c++
    cd /opt
    sudo wget https://github.com/Mellanox/sockperf/archive/refs/tags/3.8.tar.gz
    sudo tar -zxf 3.8.tar.gz
    cd sockperf-3.8/
    sudo ./autogen.sh
    sudo ./configure
    sudo make -j `cat /proc/cpuinfo| grep process | wc -l`
    sudo make install
  3. 在测试机上执行以下命令,查询测试机的私网IP地址。

    ifconfig || ip addr

    image.png

  4. 在测试机上执行以下命令,启动服务。

    sockperf sr --tcp --daemonize
  5. 在辅助测试机上执行以下命令,向测试机输入流量。

    sockperf pp -i <测试机私网IP地址> --tcp -t 30 -m 14 --full-log=result.json

    <测试机私网IP地址>需替换为上一步查询的实际测试机的私网IP地址。

  6. 在测试机中查看测试的网络时延。

    测试示例如下图所示:

    • 以avg-latency开头的结果数据表示平均时延,单位为us。

    • 以percentile 99.000开头的结果数据表示99分位时延,单位为μs。

    image.png

Windows实例

  1. 分别远程连接测试机和辅助测试机。

    具体操作,请参见使用Workbench工具以RDP协议登录Windows实例。

  2. 分别在测试机和辅助测试机中安装测试工具并关闭防火墙。

    1. 下载latte.exe工具,并获取存放路径。

    2. 打开运行对话框,输入powershell进入PowerShell命令行。

    3. 运行以下命令,关闭防火墙,避免防火墙可能阻止两台机器的连接。

      Set-NetFirewallProfile -Profile * -Enabled:false

      或者增加入方向规则以允许latte.exe数据包通过防火墙。

      $lattePath = "<latte.exe实际路径>"
      New-NetFirewallRule -DisplayName Latte -Protocol Any -Direction Inbound -Action Allow -Enabled True -Profile Any -Program $lattePath
      说明

      您需要根据实际环境替换测试机的<latte.exe实际路径>。

  3. 在测试机中执行以下命令,准备接收数据。

    $serverIp = (Get-NetIPConfiguration | Where-Object {$_.InterfaceAlias -eq '<测试机网络适配器的名称>'} | Select-Object -ExpandProperty IPv4Address).IPAddress
    $port = <通信端口>
    & "<测试机latte.exe实际路径>" -a "$serverIp`:$port" -i 65535
    说明
    • 您需要根据环境替换<测试机网络适配器的名称>(可通过Get-NetAdapter | Select-Object Name命令获取)和<测试机latte.exe实际路径>。

    • <通信端口>由您自定义,但是必须确保测试机和辅助测试机两端的端口号一致。

  4. 在辅助测试机中执行以下命令,发送数据。

    $serverIp = "<测试机私网IP地址>"
    $port = <通信端口>
    & "<辅助测试机latte.exe实际路径>" -c -a "${serverIp}:$port" -i 65535
    说明
    • 您需要根据环境替换<测试机私网IP地址>(可通过ipconfig命令获取)、<辅助测试机latte.exe实际路径>。

    • <通信端口>由您自定义,但是必须确保测试机和辅助测试机两端的端口号一致。

  5. 在测试机中查看测试的网络时延。

    测试示例如下图所示,Latency(usec)值表示数据传输的平均时延,单位为us。

    image

相关文章

基于eRDMA增强型实例部署AI训练集群 2025-04-01 11:57

基于eRDMA增强型实例部署AI训练集群,可以充分利用eRDMA提供的低延迟、高吞吐以及低CPU占用等特性,提升集群计算效率和响应速度,优化资源使用。文介绍如何在eRDMA增强型实例上部署AI训练集群,并测试其性能。 AI训练场景架构

ECS实现内网互通 2025-04-01 11:57

如果两台同地域的ECS实例之间需要传输数据,建议使用内网连接。云服务器ECS与云数据库、负载均衡以及对象存储之间也可以使用内网相互连接。 内网中的ECS实例,网络类型、所属账号、地域、安全组等都会影响内网通信。您可以参考表格内容,在不同场景下,实现内网互通。

基于eRDMA增强型实例部署Redis 2025-04-01 11:57

使用弹性eRDMA可以获得超低的延迟,更快地处理请求。本文介绍如何在eRDMA增强型实例上部署共享内存通信SMC(Shared Memory Communication)和Redis,然后基于SMC测试Redis处理请求的能力。 背景信息 共享内存通

不同安全组的经典网络实例内网互通 2025-04-01 11:57

如果您的ECS实例是经典网络类型,您可以通过设置安全组规则来实现两台不同安全组的经典网络实例内网互通,以满足您在搭建内部网站或应用服务、部署数据库集群或应用系统等业务场景下的需求。本文主要介绍实现经典网络实例内网互通的四种方案,帮助您实现经典网络实例的内网互通。

基于eRDMA部署高网络性能的bRPC应用 2025-04-01 11:57

基于支持eRDMA能力的ECS实例部署bRPC应用,可以充分利用eRDMA提供的低延迟、高吞吐量以及低CPU占用等特性,以优化bRPC应用的数据传输效率,适用于对消息吞吐量和时延要求较高的应用场景。本文介绍如何基于支持eRDMA能力的ECS实例部署bRPC应用,并测试eRDMA对bRPC应用的性能提

使用MTR工具进行网络链路分析 2025-04-01 11:57

当客户端访问目标服务器或负载均衡器时,如果在使用ping命令进行测试时出现丢包或网络不通的情况,可以通过链路测试工具进行链路测试,以判断问题的原因。本文将介绍如何使用链路测试工具进行链路测试,并提供分析链路测试结果的一些思路。 测试流程 通常情况下,链路测试流程如下图所示。

目录
Copyright © 2025 your company All Rights Reserved. Powered by 赛尔网络.
京ICP备14022346号-15
gongan beian 京公网安备11010802041014号