使用 NTTTCP 测试 VM 网络吞吐量

注意

本文引用了 CentOS,这是一个处于生命周期结束 (EOL) 状态的 Linux 发行版。 请相应地考虑你的使用和规划。

本文介绍如何使用 Microsoft 提供的免费 NTTTCP 工具在 Azure Windows 或 Linux 虚拟机 (VM) 上测试网络带宽和吞吐量性能。 NTTTCP 等工具以网络为目标进行测试,可最大程度地减少可能影响性能的其他资源的使用。

先决条件

  • 具有活动订阅的 Azure 帐户。 创建帐户
  • Azure 中的两台 Windows 或 Linux 虚拟机。 创建 Windows VM创建 Linux VM
    • 若要测试吞吐量,需要两个大小相同的 VM 充当发送方接收方。 这两个 VM 应位于同一邻近放置组可用性集中,以便你可以使用其内部 IP 地址,并从测试中排除负载均衡器。
    • 记下命令中使用的 VM 核心数和接收方 VM IP 地址。 发送方和接收方命令都使用接收方的 IP 地址。

注意

可以使用虚拟 IP 进行测试,但这超出了本文的范围。

本文中使用的示例

设置 “值”
接收方 VM IP 地址 10.0.0.5
VM 核心数 2

使用 Windows VM 或 Linux VM 测试吞吐量

可以使用 NTTTCP 测试 Windows VM 的吞吐量,或者使用 NTTTCP-for-Linux 测试 Linux VM 的吞吐量。

准备 VM 并安装 NTTTCP-for-Windows

  1. 在发送方和接收方 VM 上,请将最新版本的 NTTTCP 下载c:\tools 等单独的文件夹中。

  2. 打开 Windows 命令行,并导航到将 ntttcp.exe 下载到的文件夹。

  3. 在接收方 VM 上创建 Windows 防火墙 allow 规则,以允许接收 NTTTCP 流量。 按名称允许 nttcp.exe 比允许特定入站 TCP 端口更容易。 请运行以下命令,将 c:\tools 替换为 ntttcp.exe 的下载路径(如果不同)。

    netsh advfirewall firewall add rule program=c:\tools\ntttcp.exe name="ntttcp" protocol=any dir=in action=allow enable=yes profile=ANY
    
  4. 若要确认配置,请使用以下命令在接收方和发送方虚拟机上测试单个传输控制协议 (TCP) 流 10 秒:

    接收方 VM

    ntttcp -r -m [<number of VM cores> x 2],*,<receiver IP address> -t 10 -P 1

    ntttcp -r -m 4,*,10.0.0.5 -t 10 -P 1
    

    发送方 VM

    ntttcp -s -m [<number of VM cores> x 2],*,<receiver IP address> -t 10 -P 1

    ntttcp -s -m 4,*,10.0.0.5 -t 10 -P 1
    

    注意

    仅使用上述命令来测试配置。

    提示

    首次运行测试来验证设置时,请使用较短的测试持续时间获取快速反馈。 在确认工具正常工作后,请将测试持续时间延长至 300 秒,以获得最准确的结果。

运行吞吐量测试

在发送方和接收方 VM 上运行测试 300 秒(5 分钟)。 发送方和接收方必须为 -t 参数指定相同的测试持续时间。

  1. 在接收方 VM 上运行以下命令,将 <number of VM cores><receiver IP address> 占位符替换为自己的值。

    ntttcp -r -m [<number of VM cores> x 2],*,<receiver IP address> -t 300

    ntttcp -r -m 4,*,10.0.0.5 -t 300
    
  2. 在发送方 VM 上,运行以下命令。 发送方和接收方命令的区别仅在于指定发送方或接收方 VM 的 -s-r 参数。

    ntttcp -s -m [<number of VM cores> x 2],*,<receiver IP address> -t 300

    ntttcp -s -m 4,*,10.0.0.5 -t 300
    
  3. 等待结果。

测试完成后,输出应类似于以下示例:

C:\tools>ntttcp -s -m 4,*,10.0.0.5 -t 300
Copyright Version 5.39
Network activity progressing...


Thread  Time(s) Throughput(KB/s) Avg B / Compl
======  ======= ================ =============
     0  300.006        29617.328     65536.000
     1  300.006        29267.468     65536.000
     2  300.006        28978.834     65536.000
     3  300.006        29016.806     65536.000


#####  Totals:  #####


   Bytes(MEG)    realtime(s) Avg Frame Size Throughput(MB/s)
================ =========== ============== ================
    34243.000000     300.005       1417.829          114.141


Throughput(Buffers/s) Cycles/Byte       Buffers
===================== =========== =============
             1826.262       7.036    547888.000


DPCs(count/s) Pkts(num/DPC)   Intr(count/s) Pkts(num/intr)
============= ============= =============== ==============
     4218.744         1.708        6055.769          1.190


Packets Sent Packets Received Retransmits Errors Avg. CPU %
============ ================ =========== ====== ==========
    25324915          2161992       60412      0     15.075

测试 Windows VM 和 Linux VM 之间的吞吐量

若要在 Windows VM 和 Linux VM 之间运行 NTTTCP 吞吐量测试,请在 Windows 上使用 -ns 标志或在 Linux 上使用 -N 标志来启用不同步模式。

若要使用 Windows VM 作为接收方进行测试,请运行以下命令:

ntttcp -r -m [<number of VM cores> x 2],*,<Linux VM IP address> -t 300

若要使用 Windows VM 作为发送方进行测试,请运行以下命令:

ntttcp -s -m [<number of VM cores> x 2],*,<Linux VM IP address> -ns -t 300

后续步骤