使用離散裝置指派規劃部署裝置

適用于:Windows Server 2022、Microsoft Hyper-V Server 2019、Windows Server 2019、Microsoft Hyper-V Server 2016、Windows Server 2016

離散裝置指派可讓實體周邊元件互連 Express (PCIe) 硬體從虛擬機器 (VM) 內直接存取。 本文討論可使用的裝置類型、主機系統需求、VM 的限制,以及安全性影響。

針對離散裝置指派,Microsoft 支援兩個裝置類別:圖形介面卡和 NVMe 儲存體裝置。 其他裝置可能正常運作,硬體廠商也能夠提供這些裝置的支援聲明。 針對其他裝置,請連絡特定硬體廠商以取得支援。

若要瞭解 GPU 虛擬化的其他方法,請參閱 在 Windows Server 中規劃 GPU 加速。 如果您已準備好嘗試離散裝置指派,您可以移至 使用離散裝置指派部署圖形裝置,或使用 離散裝置指派 部署 NVMe 儲存體裝置。

支援的 VM 和客體作業系統

第 1 代或 2 代 VM 支援離散裝置指派。 支援的來賓包括:

如需詳細資訊,請參閱 Windows Server 和 Windows 上 Hyper-V 支援的 Linux 和 FreeBSD 虛擬機器。

系統需求

您的系統必須符合 Windows Server 的硬體需求,以及 Windows Server 上的 Hyper-V 系統需求。 離散裝置指派也需要伺服器類別硬體,才能將作業系統控制授與設定 PCIe 網狀架構(原生 PCI Express Control)。 此外,PCIe Root Complex 必須支援 存取控制 Services (ACS),這可讓 Hyper-V 透過輸入輸出記憶體管理單位強制所有 PCIe 流量。

這些功能通常不會直接在伺服器的 BIOS 中公開,而且通常會隱藏在其他設定後面。 如果 SR-IOV 支援和 BIOS 需要相同的功能,您可能需要設定「啟用 SR-IOV」。如果您無法識別 BIOS 中的正確設定,請連絡您的系統廠商。

為了協助確保硬體能夠進行離散裝置指派,您可以在已啟用 Hyper-V 的主機上執行 機器設定檔腳本 。 腳本會測試您的伺服器是否已正確設定,以及哪些裝置能夠進行離散裝置指派。

裝置需求

並非所有 PCIe 裝置都可以與離散裝置指派搭配使用。 不支援使用舊版 (INTx) PCI 插斷的舊版裝置。 如需詳細資訊,請參閱 離散裝置指派 - 機器和裝置 。 您也可以執行 電腦設定檔腳本 ,以顯示哪些裝置能夠用於離散裝置指派。

裝置製造商可以連絡其 Microsoft 代表以取得詳細資料。

設備磁碟機

離散裝置指派會將整個 PCIe 裝置傳遞至客體 VM。 在 VM 內掛接裝置之前,不需要安裝主機驅動程式。 主機上唯一的需求是可以判斷裝置的 PCIe 位置路徑 。 您可以安裝裝置的驅動程式,以協助識別裝置。 主機上未安裝其設備磁碟機的 GPU 可能會顯示為 Microsoft Basic 轉譯裝置。 如果已安裝設備磁碟機,可能會顯示其製造商和型號。

當裝置掛接在客體內部時,製造商的裝置驅動程式可以像在客體 VM 內一樣安裝。

VM 限制

由於實作離散裝置指派的本質,因此在連結裝置時,VM 的某些功能會受到限制。 無法使用下列功能:

  • VM 儲存/還原
  • VM 的即時移轉
  • 使用動態記憶體
  • 將 VM 新增至高可用性 (HA) 叢集

安全性

離散裝置指派會將整個裝置傳遞至 VM。 此傳遞表示可從客體作業系統存取該裝置的所有功能。 某些功能,例如韌體更新,可能會對系統的穩定性造成負面影響。 從主機卸載裝置時,會向系統管理員顯示許多警告。 您應該只使用受信任的 VM 租使用者所在的離散裝置指派。

如果系統管理員想要搭配不受信任的租使用者使用裝置,裝置製造者可以建立可安裝在主機上的裝置風險降低驅動程式。 如需是否提供裝置風險降低驅動程式的詳細資料,請連絡裝置製造商。

