管理 Hyper-V Hypervisor 排程器類型

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

本文說明 Windows Server 2016 中引進的新虛擬處理器排程邏輯模式。 這些模式或 排程器類型 會決定 Hyper-V Hypervisor 如何配置和管理跨客體虛擬處理器運作。 Hyper-V 主機管理員可以:

  • 選取最適合客體虛擬機器 (VM) 的 Hypervisor 排程器類型。
  • 設定 VM 以利用排程邏輯。

必要條件

您必須安裝下列更新,才能使用 本文稍後所述的 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

背景

在討論 Hyper-V 虛擬處理器排程背後的邏輯和控制之前,請務必瞭解某些概念,例如同時多執行緒處理,以及 Hyper-V 如何虛擬化處理器。

瞭解 SMT

同時多執行緒 (SMT) 是新式處理器設計中的一項技術,可讓獨立執行執行緒分開共用處理器資源。 SMT 通常會為大部分工作負載提供適度的效能提升。 它會盡可能平行處理計算,增加指令輸送量。 不過,有時候當執行緒彼此競爭共用處理器資源時,效能沒有明顯改善,甚至略有遺失。

若要搭配 Windows Server 使用 SMT,您必須具有相容的處理器。 例如,使用 Intel Hyper-Threading 技術或進階微裝置 (AMD) 多執行緒 (SMT) 的處理器。

基於本文的目的,SMT 的描述以及 Hyper-V 如何使用它的方式同樣適用于 Intel 和 AMD 系統。

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

考慮 Hypervisor 排程器類型之前,您應該先瞭解 Hyper-V 架構。 您可以找到此架構在 Hyper-V 技術概觀 運作方式的更詳細摘要,但現在您應該記住下列概念:

  • Hyper-V 會在 Hypervisor 的控制下,建立和管理 VM 磁碟分割、配置及共用其計算資源。 資料分割提供所有客體 VM 與客體 VM 與根磁碟分割之間的強式隔離界限。

  • 根分割區本身是 VM 磁碟分割,雖然它具有唯一的屬性和比客體 VM 更高的許可權。 根分割區:

    • 提供可控制所有客體 VM 的管理服務。
    • 提供來賓的虛擬裝置支援。
    • 管理客體 VM 的所有裝置輸入和輸出。

    我們建議不要在根分割區中執行任何應用程式工作負載。

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

  • 根據預設,裝載根分割區之 VM 執行的 LP 也可以執行客體 IP。

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

Hypervisor 排程器類型

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

傳統排程器

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

傳統排程器類型最適合大部分的傳統 Hyper-V 使用,例如私人雲端、主控提供者等等。 傳統排程器類型的效能特性最適合用來支援各種虛擬化案例,例如:

  • 將 VP 過度訂閱至 LP。
  • 同時執行許多異質 VM 和工作負載。
  • 執行較大的高效能 VM。
  • 支援 Hyper-V 的完整功能集,但不受限制和其他案例。

核心排程器

Hypervisor 核心排程器是 Windows Server 2016 和 Windows 10 版本 1607 中引進的傳統排程器邏輯替代方案。 核心排程器提供來賓工作負載隔離的強式安全性界限。 它也會降低在已啟用 SMT 的虛擬化主機上執行之 VM 內部工作負載的效能變化。 核心排程器支援在同一個已啟用 SMT 的虛擬化主機上同時執行 SMT 和非 SMT VM。

核心排程器:

  • 使用虛擬化主機的 SMT 拓撲。
  • 選擇性地將 SMT 配對公開給客體 VM。
  • 將來自相同 VM 的客體虛擬處理器群組排程到 SMT 邏輯處理器群組。

這項工作會以對稱方式進行。 如果 LP 位於兩組,則 VP 會排程為兩組,且永遠不會在 VM 之間共用核心。 當您排程未啟用 SMT 之 VM 的 VP 時,該 VP 會在執行時取用整個核心。 核心排程器的整體結果如下:

  • 它會為客體工作負載隔離建立強式安全性界限。 客體 VP 只能在基礎實體核心配對上執行,以減少對側通道窺探攻擊的弱點。
  • 其可減少輸送量的變化。
  • 它可能會降低效能。 如果群組中只有一個 VP 可以執行,則核心中只有一個指令串流會在另一個閒置時啟動。
  • 在客體 VM 中執行的 OS 和應用程式可以使用 SMT 行為和程式設計介面(API)來控制和分散跨 SMT 執行緒的工作,就像使用實體電腦一樣。

自 Windows Server 2019 起,Hyper-V 預設會使用核心排程器。 在舊版 Windows Server 2016 中,排程器是選擇性的,而傳統排程器是預設選項。

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

在某些情況下,您可能會將 Hypervisor 設定為使用核心排程器類型,但 SMT 功能已停用或不存在於虛擬化主機上。 在這些情況下,不論 Hypervisor 排程器類型設定為何,Hyper-V 都會使用傳統排程器行為。

