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

时间: 2024-11-10 14:54:40

Hyper-V 性能加速之VMQ的相关文章

win8/win10 自带Hyper V虚拟机

为什么是hyperV而不是vmware workstation或者virturalBox? 萝卜白菜,各有所爱.这里不比较数据,不深究技术,我选择的理由很简单:系统自带,不用安装额外的软件,而且性能也还可以. hyperV最早集成于win8中,win7及更老版本是没有此功能的.打开"任务管理器",在"性能"选项卡"虚拟化"中可到启用状态.可在BIOS设备.安全或CPU选项卡中找到虚拟化选项. BIOS中开启硬件支持后,可在"添加删除程序

Hyper - V (四)

安装虚拟机 新建虚拟机 为新建的虚拟机起名,默认保存路径为前面设置的默认路径 指定虚拟机内存大小 指定虚拟机网卡连接到外部网络还是内部网络(或专用网络) 创建虚拟硬盘,指定硬盘存储路径及硬盘大小 选择安装文件的引导路径,支持光盘安装,ISO安装等方式. 这里我们选择通过光驱引导的方式来安装系统 完成虚拟机设置. 右键点击新建的虚拟机,设置可以更改虚拟机的配置选项. 将ISO文件加载到虚拟机中,即可以实现光盘引导功能. 启动虚拟机-- 安装系统 Hyper - V (四),布布扣,bubuko.c

Hyper - V (三)

创建内部网络及专用网络 内部网络:不与外部通讯的网络,仅与物理机及虚拟机之间通讯. 专用网络:不与外部及物理机通讯的网络,仅支持虚拟机之间的通讯. 添加内部网络 单击虚拟网络管理器 2. 点击新建虚拟网络 -- 内部 -- 添加 3. 此时将新建立一个内部的虚拟网卡 在添加内网通信的IP地址即可. Hyper - V (三),布布扣,bubuko.com

黄聪:PHP代码性能加速-开启Zend OPcache-优化CPU

说明 PHP 5.5+版本以上的,可以使用PHP自带的opcache开启性能加速(默认是关闭的).对于PHP 5.5以下版本的,需要使用APC加速,这里不说明,可以自行上网搜索PHP APC加速的方法. PHP开启opcache方法 1.打开php.ini文件 2.找到:[opcache],设置为: [opcache] ; dll地址 zend_extension=php_opcache.dll ; 开关打开 opcache.enable=1 ; 开启CLI opcache.enable_cli

Hyper v 单网卡 外部网络

先说一下环境: WIN 8.1 单网卡(有 无线 和 有线网卡, 但是没有多余的网络接口可插,还是等于单网卡) Hyper V 有3种虚拟交换机类型: 专用 / 内部 / 外部 各有各的用处, 我理解也不多,不多嘴误导大家. 今天说这个,是因为要做CSS和JS兼容调试, 开发用的都是IE11,用IE11的调试工具将文档模式调为 IE8 ,发现 jQuery.Validation 不能常运行. 但是用虚拟机装的 XP上直接用IE8 ,却没有任何问题,真的很蛋疼. 工作用的有两台电脑,一台装的是WI

PHP5.6+7代码性能加速-开启Zend OPcache-优化CPU

说明 PHP 5.5+版本以上的,可以使用PHP自带的opcache开启性能加速(默认是关闭的).对于PHP 5.5以下版本的,需要使用APC加速,这里不说明,可以自行上网搜索PHP APC加速的方法. PHP开启opcache方法 1.打开php.ini文件(如果centos的/usr/local/lib目录下没有php.ini,那么从php解压后源文件中复制一个过去,比如:php.ini-production) 2.找到:[opcache],设置为: [opcache] ; dll地址 ze

Hyper - V (六)安装Hyper - V系统集成服务

安装Hyper - V系统集成服务 作用: 操作系统关闭 -- 当物理机关机时,Hyper - V 上的虚拟机将先于物理机关机.如不安装此服务,虚拟机将不会自动关机而造成类似于直接断电. 时间同步 -- 即虚拟机与物理机的时间同步 数据交换 -- 物理机可以查看到虚拟机的相关信息 ,如计算机名等 检测信号 -- 当虚拟机假死或无响应状态时,虚拟机会发送重启等信号 备份(卷快照) -- 开启备份功能 如何安装: 点击操作 --  插入集成服务安装盘 点击安装即可,安装完毕后重启 Hyper - V

[PHP] - 性能加速 - 开启opcache

说明 PHP 5.5+版本以上的,可以使用PHP自带的opcache开启性能加速(默认是关闭的).对于PHP 5.5以下版本的,需要使用APC加速,这里不说明,可以自行上网搜索PHP APC加速的方法. PHP开启opcache方法 1.打开php.ini文件 2.找到:[opcache],设置为: [opcache] ; dll地址 zend_extension=php_opcache.dll ; 开关打开 opcache.enable=1 ; 开启CLI opcache.enable_cli

性能加速 - 开启opcache

说明 PHP 5.5+版本以上的,可以使用PHP自带的opcache开启性能加速(默认是关闭的).对于PHP 5.5以下版本的,需要使用APC加速,这里不说明,可以自行上网搜索PHP APC加速的方法. PHP开启opcache方法 1.打开php.ini文件 2.找到:[opcache],设置为: [opcache] ; dll地址 zend_extension=php_opcache.dll ; 开关打开 opcache.enable=1 ; 开启CLI opcache.enable_cli