管理 Hyper-V 虚拟机监控程序调度程序类型

慈云数据 2023-07-28 网络资讯 550 0

本文内容

适用于:Windows Server 2022、Windows 10、Windows Server 2016、Windows Server 版本 1709、Windows Server 版本 1803、Windows Server 2019

本文介绍首先在 Windows Server 2016 中引入的虚拟处理器调度逻辑的新模式。 这些模式(调度程序类型)决定了 Hyper-V 虚拟机监控程序如何跨来宾虚拟处理器分配和管理工作。 Hyper-V 主机管理员可以选择最适合来宾虚拟机 (VM) 的虚拟机监控程序调度程序类型,并配置 VM 以利用调度逻辑。

注意

需要做出更新才能使用本文档中所述的虚拟机监控程序调度程序功能。 有关详细信息,请参阅。

背景

在讨论 Hyper-V 虚拟处理器调度背后的逻辑和控制之前,最好先回顾一下本文中涉及的基本概念。

了解 SMT

同时多线程 (SMT) 是新式处理器设计中使用的一种技术,它允许处理器的资源由独立的执行线程共享。 SMT 在可能的情况下可以并行化计算并可提高指令吞吐量,因而通常可为大多数工作负载提供适度的性能提升,但是,如果线程之间发生共享处理器资源争用,则 SMT 不会带来性能增益,甚至会导致轻微的性能下降。Intel 和 AMD 均提供支持 SMT 的处理器。 Intel 将其 SMT 产品称为 Intel 超线程技术 (Intel HT)。

在本文中,对 SMT 的描述以及 Hyper-V 使用它的方式同样适用于 Intel 和 AMD 系统。

了解 Hyper-V 如何虚拟化处理器

在考虑虚拟机监控程序调度程序类型之前,了解 Hyper-V 体系结构也很有帮助。 可以在 Hyper-V 技术概述中找到一般摘要。 以下是本文的重要概念:

虚拟机监控程序调度程序类型

从 Windows Server 2016 开始,Hyper-V 虚拟机监控程序支持多种调度程序逻辑模式,这些模式决定了虚拟机监控程序如何在底层逻辑处理器上调度虚拟处理器。 这些调度程序类型为:

经典调度程序

自 Windows Hyper-V 虚拟机监控程序问世以来,经典调度程序一直是所有虚拟机监控程序版本(包括 Windows Server 2016 Hyper-V)的默认设置。 经典调度程序为来宾虚拟处理器提供公平抢占式轮循调度模型。

经典调度程序类型最适合用于绝大多数传统 Hyper-V 用途 – 私有云、托管服务提供商等。 其性能特征众所周知并已经过最好的优化,支持广泛的虚拟化方案,例如 VP 对 LP 的过度订阅、同时运行许多异构 VM 和工作负载、运行较大规模的高性能 VM、无限制支持 Hyper-V 的完整功能集,等等。

核心调度程序

虚拟机监控程序核心调度程序在 Windows Server 2016 和 Windows 10 版本 1607 中引入,是可以取代经典调度程序逻辑的新技术。 核心调度程序为来宾工作负载隔离提供可靠的安全边界,并降低了在启用 SMT 的虚拟化主机上运行的 VM 内部工作负载的性能可变性。 核心调度程序允许在同一个启用 SMT 的虚拟化主机上同时运行 SMT 和非 SMT 虚拟机。

核心调度程序利用虚拟化主机的 SMT 拓扑,选择性地将 SMT 对公开给来宾虚拟机,并将同一虚拟机中的来宾虚拟处理器组调度到 SMT 逻辑处理器组。 这是以对称方式实现的,因此如果 LP 以两个为一组,则以两个为一组的形式调度 VP,并且核心永远不会在 VM 之间共享。为未启用 SMT 的虚拟机调度 VP 时,该 VP 在运行时会占用整个核心。

核心调度程序的整体结果是:

从 Windows Server 2019 开始,默认会使用核心调度程序。 在 Windows Server 2016 上,核心调度程序是可选的,必须由 Hyper-V 主机管理员显式启用,而经典调度程序是默认设置。