根排程器

根排程器已抵達 Windows 10 版本 1803。 當您啟用根排程器類型時,Hypervisor 會提供工作排程的根分割區控制。 根分割區 OS 實例中的 NT 排程器會管理排程工作到系統 IP 的所有層面。

根排程器可解決支援公用程式分割區的獨特需求,並提供強式工作負載隔離,如同與 Windows Defender 應用程式防護 (WDAG) 搭配使用。 在此案例中,將排程責任留給根 OS 提供數個優點:

  • 您可以使用適用于容器案例的 CPU 資源控制搭配公用程式分割區,簡化管理和部署。
  • 根 OS 排程器可以輕鬆地收集容器內工作負載 CPU 使用量的相關計量。 它可以使用此資料做為適用于系統中所有其他工作負載之相同排程原則的輸入。
  • 這些相同的計量也有助於將應用程式容器中完成的工作屬性設為主機系統。 使用傳統 VM 工作負載,追蹤這些計量會比較困難,其中某些工作代表所有執行中的 VM 都會在根磁碟分割中執行。

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

從 Windows 10 版本 1803 開始,根排程器預設只會在用戶端系統上使用,這表示:

  • 您可以讓 Hypervisor 支援虛擬化式安全性和 WDAG 工作負載隔離。
  • 請務必使用異質核心架構正確操作未來的系統。

此設定是用戶端系統唯一支援的 Hypervisor 排程器設定。 管理員istrators 不應該嘗試覆寫 Windows 用戶端系統上的預設 Hypervisor 排程器類型。

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

當您啟用 Hypervisor 根排程器時,不支援 Hyper-V 提供的 VM 處理器資源控制。 根作業系統的排程器邏輯會全域管理主機資源,而且不會管理單一 VM 的客體資源。 Hyper-V 每個 VM 處理器的資源控制,例如上限、權數和保留,只能套用 Hypervisor 直接控制 VP 排程的位置,例如使用傳統和核心排程器類型。

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

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

在客體 VM 中啟用 SMT

將虛擬化主機的 Hypervisor 設定為使用核心排程器類型之後,您也可以將客體 VM 設定為使用 SMT。 公開將 VP 超執行緒到客體 VM 的事實,可讓客體作業系統和 VM 中執行的工作負載中的排程器偵測並使用自己的工作排程中的 SMT 拓撲。

  • 在 Windows Server 2016 中,預設不會設定客體 SMT。 Hyper-V 主機管理員必須明確啟用它。
  • 從 Windows Server 2019 開始,您在主機上建立的新 VM 預設會繼承主機 SMT 拓撲。 例如,您在每個核心有兩個 SMT 執行緒的主機上建立的 9.0 版 VM,每個核心也會有兩個 SMT 執行緒。

您必須使用 PowerShell 在客體 VM 中啟用 SMT。 Hyper-V 管理員中沒有提供任何使用者介面。 若要在客體 VM 中啟用 SMT:

  1. 使用屬於 Hyper-V 管理員istrators 群組成員或對等帳戶開啟 PowerShell 視窗。
  2. 執行 Set-VMProcessor -VMName <VMName> -HwThreadCountPerCore <n> ,其中 <n> 是客體 VM 看到的每個核心 SMT 執行緒數目。 <n> = 0HwThreadCountPerCore會設定值,以符合主機每個核心值的 SMT 執行緒計數。

注意

在 Windows Server 2019 和更新版本中,您可以設定 HwThreadCountPerCore = 0 ,而不是比對主機 SMT 執行緒計數。

下列螢幕擷取畫面顯示從 VM 中執行的客體作業系統取得的系統資訊。 已啟用兩個虛擬處理器和 SMT。 客體作業系統正在偵測屬於相同核心的兩個邏輯處理器。

Screenshot 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 配對上執行,以提高安全性。 此設定支援使用 VM 搭配其客體 VM 的 SMT 排程。

注意

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

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

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

在 Windows Server 上選取 Hypervisor 排程器類型

Hypervisor 排程器設定是由 hypervisorschedulertype BCD 專案所控制。

若要選取排程器類型:

  1. 使用系統管理員權限開啟命令提示字元。
  2. 輸入 bcdedit /set hypervisorschedulertype type ,其中 type 是下列其中一個選項:
  • Classic
  • Core
  • Root

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

注意

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

判斷目前的排程器類型

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

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

  • 1 = 傳統排程器,SMT 已停用
  • 2 = 傳統排程器
  • 3 = 核心排程器
  • 4 = 根排程器

A screenshot of the hypervisor launch event ID 2 properties window. The user has selected the General tab, showing that the hypervisor scheduler type is 0x2.

A screenshot of the Event Viewer window. The user has selected Hyper-V Hypervisor launch event ID 2 from the list of events, highlighting it in dark blue.

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

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

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

A screenshot of a query for hypervisor launch event ID 2. The results say hypervisor scheduler type is 0x2.