Hyper-V 主机 CPU 资源管理
Windows Server 2016 或更高版本中引入的 Hyper-V 主机 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 个 LP 的大规模系统上,根不需要超过 64 个根 VP 即可为大量来宾 VM 和来宾 VP 提供足够的支持 - 事实上,通常少于 64 个根 VP 就足够了,当然这取决于来宾 VM 的数量和大小、正在运行的特定工作负载等。
“Minroot”概念今天仍在使用。 事实上,即使 Windows Server 2016 Hyper-V 将其对主机 LP 的最大体系结构支持限制增加到 512 个 LP,根分区仍将限制为最多 320 个 LP。
使用 Minroot 约束和隔离主机计算资源
由于 Windows Server 2016 Hyper-V 中默认高阈值为 320 个 LP,因此 Minroot 配置将仅在最大的服务器系统上使用。 但是,Hyper-V 主机管理员可将此功能配置为更低的阈值,从而利用此功能大大限制根分区可用的主机 CPU 资源量。 当然,必须仔细选择要使用的根 LP 的具体数量,以支持分配给主机的 VM 和工作负载的最大需求。 但是,可以通过仔细评估和监视生产工作负载来确定主机 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 处于活动状态时,任务管理器将显示当前分配给主机的逻辑处理器数,以及系统中的逻辑处理器总数。