禁用主机 SMT 时的核心调度程序行为

如果虚拟机监控程序配置为使用核心调度程序类型,但 SMT 功能在虚拟化主机上已禁用或不存在,则虚拟机监控程序将使用经典调度程序行为,而不管虚拟机监控程序调度程序类型设置如何。

根调度程序

根调度程序是在 Windows 10 版本 1803 中引入的。 启用根调度程序类型后,虚拟机监控程序会将工作调度控制权移交给根分区。 根分区的 OS 实例中的 NT 调度程序管理系统 LP 调度工作的所有方面。

根调度程序解决了支持实用工具分区以提供可靠工作负载隔离时固有的独特要求,与 Windows Defender 应用程序防护 (WDAG) 一起使用。 在这种情况下,将调度责任留给根 OS 可带来多种优势。 例如,适用于容器方案的 CPU 资源控制可与实用工具分区一起使用,从而简化管理和部署。 此外,根 OS 调度程序随时可以收集有关容器内工作负载 CPU 利用率的指标,并将此数据用作适用于系统中所有其他工作负载的同一调度策略的输入。 这些相同的指标还有助于将应用程序容器中完成的工作明确归因于主机系统。 对于传统的虚拟机工作负载,跟踪这些指标更加困难,其中一些代表所有运行中 VM 的工作在根分区中发生。

在客户端系统上使用根调度程序

虚拟服务器未启用远程_启用虚拟远程器服务系统_启用虚拟远程器服务命令

从 Windows 10 版本 1803 开始,默认仅在客户端系统上使用根调度程序,在其中可以启用虚拟机监控程序以支持基于虚拟化的安全性和 WDAG 工作负载隔离,并使将来使用异构核心体系结构的系统可正常运行。 这是客户端系统唯一支持的虚拟机监控程序调度程序配置。 管理员不应尝试替代 Windows 10 客户端系统上的默认虚拟机监控程序调度程序类型。

虚拟机 CPU 资源控制和根调度程序

在启用虚拟机监控程序根调度程序后,Hyper-V 提供的虚拟机处理器资源控制将不受支持,因为根操作系统的调度程序逻辑将全局管理主机资源,并且不知道 VM 的具体配置设置。 仅当虚拟机监控程序直接控制 VP 调度时(例如,使用经典和核心调度程序类型进行控制),Hyper-V 的按 VM 处理器资源控制(例如上限、权重和预留)才适用。

在服务器系统上使用根调度程序

目前不建议在服务器上将根调度程序与 Hyper-V 一起使用,因为其性能特征尚未完全得到成型和优化,不一定能适应许多服务器虚拟化部署中常见的各种工作负载。

在来宾虚拟机中启用 SMT

将虚拟化主机的虚拟机监控程序配置为使用核心调度程序类型后,可以根据需要将来宾虚拟机配置为使用 SMT。 公开将 VP 超线程化到来宾虚拟机这一事实,可使来宾操作系统中的调度程序以及 VM 中运行的工作负载能够检测 SMT 拓扑,并在其自身的工作调度中使用该拓扑。 在 Windows Server 2016 上,默认未配置来宾 SMT,必须由 Hyper-V 主机管理员显式启用。 从 Windows Server 2019 开始,在主机上创建的新 VM 默认将继承主机的 SMT 拓扑。 也就是说,在每个核心有 2 个 SMT 线程的主机上创建的 9.0 版 VM 也会看到每个核心有 2 个 SMT 线程。

必须使用 PowerShell 在来宾虚拟机中启用 SMT;Hyper-V 管理器中未提供用户界面。若要在来宾虚拟机中启用 SMT,请使用足够的权限打开 PowerShell 窗口,然后键入:

Set-VMProcessor -VMName  -HwThreadCountPerCore 

其中 是来宾 VM 看到的每核心 SMT 线程数。请注意,指定 = 0 会将 HwThreadCountPerCore 值设置为与主机的每核心 SMT 线程计数值相匹配。

注意

