Hyper-V Windows Server 2016 或更高版本中引入的主机 CPU 资源控制允许 Hyper-V 管理员更好地管理和分配“根”或管理分区与来宾 VM 之间的主机服务器 CPU 资源。 使用这些控件,管理员可以将主机系统的一部分处理器专用于根分区。 这可以将 Hyper-V 主机中完成的工作与来宾虚拟机中运行的工作负荷隔离开来,方法是在系统处理器的单独子集上运行这些工作负荷。
有关 Hyper-V 主机的硬件的详细信息,请参阅 Windows 10 Hyper-V 系统要求。
背景
在设置 Hyper-V 主机 CPU 资源的控件之前,查看 Hyper-V 体系结构的基础知识很有帮助。 可以在 “Hyper-V 体系结构 ”部分找到一般摘要。 以下是本文的重要概念:
Hyper-V 创建和管理虚拟机分区,在虚拟机监控程序控制下,在其中分配和共享计算资源。 分区在所有来宾虚拟机之间以及来宾 VM 与根分区之间提供强隔离边界。
根分区本身是虚拟机分区,尽管它具有唯一的属性和比来宾虚拟机更大的特权。 根分区提供管理服务,用于控制所有来宾虚拟机、为来宾提供虚拟设备支持,以及管理来宾虚拟机的所有设备 I/O。 Microsoft强烈建议不要在主机分区中运行任何应用程序工作负荷。
根分区的每个虚拟处理器(VP)将 1:1 映射到基础逻辑处理器(LP)。 主机的虚拟处理器(VP)将始终在同一个基础逻辑处理器(LP)上运行——根分区的虚拟处理器(VP)不会进行迁移。
默认情况下,运行主机 VP 的 LP 也可以运行来宾 VPs。
虚拟机监控程序可能会安排来宾 VP 在任何可用的逻辑处理器上运行。 虽然虚拟机监控程序计划程序在计划来宾 VP 时会注意考虑时态缓存位置、NUMA 拓扑和许多其他因素,但最终可以在任何主机 LP 上计划 VP。
最小根或“Minroot”配置
早期版本的 Hyper-V 的体系结构最大限制为每个分区 64 个 VP。 这同时应用于根分区和来宾分区。 由于在高端服务器上出现超过 64 个逻辑处理器的系统,Hyper-V 还演变了其主机规模限制以支持这些更大的系统,一度支持最多 320 个 LP 的主机。 然而,在当时打破每个分区 64 个 VP 的限制带来了几项挑战,并引入了复杂性,使得支持每个分区超过 64 个 VP 变得非常困难。 若要解决此问题,Hyper-V 将提供给根分区的 VP 数限制为 64,即使基础计算机有更多的逻辑处理器可用。 虚拟机监控程序将继续利用所有可用的 LP 来运行来宾 VP,但人为地将根分区限制为 64。 此配置称为“最小根”或“minroot”配置。 性能测试证实,即使在具有超过64个逻辑处理器的大型系统上,根虚拟处理器也不需要超过64个来为大量来宾虚拟机和来宾虚拟处理器提供足够的支持——事实上,通常根虚拟处理器远少于64个就足够了,当然这取决于来宾虚拟机的数量和大小、运行的具体工作负载等。
“Minroot”概念今天仍在使用。 事实上,即使 Windows Server 2016 Hyper-V 将主机 LP 的最大体系结构支持限制增加到 512 个 LP,根分区仍将限制为最多 320 个 LP。
使用 Minroot 约束和隔离主机计算资源
由于 Windows Server 2016 Hyper-V 中的默认阈值为 320 个 LP,minroot 配置将仅在最大的服务器系统上使用。 但是,此功能可由 Hyper-V 主机管理员配置为低得多的阈值,从而利用此功能来大大限制根分区可用的主机 CPU 资源量。 我们必须谨慎选择使用的根 LP 的具体数量,以支持分配给主机的虚拟机和工作负载的最大需求。 但是,可以通过仔细评估和监视生产工作负荷来确定主机 LP 数目的合理值,并在广泛部署之前在非生产环境中进行验证。
启用和配置 Minroot
Minroot 配置通过虚拟机监控程序 BCD 条目进行控制。 若要启用 minroot,请从具有管理员权限的 cmd 提示符中执行以下作:
bcdedit /set hypervisorrootproc n
其中 n 是根 VP 的数量。
系统必须重新启动,新的根处理器数将在 OS 启动的生存期内保留。 在运行时,无法动态更改 minroot 配置。
如果有多个 NUMA 节点,每个节点将获取 n/NumaNodeCount
处理器。
请注意,对于多个 NUMA 节点,必须确保 VM 的拓扑在每个 NUMA 节点上有足够的可用 LP(即没有根 VP 的 LP)来运行相应 VM 的 NUMA 节点 VP。
验证 Minroot 配置
可以使用任务管理器验证主机的 minroot 配置,如下所示。
当 Minroot 处于活动状态时,任务管理器将显示当前分配给主机的逻辑处理器数,以及系统中的逻辑处理器总数。