专栏首页华来四Azure混合云Hyper-V性能加速之VMQ

Hyper-V性能加速之VMQ

内容概要 优化虚机网络和降低网络传输数据对CPU的影响是我们在规划Hyper-V虚拟化时需要考虑的一个关键点,本文将介绍Hyper-V虚拟化如何通过虚机队列(Virtual Machine Queues,简称为VMQ)为虚机网络加速以及优化网络对CPU中断效率。

开始之前,先看看物理机网卡RSS技术

在介绍VMQ之前,我们先来看看在传统的物理服务器上,网卡是如何接收网络数据的。在多核CPU出现的时候,因为网卡不支持将网络流量中断到多个逻辑核而是中断到其中一个逻辑核进行处理,这样就造成CPU使用不平均以及降低了CPU处理网络流量的效率,如图1所示。

<图1 网卡中断一个CPU逻辑核接收数据>

而现在大部分的网卡都已经支持接收端缩放(Receive Side Scaling,以下简称为RSS),物理机网卡如果支持多个硬件接收队列,则会将接收的数据分发到网卡的多个队列里,在具备多核的物理服务器上,通过网卡的RSS技术将多个队列中断不同的CPU逻辑核来提高数据接收效率,如图2所示。RSS技术的目的在于为队列找到最佳的CPU逻辑核来平衡网络的CPU开销。

<图2 RSS队列中断多个CPU逻辑核接收数据>

Hyper-V虚机队列的工作方式

虚拟化环境的情况比物理环境要复杂些,其一是因为物理机网卡发生“形变”成虚拟交换机之后网卡丧失了RSS功能,其二是由于物理机上运行了若干台虚机,物理机和虚机通过相同的网卡接收数据包,所以需要寻求同等有效的方法来平衡网络的CPU开销,并同时保证虚机的网络性能。VMQ技术因需而生,VMQ是一种特殊的队列,采用和网卡硬件类似的队列,并采用类似于RSS为队列中断不同的CPU逻辑核的机制。所不同的是,VMQ筛选和分配数据包与网卡硬件队列的逻辑不一样,在只有物理机的情况下,物理机的网卡只考虑物理机自己数据队列,而在虚拟化环境中虚拟交换机不仅要平衡物理机的队列还要照顾虚机的队列。

在介绍VMQ工作原理之前,我们先来了解虚拟交换机数据包的路由路径,Hyper-V虚拟交换机存在两种队列—VMQ和默认队列。默认队列的数据先后通过虚拟交换机的路由、筛选、扩展、访问控制列表和转发路径,最后由虚机总线进行数据分发,如图3所示。

<图3 虚拟交换机数据转发路径>

VMQ队列在分发数据给队列之前先将虚机虚拟网卡的MAC地址收集起来,然后通过VMQ MAC筛选器为启用了VMQ的虚机分配VMQ队列,未启用VMQ的虚机和不能匹配VMQ MAC筛选器的数据将继续放置在默认队列里。VMQ队列不像默认队列一样通过完整的路由、筛选、扩展、访问控制列表和转发路径,而是“插队”到扩展通过更少的路由代码发送数据给虚机总线,数据由虚机总线发送给虚拟网卡后,虚机使用虚拟RSS(vRSS)技术为虚拟网卡上的队列中断虚拟CPU,如图4所示。

<图4 VMQ队列和默认队列>

从图4中我们可以清楚地认识到VMQ带来的好处。如果虚机网卡属性启用了VMQ功能,虚拟交换机将绕过虚拟交换机层层路由代码,如此一来可以保证数据能够精确而快速地将转发给虚机,对比没有VMQ的情况下,不但可以减少处理路由所需CPU资源占用,而且可以降低数据传送的延迟。

VMQ又有动态和静态的区分,静态VMQ指的是VMQ队列和中断的CPU逻辑核关联关系是固定的。图4是典型的静态VMQ,网卡里给虚拟1分配的VMQ队列和逻辑CPU1关联,给虚拟2分配的VMQ队列和逻辑CPU2关联,在虚机1和虚机2整个生命周期内不会改变,可以认为虚机1的数据一直由逻辑CPU1处理,而虚机2的数据一直由逻辑CPU2处理。静态VMQ在虚机关联的CPU繁忙时可能会导致虚机网络处理变慢,因此从Windows Server 2012 R2开始引入了动态VMQ的机制,动态VMQ更加智能,顾名思义动态VMQ允许虚机网络根据负载和其关联的逻辑CPU进行动态关联调整。如图5所示,当逻辑CPU2处于相对空闲状态时,虚机1和虚机2的VMQ队列都关联到逻辑CPU2。

<图5 动态VMQ>

在了解VMQ和动态VMQ基本原理后,我们可以实际了解下网卡的RSS和虚拟网卡的vRSS默认接收队列数和默认使用处理器数量信息,通过以下示例命令和结果可以显示网卡的队列数和使用的处理器数,示例中的Ethernet 4这块网卡RSS默认接收队列数为8,默认使用最多处理器数量为16

