网络延迟测试
1. 前言
本文介绍如何使用公开可用的工具 Latte(用于 Windows)或 SockPerf(用于 Linux)测试虚拟机 (VM) 之间的网络延迟。
为获得最准确的结果,应使用专为该任务设计的工具衡量 VM 网络延迟,并排除其他类型的延迟,例如应用程序延迟。 Latte 和 SockPerf 专注于传输控制协议 (TCP) 和用户数据报协议 (UDP) 流量,可提供最相关的网络延迟结果。 大多数应用程序都使用这些协议,此流量对应用程序性能的影响最大。
许多其他常见的网络延迟测试工具(如 Ping)不会衡量 TCP 或 UDP 流量。 Ping 之类的工具使用 Internet 控制消息协议 (ICMP),而应用程序不使用这些协议。 ICMP 流量的处理方式与应用程序流量不同,不会直接影响应用程序性能。 ICMP 测试结果不会直接应用于使用 TCP 和 UDP 的工作负载。
Latte 和 SockPerf 仅衡量 TCP 或 UDP 有效负载传递时间。 这些工具使用以下方法来衡量两台物理计算机或虚拟计算机之间的网络延迟:
- 通过将一方指定为发送方,一方指定为接收方,在计算机之间创建双向通信通道。
- 在两个方向上发送和接收数据包,并衡量往返时间 (RTT)。
2. 优化网络延迟的提示和最佳做法
若要针对网络延迟优化 VM,请在创建 VM 时遵循以下建议:
- 使用最新版本的 Windows 或 Linux。
- 启用“加速网络”以提高性能。
- 使用 Azure 邻近放置组部署 VM。
- 创建更大的 VM 以提高性能。
使用以下最佳做法来测试和分析网络延迟:
-
完成网络 VM 的部署、配置和优化后,在部署的 VM 之间执行基线网络延迟测量,以建立基准。
-
测试更改以下任何组件对网络延迟的影响:
- 操作系统 (OS) 或网络堆栈软件,包括配置更改。
- VM 部署方法,例如部署到可用性区域或邻近放置组 (PPG)。
- VM 属性,例如加速网络或大小更改。
- 虚拟网络配置,例如路由或筛选更改。
-
在进行受控更改之前,始终将新的测试结果与基线或最新测试结果进行比较。
-
每当观察或部署更改时,请重复测试。
3. 使用 Latte 或 SockPerf 测试 VM
使用以下过程通过 Latte(用于 Windows)或 SockPerf(用于 Linux)安装和测试网络延迟。
3.1 windows延迟测试
3.1.1 安装 Latte 并配置 VM
-
将最新版本的 latte.exe下载到两个 VM 上单独的文件夹中,例如 c:\tools。
-
在接收方 VM 上,创建 Windows Defender 防火墙 allow 规则以允许 Latte 流量到达。 按名称允许 latte.exe 程序比允许特定入站 TCP 端口更容易。 在命令中,将
占位符替换为 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
3.1.2 在 VM 上运行 Latte
从 Windows 命令行运行 latte.exe,而不是从 PowerShell 运行。
- 在接收方 VM 上运行以下命令,将 、 和 占位符替换为自己的值。
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
- 在发送方 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
- 等待结果。 测试可能需要几分钟时间才能完成,具体取决于 VM 之间的距离。 考虑先运行较少的迭代次数以使测试成功,然后再运行较长的测试。
3.2 linux延迟测试
3.2.1 准备 VM
在发送方和接收方 Linux VM 上,运行以下命令来准备 SockPerf,具体取决于 Linux 发行版。
Red Hat Enterprise Linux (RHEL) 或 CentOS:
#RHEL/CentOS - Install Git and other helpful tools
sudo yum install gcc -y -q
sudo yum install git -y -q
sudo yum install gcc-c++ -y
sudo yum install ncurses-devel -y
sudo yum install -y automake
sudo yum install -y autoconf
sudo yum install -y libtool
Ubuntu:
#Ubuntu - Install Git and other helpful tools
sudo apt-get install build-essential -y
sudo apt-get install git -y -q
sudo apt-get install -y autotools-dev
sudo apt-get install -y automake
sudo apt-get install -y autoconf
sudo apt-get install -y libtool
sudo apt update
sudo apt upgrade
3.2.2 复制、编译和安装 SockPerf
运行以下命令来复制、编译和安装 SockPerf:
#Bash - all distros
#From bash command line (assumes Git is installed)
git clone https://github.com/mellanox/sockperf
cd sockperf/
./autogen.sh
./configure
#make is slow, may take several minutes
make
#make install is fast
sudo make install
3.2.3 在 VM 上运行 SockPerf
- SockPerf 安装完成后,在接收方 VM 上启动 SockPerf。 可输入任意可用端口号。 以下示例使用端口 12345。 将 10.0.0.4 的示例 IP 地址替换为接收方 VM 的 IP 地址。
#Server/Receiver for IP 10.0.0.4:
sudo sockperf sr --tcp -i 10.0.0.4 -p 12345
- 现在接收方正在侦听,请在发送方或客户端计算机上运行以下命令,将数据包发送到侦听端口上的接收方,在本例中为 12345。
#Client/Sender for IP 10.0.0.4:
sockperf ping-pong -i 10.0.0.4 --tcp -m 350 -t 101 -p 12345 --full-rtt
- 选项 -t 设置测试时间(以秒为单位)。 大约 100 秒就足以返回具有代表性的结果。
- -m 表示消息大小(以字节为单位)。 平均数据包通常为 350 字节消息大小。 可以调整大小以更准确地表示 VM 的工作负载
- 等待结果。 根据虚拟机之间的距离,迭代次数会有所不同。 考虑先运行大约五秒的短时间测试以使测试成功,然后再运行较长时间的测试。
4. 后续步骤
- 使用 Azure 邻近放置组减少延迟。
- 优化 Azure 虚拟机网络吞吐量。
- 分配虚拟机网络带宽。
- 测试带宽和吞吐量。
- 有关 Azure 虚拟网络的详细信息,请参阅 Azure 虚拟网络常见问题解答。