zoukankan      html  css  js  c++  java
  • 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间的时延。

  • 相关阅读:
    字符串转数字,不用系统自带函数
    Hibernate事务与并发问题处理(乐观锁与悲观锁)【转】
    替代Oracle的minus写法
    随机算法
    获取在线时间 (Java Socket)
    在Asp.net中为用户控件(.ascx)添加自定义属性详解
    oracle查询多行数据合并成一行数据
    JS Math.sin() 与 Math.cos() 用法
    [BeiJing2006]狼抓兔子
    [HNOI2008]明明的烦恼
  • 原文地址:https://www.cnblogs.com/hengwei/p/15515268.html
Copyright © 2011-2022 走看看