PS C:\> Get-NetworkAdapterRss -Name “Ethernet 4”

Name

: Ethernet 4

InterfaceDescription

: Intel Ethernet CNA X540-T2 #2

Enabled

: True

NumberOfReceiveQueues

: 8

Profile

: NUMAStatic

BaseProcessor:[Group:Number] [Group:Number] [Group:Number] [Group:Number]

: 0

MaxProcessor:[Group:Number]【[][Group:Number]

: :

MaxProcessors

: 16

其中几个重要的参数说明如下:

l Enabled:启用或者禁用RSS;

l BaseProcessor:系统分配给网卡的最小处理器数量;[Group:Number] – 处理器组数量和处理器数量比。

l MaxProcessor: 分配给网卡的最大处理器数量;[Group:Number] - 处理器组数量和处理器数量比。

l MaxProcessors:分配给网卡的处理器总数的最大值。

我们可以通过Set-NetAdapter命令设置参与接收队列数和RSS中断的最大CPU数量,如下示例将网卡Ethernet 4的RSS默认接收队列数为16。

PS C:\> Set-NetworkAdapterRss -Name “Ethernet 4” -NumberOfReceiveQueues 16

Name

: Ethernet 4

InterfaceDescription

: Intel Ethernet CNA X540-T2 #2

Enabled

: True

NumberOfReceiveQueues

: 16

Profile

: NUMAStatic

BaseProcessor:[Group:Number] [Group:Number] [Group:Number] [Group:Number]

: 0

MaxProcessor:[Group:Number]【[][Group:Number]

: :

MaxProcessors

: 16

虚机VMQ开启关闭也比较简单,默认情况下,Hyper-V虚机会启用VMQ功能。我们可以依据虚机是否需要VMQ和实际的网卡性能进行开启或者关闭。如果虚机过多而网卡的VMQ队列又不足时,我们还可以适时为启用了VMQ的虚机设置VMQ权重,权重高的虚机网络数据将优先置于VMQ队列,反之亦然,默认的VMQ权重是100,如下示例所示

PS C:\> Get-VMNetworkAdapter -VMName VM01 |fl VMQweight VMQWeight : 100

要更改虚机VMQ权重,可以通过PowerShell命令进行设置,示例命令如下:

PS C:\> Get-VMNetworkAdapter -VMName vmname -VMQweight 50

本文分享自微信公众号 - 华来四Azure混合云(sysinternal),作者:黄利军

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-09-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Azure部署Azure Stack技巧

    Azure Stack混合云的POC正式版已经发布了,盆盆已经写了十余篇有关Azure Stack的文章,您可以点击公众号右下方的菜单去阅读,有图有真相!

    盆盆
  • 101-Hyper-V 虚拟CPU分配探讨.docx

    我该为我的物理服务器分配多少虚拟CPU给虚机才合理,分配比1:1,2:1,听说还可以到8:1?

    盆盆
  • 国内账号部署Azure私有云,该如何搞定App Service?

    可能您会说,前段时间不是已经写过一篇类似的文章了吗?(参考这里Azure Stack App Service部署测试),由于那篇文章介绍的是TP3 Refres...

    盆盆
  • 取消开机时显示DHCP

    集成网卡解决方法: 开机按Del键进入Bios->Integrated Peripherals ->Onboard LAN Boot Rom 改为Disabl...

    杨强生
  • Kafka和消息队列之间的超快速比较

    本文的目的是让读者快速了解Kafka与消息队列之间的关系,告诉读者为什么会考虑使用它的原因。以下为译文。 Kafka最初是由Linkedin社区开发的一项技术。...

    CSDN技术头条
  • 如何让 HelloWorld.apk 体积最小

    按照最新 ADT 的默认设置(如下图所示)创建一个最简单的 HelloWorld 程序,会发现最后生成的 apk 文件大小就已经达到了惊人的 903KB。如果只...

    mzlogin
  • 黑苹果安装手记(二)

    小编也是小白,现学现卖,现在仅能到把自己电脑的驱动都完善了,于是小编也写一下自己安装的过程,希望能让像我一样的小白同学也能装上黑苹果。

    简单并不简单
  • 联姻A股:中芯国际的国产“芯”梦

    近日,国内晶圆代工龙头中芯国际发布公告,宣布将谋求科创板上市。根据上市公告,中芯国际将发行的人民币股份初始数目不超过16.85亿股,占不超过截止2019年12月...

    刘旷
  • npm 创建 node.js 项目

    故,使用npm 可以对象项目的操作 在package.json中,script键可以直接项目进行操作

    一个会写诗的程序员
  • Python结巴分词,字符串余弦相似度算法实现关键词筛选及整理

    字符串余弦相似性算法是通过利用我们初中就学过的三角函数中的余弦定理来计算两个字符串的相似度,它是定义在向量空间模型(Vector Space Model)中的。

    二爷

扫码关注云+社区

领取腾讯云代金券