Azure VM间测试时延

Azure的VM采用FPGA硬件加速的方式,通过硬件实现TCP/UDP的加速。对ICMP,不同的硬件的VM采用不同的方式对ICMP进行转发。

  • 在第四代之前的VM,采用Host CPU的方式
  • 最新的第五代VM采用Host上SoC芯片进行ICMP数据包转发

具体内容可以参考Azure VM的加速网络

很多用户在使用VM时,会实时监控VM间的时延,并根据VM间的时延进行部署的调度。在Azure的Linux VM上,建议采用sockperf进行时延的测试

本文会介绍:

  1. 如何创建带有网络加速的VM
  2. 将多台VM部署到邻近放置组,减少时延
  3. 采用sockperf测试时延

一 创建邻近放置组

将多个 VM 放置在单个Zone中,可以减少实例之间的物理距离。但是,随着 Azure 数据中心规模的增加,单个Zone会跨多个物理数据中心,这会增加VM间的物理距离,从而增加网络的时延。

若要让 VM 尽可能靠近,将VM间时延尽可能降至最低,应该将 VM 部署到一个邻近放置组中,这样Azure平台会将在一个邻近放置组中的资源放置在尽可能近的物理位置。

具体创建方式如下:

az group create -n vm-latency -l uswest2

az ppg create -n inwestus2 -g vm-latency

二 创建带有网络加速的VM

Azure VM Host上运行虚拟化软件,如果采用网络加速,会实现Hypervisor-Bypass,从而减少时延,增加吞吐量。

配置网络加速,需要在网卡上开启Network Accelerate。

创建VM的命令行如下:

az vm create -n newvm -g vm-latency -l westus2 -z 1 \

  --accelerated-networking true \

  --image centos \

  --size Standard_D2s_v5 \

  --ppg inwestus2 \

  --authentication-type ssh \

  --admin-username user01 \

  --ssh-key-values ~/.ssh/id_rsa.pub \

  --count 2

添加防火墙规则,允许sockperf的TCP流量:

az network nsg create -g vm-latency -n sockperf -l westus2

az network nsg rule create -g vm-latency \

  --nsg-name sockperf \

  --name in_80 \

  --priority 300 \

  --source-address-prefixes Internet \

  --source-port-ranges '*' \

  --destination-address-prefixes '*' \

  --destination-port-ranges 80 \

  --access Allow \

  --protocol Tcp \

  --direction Inbound

 

az network vnet subnet update -g vm-latency \

  --vnet-name newvmVNET \

  --name newvmSubnet \

  --nsg sockperf

三 安装sockperf测试网络时延

如前文所述,sockperf是Azure推荐的测试tcp时延的工具。sockperf是一个基于socket API的网络基准测试工具,被设计用于测试高性能系统的性能(延迟和吞吐量)(它也适合于测试普通网络系统的性能)。它涵盖了大部分的套接字API调用和选项。具体来说,除了标准的吞吐量测试外,sockperf还做了以下工作。

以亚纳秒级的分辨率测量每个离散数据包的延迟,可以在ping-pong模式或负载模式下进行延迟测量。这意味着,即使在每秒数百万个数据包的负载下,我们也能测量单个数据包的延迟。

1 安装sockperf

通过git clone获取源代码,进行编译安装:

yum install gcc-c++ automake make git -y

git clone https://github.com/Mellanox/sockperf.git

cd sockperf

./autogen.sh

./configure --prefix=/usr

make

make install

查看安装版本:

# sockperf --version

sockperf, version 3.7-7.git05c62507670b

compiled Nov 5 2021, 12:27:43

 

Copyright (C) 2011-2021 Mellanox Technologies Ltd.

SockPerf is open source software, see http://github.com/mellanox/sockperf

2 服务器端配置

在服务器端开启Daemon,监听client的sockperf请求:

ip_add=$(ifconfig eth0 | grep inet | grep -v inet6 | awk '{print $2}')

sockperf sr -i $ip_add -p 80 --tcp --daemonize

通过netstat可以看到sockperf在监听80端口

3 客户端时延测试

通过下面的命令测试客户端到服务器端的时延:

while true; \

  do sockperf ping-pong \

  -i 10.0.0.4 -p 80 --tcp \

  --full-rtt -m 64 | awk '{print $0 " --- " strftime()}' >> sock.txt; \

  sleep 60; \

  done

测试结果如下:

可以看到,每一次sockperf测试的平均时延是在4x-5x us左右。

四 总结

由于Azure VM对ICMP数据包没有加速的功能,我们通过TCP的方式检测两台VM的时延。Mellanox的sockperf网络检测工具,可以非常方便的检测Azure Linux VM间的时延。

原文地址:https://www.cnblogs.com/hengwei/p/15515268.html