通过虚拟化,企业可以将服务器、存储和网络等资源划分为多个虚拟资源,实现资源的隔离、分配和管理,从而提高资源利用率和灵活性
在众多的虚拟化技术中,Microsoft Hyper-V凭借其原生集成、高性能、高安全性和广泛兼容性等核心优势,展现出了强大的竞争力
而VMQ(虚拟机队列)技术,则是Hyper-V中一项至关重要的性能优化技术
Hyper-V虚拟化技术的优势 Hyper-V是微软公司开发的虚拟化技术,它集成到Windows Server操作系统中,不仅易于安装、管理和维护,还提供了高级功能,如网络虚拟化和存储虚拟化
Hyper-V的主要优点包括: 1.集成性高:Hyper-V与Windows Server操作系统集成得非常紧密,使得Hyper-V虚拟化管理可以与Windows Server本地管理工具(如Server Manager)集成,简化了管理和监控
2.支持广泛:Hyper-V支持多种操作系统,包括Windows、Linux、FreeBSD等,还支持多种硬件平台,如x86、x64、IA-64和ARM架构等
3.安全性高:Hyper-V提供了一些内置的安全功能,如安全启动和保护措施,保护虚拟机和主机免受恶意软件和攻击
4.管理方便:Hyper-V的管理工具比较容易上手,同时支持PowerShell命令行,可以在自动化脚本中使用
5.性能稳定:Hyper-V的性能非常稳定,支持实时迁移和动态优化等功能,确保在运行虚拟机时保持最佳性能
虚拟化环境中的网络性能挑战 在传统的物理服务器上,网卡接收网络数据的方式较为简单
然而,随着多核CPU的出现,传统的处理方式开始面临挑战
由于网卡不支持将网络流量中断到多个逻辑核,而是中断到其中一个逻辑核进行处理,这导致CPU使用不平均,降低了CPU处理网络流量的效率
为了解决这一问题,大部分网卡现在都已经支持接收端缩放(Receive Side Scaling,RSS)技术
RSS技术的核心在于,物理机网卡如果支持多个硬件接收队列,则会将接收的数据分发到网卡的多个队列里
在多核的物理服务器上,通过网卡的RSS技术将多个队列中断不同的CPU逻辑核,从而提高数据接收效率
RSS技术的目的在于为队列找到最佳的CPU逻辑核,以平衡网络的CPU开销
然而,在虚拟化环境中,情况变得更加复杂
一方面,物理机网卡在“形变”成虚拟交换机后丧失了RSS功能;另一方面,物理机和虚拟机通过相同的网卡接收数据包,需要寻求同等有效的方法来平衡网络的CPU开销,并同时保证虚拟机的网络性能
VMQ技术正是在这种背景下应运而生
VMQ技术的工作原理与优势 VMQ(虚拟机队列)是一种特殊的队列,它采用和网卡硬件类似的队列,并采用类似于RSS的机制,为队列中断不同的CPU逻辑核
不过,VMQ筛选和分配数据包与网卡硬件队列的逻辑有所不同
在只有物理机的情况下,物理机的网卡只考虑物理机自己的数据队列;而在虚拟化环境中,虚拟交换机不仅要平衡物理机的队列,还要照顾虚拟机的队列
Hyper-V虚拟交换机存在两种队列:VMQ和默认队列
默认队列的数据通过虚拟交换机的路由、筛选、扩展、访问控制列表和转发路径,最后由虚拟机总线进行数据分发
而VMQ队列在分发数据给队列之前,先将虚拟机虚拟网卡的MAC地址收集起来,然后通过VMQ MAC筛选器为启用了VMQ的虚拟机分配VMQ队列
未启用VMQ的虚拟机和不能匹配VMQ MAC筛选器的数据将继续放置在默认队列里
VMQ队列不像默认队列一样通过完整的路由、筛选、扩展、访问控制列表和转发路径,而是“插队”到扩展,通过更少的路由代码发送数据给虚拟机总线
数据由虚拟机总线发送给虚拟网卡后,虚拟机使用虚拟RSS(vRSS)技术为虚拟网卡上的队列中断虚拟CPU
如果虚拟机网卡属性启用了VMQ功能,虚拟交换机将绕过虚拟交换机层层路由代码,保证数据能够精确而快速地转发给虚拟机
与没有VMQ的情况相比,这不仅可以减少处理路由所需的CPU资源占用,还可以降低数据传送的延迟
VMQ又有动态和静态的区分
静态VMQ指的是VMQ队列和中断的CPU逻辑核关联关系是固定的
在虚拟机的整个生命周期内,这种关联关系不会改变
然而,静态VMQ在虚拟机关联的CPU繁忙时可能会导致虚拟机网络处理变慢
因此,从Windows Server 2012 R2开始,引入了动态VMQ的机制
动态VMQ更加智能,允许虚拟机网络根据负载和其关联的逻辑CPU进行动态关联调整
VMQ技术的实际应用与优化 VMQ技术在Hyper-V虚拟化环境中的实际应用,能够显著提升网络性能
默认情况下,Hyper-V虚拟机会启用VMQ功能
管理员可以根据虚拟机是否需要VMQ和实际的网卡性能进行开启或关闭
如果虚拟机过多而网卡的VMQ队列又不足时,还可以为启用了VMQ的虚拟机设置VMQ权重
权重高的虚拟机网络数据将优先置于VMQ队列,反之亦然
在实际应用中,管理员可以通过PowerShell命令查看和设置网卡的RSS和虚拟网卡的vRSS默认接收队列数和默认使用处理器数量信息
例如,通过以下命令可以显示网卡的队列数和使用的处理器数: Get-NetworkAdapterRss -Name “Ethernet 4” 管理员还可以通过以下命令设置网卡Ethernet 4的RSS默认接收队列数为16: Set-NetworkAdapterRss -Name “Ethernet 4” -NumberOfReceiveQueues 16 同样,管理员可以通过PowerShell命令查看和设置虚拟机的VMQ权重
例如,通过以下命令可以查看虚拟机VM01的VMQ权重: Get-VMNetworkAdapter -VMName VM01 | fl