从 Windows Server 2019 开始支持设置 HwThreadCountPerCore = 0。

以下系统信息示例取自虚拟机中运行的来宾操作系统,该虚拟机有 2 个虚拟处理器并启用了 SMT。 来宾操作系统正在检测属于同一核心的 2 个逻辑处理器。

显示已启用 SMT 的来宾 VM 中的 msinfo32 的屏幕截图

在 Windows Server 2016 Hyper-V 上配置虚拟机监控程序调度程序类型

Windows Server 2016 Hyper-V 默认使用经典虚拟机监控程序调度程序模型。 可以选择性地将虚拟机监控程序配置为使用核心调度程序,以通过将来宾 VP 限制为在相应的物理 SMT 对上运行来提高安全性,并支持将启用了 SMT 调度的虚拟机用于其来宾 VP。

注意

Microsoft 建议所有运行 Windows Server 2016 Hyper-V 的客户选择核心调度程序,以确保其虚拟化主机得到最佳保护,免受潜在恶意来宾 VM 的侵害。

Windows Server 2019 Hyper-V 默认使用核心调度程序

为帮助确保将 Hyper-V 主机部署在最佳安全配置中,Windows Server 2019 Hyper-V 现在默认会使用核心虚拟机监控程序调度程序模型。 主机管理员可以选择性地将主机配置为使用传统的经典调度程序。 在替代调度程序类型默认设置之前,管理员应仔细阅读、理解并考虑每种调度程序类型对虚拟化主机的安全性和性能影响。 有关详细信息,请参阅关于 Hyper-V 虚拟机监控程序调度程序类型的选择。

所需的更新

注意

需要做出以下更新才能使用本文档中所述的虚拟机监控程序调度程序功能。 这些更新包括为支持新的 hypervisorschedulertype BCD 选项(必须为主机配置使用此选项)而需要做出的更改。

版本发布所需的更新知识库文章

Windows Server 2016

1607

2018.07 C

KB4338822

虚拟服务器未启用远程_启用虚拟远程器服务系统_启用虚拟远程器服务命令

Windows Server 2016

1703

2018.07 C

KB4338827

Windows Server 2016

1709

2018.07 C

KB4338817

Windows Server 2019

1804

在 Windows Server 上选择虚拟机监控程序调度程序类型

虚拟机监控程序调度程序配置是通过 hypervisorschedulertype BCD 条目控制的。

若要选择调度程序类型,请使用管理员特权打开命令提示符

bcdedit /set hypervisorschedulertype type

其中 type 是下列其中一项:

必须重启系统,对虚拟机监控程序调度程序类型所做的任何更改才会生效。

注意

Windows Server Hyper-V 目前不支持虚拟机监控程序根调度程序。 Hyper-V 管理员不应尝试为服务器虚拟化方案配置根调度程序。

确定当前调度程序类型

可以通过在事件查看器的系统日志中检查最近的虚拟机监控程序启动事件 ID 2,来确定当前使用的虚拟机监控程序调度程序类型,该事件会报告虚拟机监控程序启动时配置的虚拟机监控程序调度程序类型。 可以通过 Windows 事件查看器或 PowerShell 获取虚拟机监控程序启动事件。

虚拟机监控程序启动事件 ID 2 表示虚拟机监控程序调度程序类型,其中:

显示虚拟机监控程序启动事件 ID 2 详细信息的屏幕截图

显示虚拟机监控程序启动事件 ID 2 的事件查看器的屏幕截图

使用 PowerShell 查询 Hyper-V 虚拟机监控程序调度程序类型启动事件

若要使用 PowerShell 查询虚拟机监控程序事件 ID 2,请在 PowerShell 提示符下输入以下命令。

Get-WinEvent -FilterHashTable @{ProviderName="Microsoft-Windows-Hyper-V-Hypervisor"; ID=2} -MaxEvents 1

显示使用 PowerShell 查询虚拟机监控程序启动事件 ID 2 和结果的屏幕截图

微信扫一扫加客服

微信扫一扫加客服

点击启动AI问答
Draggable Icon