共用方式為


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

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

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

若要了解 GPU 虛擬化的其他方法,請參閱 Windows Server 中的 GPU 加速計畫。 如果您已準備好嘗試離散裝置指派,您可以前往使用離散裝置指派部署圖形裝置使用離散裝置指派部署 NVMe 存放裝置

支援的 VM 和客體作業系統

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

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

系統需求

如需詳細資訊,請參閱 Windows Server 的系統需求以及 Windows Server 上的 Hyper-V 系統需求。 離散裝置指派也需要伺服器類別硬體,才能將作業系統控制授與設定 PCIe 網狀架構 (原生 PCI Express Control)。 此外,PCIe 根複本必須支援存取控制服務 (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 的離散裝置指派。

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

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

PCIe 位置路徑

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

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

設備管理員的螢幕快照,其中顯示尋找裝置路徑的選項。

  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 角色,並從具有系統管理員權限的 PowerShell 命令視窗執行指令碼。

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

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

SurveyDDA.ps1 中所顯示需求的螢幕快照。