管理 Hyper-V Hypervisor 排程器類型

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

本文說明Windows Server 2016中首次引進的新虛擬處理器排程邏輯模式。 這些模式或排程器類型會決定 Hyper-V Hypervisor 如何配置和管理客體虛擬處理器之間的運作方式。 Hyper-V 主機管理員可以選取最適合客體虛擬機器的 Hypervisor 排程器類型, (VM) ,並設定 VM 以利用排程邏輯。

注意

需要更新,才能使用本檔中所述的 Hypervisor 排程器功能。 如需詳細資訊,請參閱 必要更新

背景

在討論 Hyper-V 虛擬處理器排程背後的邏輯和控制項之前,檢閱本文涵蓋的基本概念會很有説明。

瞭解 SMT

同時多執行緒或 SMT 是現代化處理器設計中使用的技術,可讓處理器的資源由個別的獨立執行執行緒共用。 SMT 通常會藉由盡可能平行處理計算,增加指令輸送量,為大部分工作負載提供適中效能提升,不過,在發生共用處理器資源執行緒之間的爭用時,效能不會增加或甚至稍微遺失效能。 支援 SMT 的處理器可從 Intel 和 AMD 取得。 Intel 將其 SMT 供應專案稱為 Intel Hyper Threading Technology 或 Intel HT。

針對本文的目的,Hyper-V 如何使用 SMT 的描述同樣適用于 Intel 和 AMD 系統。

瞭解 Hyper-V 如何虛擬化處理器

在考慮 Hypervisor 排程器類型之前,瞭解 Hyper-V 架構也很有説明。 您可以在 Hyper-V 技術概觀中找到一般摘要。 以下是本文的重要概念:

  • Hyper-V 會建立和管理虛擬機器分割區,這些分割區會配置及共用計算資源,以控制 Hypervisor。 分割區提供所有客體虛擬機器之間的強式隔離界限,以及客體 VM 與根分割區之間的強式隔離界限。

  • 根分割區本身是虛擬機器磁碟分割,雖然它具有唯一的屬性,而且比客體虛擬機器更高的許可權。 根分割區提供可控制所有客體虛擬機器的管理服務、為來賓提供虛擬裝置支援,以及管理客體虛擬機器的所有裝置 I/O。 Microsoft 強烈建議不要在根分割區中執行任何應用程式工作負載。

  • 根分割區的每個虛擬處理器 (VP) 都會對應至基礎邏輯處理器 (LP) 。 主機 VP 一律會在相同的基礎 LP 上執行 – 根分割區的 VP 沒有移轉。

  • 根據預設,主機 VM 執行所在的 LP 也可以執行客體 VM。

  • Hypervisor 可能會排程客體 VP,以在任何可用的邏輯處理器上執行。 雖然 Hypervisor 排程器負責考慮時態性快取位置、NUMA 拓撲,以及排程客體 VP 時的許多其他因素,但最終可以在任何主機 LP 上排程 VP。

Hypervisor 排程器類型

從Windows Server 2016開始,Hyper-V Hypervisor 支援數種排程器邏輯模式,以決定 Hypervisor 如何排程基礎邏輯處理器上的虛擬處理器。 這些排程器類型如下:

傳統排程器

從Windows Hyper-V Hypervisor 的所有版本開始,傳統排程器都是預設的,包括Windows Server 2016 Hyper-V。 傳統排程器提供客體虛擬處理器的公平共用、先占式迴圈配置資源排程模型。

傳統排程器類型最適合大部分的傳統 Hyper-V 使用 – 適用于私人雲端、裝載提供者等等。 效能特性已充分瞭解,且最適合支援各種虛擬化案例,例如對 LP 的過度訂用帳戶、同時執行許多異質 VM 和工作負載、執行較大的高效能 VM、支援完整功能組的 Hyper-V,以及更多功能。

核心排程器

