测试 Azure VM 之间的网络延迟

本文介绍如何使用公开可用的工具 Latte(用于 Windows)或 SockPerf(用于 Linux)测试 Azure 虚拟机 (VM) 之间的网络延迟。

为获得最准确的结果,应使用专为该任务设计的工具衡量 VM 网络延迟,并排除其他类型的延迟,例如应用程序延迟。 Latte 和 SockPerf 专注于传输控制协议 (TCP) 和用户数据报协议 (UDP) 流量,可提供最相关的网络延迟结果。 大多数应用程序都使用这些协议,此流量对应用程序性能的影响最大。

许多其他常见的网络延迟测试工具(如 Ping)不会衡量 TCP 或 UDP 流量。 Ping 之类的工具使用 Internet 控制消息协议 (ICMP),而应用程序不使用这些协议。 ICMP 流量的处理方式与应用程序流量不同,不会直接影响应用程序性能。 ICMP 测试结果不会直接应用于使用 TCP 和 UDP 的工作负载。

Latte 和 SockPerf 仅衡量 TCP 或 UDP 有效负载传递时间。 这些工具使用以下方法来衡量两台物理计算机或虚拟计算机之间的网络延迟:

  1. 通过将一方指定为发送方,一方指定为接收方,在计算机之间创建双向通信通道。
  2. 在两个方向上发送和接收数据包,并衡量往返时间 (RTT)。

优化网络延迟的提示和最佳做法

若要针对网络延迟优化 VM,请在创建 VM 时遵循以下建议:

  • 使用最新版本的 Windows 或 Linux。
  • 启用“加速网络”以提高性能。
  • 使用 Azure 邻近放置组部署 VM。
  • 创建更大的 VM 以提高性能。

使用以下最佳做法来测试和分析网络延迟:

  1. 完成网络 VM 的部署、配置和优化后,在部署的 VM 之间执行基线网络延迟测量,以建立基准。

  2. 测试更改以下任何组件对网络延迟的影响:

    • 操作系统 (OS) 或网络堆栈软件,包括配置更改。
    • VM 部署方法,例如部署到可用性区域或邻近放置组 (PPG)。
    • VM 属性,例如加速网络或大小更改。
    • 虚拟网络配置,例如路由或筛选更改。
  3. 在进行受控更改之前,始终将新的测试结果与基线或最新测试结果进行比较。

  4. 每当观察或部署更改时,请重复测试。

使用 Latte 或 SockPerf 测试 VM

使用以下过程通过 Latte(用于 Windows)或 SockPerf(用于 Linux)安装和测试网络延迟。

安装 Latte 并配置 VM

  1. 将最新版本的 latte.exe下载到两个 VM 上单独的文件夹中,例如 c:\tools

  2. 接收方 VM 上,创建 Windows Defender 防火墙 allow 规则以允许 Latte 流量到达。 按名称允许 latte.exe 程序比允许特定入站 TCP 端口更容易。 在命令中,将 <path> 占位符替换为 latte.exe 下载到的路径,例如 c:\tools\

    netsh advfirewall firewall add rule program=<path>latte.exe name="Latte" protocol=any dir=in action=allow enable=yes profile=ANY
    

在 VM 上运行 Latte

从 Windows 命令行运行 latte.exe,而不是从 PowerShell 运行。

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

    latte -a <receiver IP address>:<port> -i <iterations>
    
    • 大约 65,000 次迭代就足以返回具有代表性的结果。
    • 可输入任意可用端口号。

    以下示例演示用于 IP 地址为 10.0.0.4 的 VM 的命令:

    latte -a 10.0.0.4:5005 -i 65100

  2. 发送方 VM 上,运行与接收方相同的命令,但添加了 -c,以指示客户端或发送方 VM。 再次将 <receiver IP address><port><iterations> 占位符替换为自己的值。

    latte -c -a <receiver IP address>:<port> -i <iterations>
    

    例如:

    latte -c -a 10.0.0.4:5005 -i 65100

  3. 等待结果。 测试可能需要几分钟时间才能完成,具体取决于 VM 之间的距离。 考虑先运行较少的迭代次数以使测试成功,然后再运行较长的测试。

后续步骤