前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Hyper-V性能加速之VMQ

Hyper-V性能加速之VMQ

作者头像
盆盆
发布2019-04-24 14:43:00
2.8K0
发布2019-04-24 14:43:00
举报
文章被收录于专栏:华来四Azure混合云

内容概要 优化虚机网络和降低网络传输数据对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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-09-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 华来四Azure混合云 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Hyper-V虚机队列的工作方式
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档