Hypervisor 核心排程器是傳統排程器邏輯的新替代方案,Windows Server 2016 和 Windows 10 1607 版中引進。 核心排程器提供客體工作負載隔離的強式安全性界限,並降低在啟用 SMT 之虛擬化主機上執行之 VM 內工作負載的效能變化。 核心排程器允許在啟用 SMT 的相同虛擬化主機上同時執行 SMT 和非 SMT 虛擬機器。

核心排程器會利用虛擬化主機的 SMT 拓撲,並選擇性地向客體虛擬機器公開 SMT 配對,並將來自相同虛擬機器的客體虛擬處理器群組排程到 SMT 邏輯處理器群組。 這會以對稱方式完成,如此一來,如果 LP 位於兩個群組中,則 VP 會排程在兩個群組中,而且一個核心永遠不會在 VM 之間共用。 當 VP 排程為未啟用 SMT 的虛擬機器時,該 VP 會在執行時取用整個核心。

核心排程器的整體結果如下:

  • 客體 VM 受限於在基礎實體核心配對上執行,將 VM 隔離至處理器核心界限,進而降低來自惡意 VM 的側通道探查攻擊弱點。

  • 輸送量的變化大幅減少。

  • 效能可能會降低,因為如果只有一組 VP 可以執行,則核心中的其中一個指令資料流程會在另一個閒置時執行。

  • 在客體虛擬機器中執行的 OS 和應用程式可以利用 SMT 行為和程式設計介面 (API) 來控制和分散工作,就像在非虛擬化執行時一樣。

  • 客體工作負載隔離的強式安全性界限 - 客體 VM 受限於基礎實體核心配對上執行,以減少側路探查攻擊的弱點。

從 Windows Server 2019 開始,預設會使用核心排程器。 在Windows Server 2016上,核心排程器是選擇性的,必須由 Hyper-V 主機管理員明確啟用,而傳統排程器是預設值。

已停用主機 SMT 的核心排程器行為

如果 Hypervisor 設定為使用核心排程器類型,但虛擬化主機上已停用或不存在 SMT 功能,則 Hypervisor 會使用傳統排程器行為,而不論 Hypervisor 排程器類型設定為何。

根排程器

根排程器是Windows 10 1803 版引進。 啟用根排程器類型時,Hypervisor 會控制根分割區的工作排程。 根分區 OS 實例中的 NT 排程器會管理排程工作到系統 LP 的所有層面。