如果您想要略過沒有裝置風險降低驅動程式之裝置的安全性檢查,您必須將 參數傳遞 -ForceDismount-VMHostAssignableDevice Cmdlet。 當您進行此傳遞時,您已變更該系統的安全性設定檔。 您應該只在原型設計或信任的環境中進行這項變更。

PCIe 位置路徑

需要 PCIe 位置路徑,才能從主機卸載和掛接裝置。 範例位置路徑為 PCIROOT(20)#PCI(0300)#PCI(0000)#PCI(0800)#PCI(0000) 。 電腦 設定檔腳本 也會傳回 PCIe 裝置的位置路徑。

使用 裝置管理員 取得位置路徑

Screenshot of the device manager, showing the selections for finding a device path.

  1. 開啟裝置管理員並找出裝置。
  2. 以滑鼠右鍵按一下裝置,然後選取 [內容]
  3. 在 [ 詳細資料] 索引標籤上,展開 [ 屬性 ] 下拉式功能表,然後選取 [ 位置路徑 ]。
  4. 以滑鼠右鍵按一下以 PCIROOT 開頭 的專案,然後選取 [ 複製 ] 以取得裝置的位置路徑。

MMIO 空間

某些裝置,特別是 GPU,需要配置更多 MMIO 空間給 VM,才能存取該裝置的記憶體。 根據預設,每個 VM 都會以 128 MB 的低 MMIO 空間和配置給 VM 的 512 MB 高 MMIO 空間來啟動。 不過,裝置可能需要更多 MMIO 空間,或多個裝置可能會通過,讓合併的需求超過這些值。 變更 MMIO 空間很簡單,而且可以使用下列命令在 PowerShell 中執行:

Set-VM -LowMemoryMappedIoSpace 3Gb -VMName $vm
Set-VM -HighMemoryMappedIoSpace 33280Mb -VMName $vm

判斷要配置多少 MMIO 空間的最簡單方式是使用 電腦設定檔腳本 。 若要下載並執行電腦設定檔腳本,請在 PowerShell 主控台中執行下列命令:

curl -o SurveyDDA.ps1 https://raw.githubusercontent.com/MicrosoftDocs/Virtualization-Documentation/live/hyperv-tools/DiscreteDeviceAssignment/SurveyDDA.ps1
.\SurveyDDA.ps1

針對可指派的裝置,腳本會顯示指定裝置的 MMIO 需求。 下列腳本輸出是範例:

NVIDIA GRID K520
Express Endpoint -- more secure.
    ...
    And it requires at least: 176 MB of MMIO gap space
...

低 MMIO 空間只能由使用 32 位位址的 32 位作業系統和裝置使用。 在大部分情況下,設定 VM 的高 MMIO 空間就已足夠,因為 32 位組態並不常見。

重要

當您將 MMIO 空間指派給 VM 時,請務必指定足夠的 MMIO 空間。 MMIO 空間應該是所有所需指派裝置所要求的 MMIO 空間總和,再加上其他需要數 MB MMIO 空間的虛擬裝置緩衝區。 使用先前描述為低和高 MMIO 之緩衝區的預設 MMIO 值(分別為 128 MB 和 512 MB)。

請考慮上述範例。 如果您指派單一 K520 GPU,請將 VM 的 MMIO 空間設定為電腦設定檔腳本所輸出的值加上緩衝區:176 MB + 512 MB。 如果您指派三個 K520 GPU,請將 MMIO 空間設定為 176 MB 的基底數量加上緩衝區的三倍,或 528 MB + 512 MB。

如需深入瞭解 MMIO 空間,請參閱 技術社群部落格上的離散裝置指派 - GPU

電腦設定檔腳本

若要識別伺服器是否已正確設定,以及可以使用離散裝置指派傳遞哪些裝置,請執行 SurveyDDA.ps1。 PowerShell 腳本。

使用腳本之前,請確定您已安裝 Hyper-V 角色,並從具有管理員istrator 許可權的 PowerShell 命令視窗中執行腳本。

如果系統設定為支援離散裝置指派,此工具會顯示錯誤訊息,其中包含問題的詳細資料。 如果系統已正確設定,此工具會列舉位於 PCIe 匯流排上的所有裝置。

針對它找到的每個裝置,此工具會顯示它是否能夠與離散裝置指派搭配使用。 如果裝置識別為與離散裝置指派相容,腳本會提供原因。 當裝置成功識別為相容時,會顯示裝置的位置路徑。 此外,如果該裝置需要 MMIO 空間 ,也會顯示它。

Screenshot of the requirements displayed in SurveyDDA.ps1.