千家信息网

Hyper-V 性能加速之VMQ

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,善假于"物"--网卡RSS技术在介绍VMQ之前,我们先来看看在传统的物理服务器上,网卡是如何接收网络数据的。在多核CPU出现的时候,因为网卡不支持将网络流量中断到多个逻辑核而是中断到其中一个逻辑核进行
千家信息网最后更新 2026年11月03日Hyper-V 性能加速之VMQ


善假于"物"--网卡RSS技术


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

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

而现在大部分的网卡都已经支持接收端缩放(Receive SideScaling,以下简称为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繁忙时可能会导致虚机网络处理变慢,因此从WindowsServer 2012 R2开始引入了动态VMQ的机制,动态VMQ更加智能,顾名思义动态VMQ允许虚机网络根据负载和其关联的逻辑CPU进行动态关联调整。如图5所示,当逻辑CPU2处于相对空闲状态时,虚机1和虚机2的VMQ队列都关联到逻辑CPU2。


图5 动态VMQ

在了解VMQ和动态VMQ基本原理后,我们可以实际了解下网卡的RSS和虚拟网卡的vRSS默认接收队列数和默认使用处理器数量信息,通过以下示例命令和结果可以显示网卡的队列数和使用的处理器数,示例中的Ethernet4这块网卡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

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

  • Enabled:启用或者禁用RSS;

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

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

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

我们可以通过Set-NetAdapter命令设置参与接收队列数和RSS中断的最大CPU数量,如下示例将网卡Ethernet4的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:\> Set-NetworkAdapterRss -Name  "Ethernet 4" -NumberOfReceiveQueues 16

VMQWeight : 100

队列 虚机 网卡 数据 逻辑 处理 物理 处理器 数量 网络 交换机 动态 关联 路由 分配 多个 技术 如图 情况 示例 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技行业发展 互联网科技公司税收优惠 互联网科技公司发展 互联网与新科技 天津摩尔互联网科技 汇久创客互联网科技 中国航天科技大学国际工业互联网 知域互联网科技有限公司大骗子 崇明区互联网教育科技售后服务 玉溪互联网科技怎么选 搜狐科技互联网 中天科技中国工业互联网 35岁以上互联网科技行业 宁波跨境商互联网科技有限公司 广东鹅鹅鹅互联网科技有限公司 广西科技产业互联网是什么 版纳互联网科技选哪家 张家口科技产业互联网平台 科技信息时代互联网发展 恒生科技互联网指数十大成分股 咖啡豆 科技金融是不是互联网金融 互联网中国科技 互联网科技与金融科技 哈尔滨新华互联网科技 成都仁贤领冠互联网科技有限公司 老年人脱离互联网科技的作文 受益于互联网科技的高速发展 瑞安市蟠桃会互联网科技有限公司 广州全民伙伴互联网科技有限公司
0