根排程器解決了支援公用程式分割區固有的獨特需求,以提供強式工作負載隔離,如同搭配 WDAG) Windows Defender 應用程式防護 (使用。 在此案例中,將排程責任保留給根 OS 提供數個優點。 例如,適用于容器案例的 CPU 資源控制可以與公用程式分割區搭配使用,以簡化管理和部署。 此外,根 OS 排程器可以立即收集容器內工作負載 CPU 使用率的相關計量,並使用此資料作為適用于系統中所有其他工作負載之相同排程原則的輸入。 這些相同的計量也有助於清楚將應用程式容器中完成的工作屬性化為主機系統。 在傳統虛擬機器工作負載中,追蹤這些計量比較困難,其中某些工作代表所有執行中的 VM 會在根分割區中進行。

用戶端系統上的根排程器使用

從 Windows 10 1803 版開始,根排程器預設只會在用戶端系統上使用,其中 Hypervisor 可能支援虛擬化型安全性和 WDAG 工作負載隔離,以及針對未來具有異質核心架構的系統正常運作。 這是用戶端系統唯一支援的 Hypervisor 排程器設定。 系統管理員不應該嘗試覆寫Windows 10用戶端系統上的預設 Hypervisor 排程器類型。

虛擬機器 CPU 資源控制與根排程器

當 Hypervisor 根排程器啟用時,Hyper-V 所提供的虛擬機器處理器資源控制不支援,因為根作業系統的排程器邏輯是全域管理主機資源,而且不知道 VM 的特定組態設定。 Hyper-V 個別 VM 處理器資源控制,例如上限、權數和保留,僅適用于 Hypervisor 直接控制 VP 排程的位置,例如傳統和核心排程器類型。

伺服器系統上的根排程器使用

目前不建議在伺服器上搭配 Hyper-V 使用根排程器,因為其效能特性尚未完整描述並經過微調,以容納許多伺服器虛擬化部署一般的各種工作負載。

在客體虛擬機器中啟用 SMT

一旦虛擬化主機的 Hypervisor 設定為使用核心排程器類型,客體虛擬機器可能會視需要設定為利用 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 <VMName> -HwThreadCountPerCore <n>

其中 < n > 是客體 VM 看到的每個核心 SMT 執行緒數目。 請注意, < n > = 0 會設定 HwThreadCountPerCore 值,以符合主機每個核心值的 SMT 執行緒計數。

注意

從 Windows Server 2019 開始,支援設定 HwThreadCountPerCore = 0。

以下是取自虛擬機器中執行且已啟用 2 個虛擬處理器和 SMT 之客體作業系統的系統資訊範例。 客體作業系統正在偵測屬於相同核心的 2 個邏輯處理器。

Screen shot that shows msinfo32 in a guest VM with SMT enabled

在 Windows Server 2016 Hyper-V 上設定 Hypervisor 排程器類型

Windows Server 2016 Hyper-V 預設會使用傳統 Hypervisor 排程器模型。 Hypervisor 可以選擇性地設定為使用核心排程器,藉由限制客體 VP 在對應的實體 SMT 配對上執行,以及支援使用具有 SMT 排程的虛擬機器及其客體 VM 的安全性。

注意

Microsoft 建議執行Windows Server 2016 Hyper-V 的所有客戶選取核心排程器,以確保其虛擬化主機受到最佳保護,以防止潛在的惡意客體 VM。

Windows Server 2019 Hyper-V 預設為使用核心排程器

為了協助確保 Hyper-V 主機部署在最佳安全性設定中,Windows Server 2019 Hyper-V 現在預設會使用核心 Hypervisor 排程器模型。 主機系統管理員可以選擇性地將主機設定為使用舊版傳統排程器。 系統管理員應該仔細閱讀、瞭解並考慮每個排程器類型在覆寫排程器類型預設設定之前對虛擬化主機的安全性和效能的影響。 如需詳細資訊,請參閱 關於 Hyper-V Hypervisor 排程器類型選擇

必要的更新

注意

需要下列更新,才能使用本檔中所述的 Hypervisor 排程器功能。 這些更新包括支援新 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 伺服器上選取 Hypervisor 排程器類型

Hypervisor 排程器設定是透過 Hypervisorschedulertype BCD 專案來控制。

若要選取排程器類型,請以系統管理員許可權開啟命令提示字元:

bcdedit /set hypervisorschedulertype type

其中 type 是下列其中一項:

  • 傳統
  • 核心
  • Root

系統必須重新開機,Hypervisor 排程器類型的任何變更才會生效。

注意

Windows伺服器 Hyper-V 目前不支援 Hypervisor 根排程器。 Hyper-V 系統管理員不應該嘗試設定根排程器,以搭配伺服器虛擬化案例使用。

判斷目前的排程器類型

您可以檢查最近 Hypervisor 啟動事件識別碼 2 的系統記錄 事件檢視器檔,以判斷目前使用中的 Hypervisor 排程器類型,以報告 Hypervisor 啟動時所設定的 Hypervisor 排程器類型。 Hypervisor 啟動事件可以從Windows 事件檢視器或透過 PowerShell 取得。

Hypervisor 啟動事件識別碼 2 表示 Hypervisor 排程器類型,其中:

  • 1 = 傳統排程器,SMT 已停用

  • 2 = 傳統排程器

  • 3 = 核心排程器

  • 4 = 根排程器

Screen shot showing hypervisor launch event ID 2 details

Screen shot showing Event Viewer displaying hypervisor launch event ID 2

使用 PowerShell 查詢 Hyper-V Hypervisor 排程器類型啟動事件

若要使用 PowerShell 查詢 Hypervisor 事件識別碼 2,請從 PowerShell 提示字元輸入下列命令。

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

Screen shot showing PowerShell query and results for hypervisor launch event ID 2