使用離散裝置指派部署圖形裝置
了解如何透過 PowerShell 使用離散裝置指派 (DDA),將整個 PCIe 裝置傳遞到虛擬機器 (VM)。 這樣做可讓您從 VM 內高效存取 NVMe 儲存體或圖形卡等裝置,同時能夠套用裝置的原生驅動程式。 如需工作裝置和可能安全性隱患的詳細資訊,請參閱規劃使用離散裝置指派部署裝置。
本文將引導您完成透過 DDA 使用裝置的步驟:
必要條件
在使用 DDA 部署圖形裝置之前,您需要具備以下條件。
執行 Windows Server 2016 或更新版本的 Hyper-V 主機。
執行以下其中一個作業系統的 VM:
Windows Server 2016 或更新版本。
Windows 10 (含) 以後版本。
查看使用離散裝置指派部署裝置的計劃,以確保您的硬體與 DDA 相容。
- 執行 SurveyDDA.ps1。用於識別伺服器設定是否正確的 PowerShell 指令碼。 該指令碼還會顯示哪些裝置可以使用離散裝置指派來傳遞。
Hyper-V 主機的管理權限。
(選用) 雖然這並非必要,但如果未啟用或不支援單一根 I/O 虛擬化 (SR-IOV),則在使用 DDA 部署圖形裝置時可能會發生問題。
設定 VM 以進行 DDA
解決方案中的第一個步驟是解決 VM 的 DDA 限制。
以管理員身分登入 Hyper-V 主機。
開啟提升權限的 PowerShell 命令提示字元。
使用下列 PowerShell Cmdlet 設定 VM 的
Automatic Stop Action
,以啟用 TurnOff:Set-VM -Name VMName -AutomaticStopAction TurnOff
針對圖形裝置準備 VM
如果 VM 是以特定方式設定,某些硬體的執行效果會更好。 如需您是否需要下列硬體設定的詳細資料,請聯繫硬體廠商。 如需詳細資訊,請參閱規劃使用離散裝置指派部署裝置和此部落格文章。
使用下列 Cmdlet,在 CPU 上啟用 Write-Combining:
Set-VM -GuestControlledCacheTypes $true -VMName VMName
使用以下 Cmdlet 設定 32 位元記憶體對應 IO (MMIO) 空間:
Set-VM -LowMemoryMappedIoSpace 3Gb -VMName VMName
使用下列 Cmdlet 設定大於 32 位元的 MMIO 空間:
Set-VM -HighMemoryMappedIoSpace 33280Mb -VMName VMName
提示
顯示的 MMIO 空間值是為了使用單一 GPU 進行實驗而設定的合理值。 若在啟動 VM 之後,裝置回報與資源不足相關的錯誤,您可能需要修改這些值。 如需如何精確計算 MMIO 需求的詳細資訊,請參閱規劃使用離散裝置指派部署裝置。
從主機分割區中卸載裝置
請遵循本節中的指示,從主機分割區中卸載裝置。
安裝資料分割驅動程式 (選用)
DDA 可讓硬體廠商使用其裝置提供安全性風險降低驅動程式。 此驅動程式與客體 VM 中安裝的裝置驅動程式不同。 由硬體廠商自行決定是否提供此驅動程式。 但如果他們提供了驅動程式,請先安裝它,再在從主機分割區卸載裝置。 請聯繫硬體廠商,查看其是否有風險降低驅動程式。
如果未提供磁碟分割驅動程式,則在卸載期間,您必須使用 -Force
選項略過安全性警告。 如需安全性隱患的詳細資訊,請參閱規劃使用離散裝置指派部署裝置。
找出裝置的位置路徑
需要 PCI 位置路徑,才能從主機中卸載和掛接裝置。 位置路徑範例看起來像這樣:PCIROOT(20)#PCI(0300)#PCI(0000)#PCI(0800)#PCI(0000)
。 如需找出位置路徑的詳細資訊,請參閱規劃使用離散裝置指派部署裝置。
停用裝置
使用裝置管理員或 PowerShell 確保裝置 [已停用]。
卸載裝置
根據廠商是否提供了風險降低驅動程式,您必須使用或不使用 -Force
選項,如下所示:
如果已安裝風險降低驅動程式,請使用下列 Cmdlet:
Dismount-VMHostAssignableDevice -LocationPath $locationPath
如果未安裝風險降低驅動程式,請使用下列 Cmdlet:
Dismount-VMHostAssignableDevice -Force -LocationPath $locationPath
將裝置指派給客體 VM
最後一個步驟是告知 Hyper-V,VM 應該有權存取裝置。 指定位置路徑和 VM 的名稱。
Add-VMAssignableDevice -LocationPath $locationPath -VMName VMName
在 VM 上完成工作
在 VM 中成功掛接裝置之後,您現在能夠啟動該 VM,並與該裝置進行互動,就像您正在裸機系統上執行一樣。 您現在可以在 VM 中安裝硬體廠商的驅動程式,而且應用程式能夠看到硬體。 您可以進行驗證,方法是開啟客體 VM 中的裝置管理員,並查看硬體是否可用。
移除裝置並將其傳回主機
如果想要裝置回到其原始狀態,您必須停止 VM 並發出此命令:
# Remove the device from the VM
Remove-VMAssignableDevice -LocationPath $locationPath -VMName VMName
# Mount the device back in the host
Mount-VMHostAssignableDevice -LocationPath $locationPath
然後,您可以在裝置管理員中重新啟用裝置,主機作業系統就能夠再次與該裝置互動。
範例 - 將 GPU 安裝到 VM
此範例會使用 PowerShell,設定名為 ddatest1 的 VM,以取得製造商 NVIDIA 提供的第一個 GPU,並將其指派給 VM。
# Configure the VM for a Discrete Device Assignment
$vm = "ddatest1"
# Set automatic stop action to TurnOff
Set-VM -Name $vm -AutomaticStopAction TurnOff
# Enable Write-Combining on the CPU
Set-VM -GuestControlledCacheTypes $true -VMName $vm
# Configure 32 bit MMIO space
Set-VM -LowMemoryMappedIoSpace 3Gb -VMName $vm
# Configure Greater than 32 bit MMIO space
Set-VM -HighMemoryMappedIoSpace 33280Mb -VMName $vm
# Find the Location Path and disable the Device
# Enumerate all PNP Devices on the system
$pnpdevs = Get-PnpDevice -presentOnly
# Select only those devices that are Display devices manufactured by NVIDIA
$gpudevs = $pnpdevs | Where-Object {$_.Class -like "Display" -and $_.Manufacturer -like "NVIDIA"}
# Select the location path of the first device that's available to be dismounted by the host.
$locationPath = ($gpudevs | Get-PnpDeviceProperty DEVPKEY_Device_LocationPaths).data[0]
# Disable the PNP Device
Disable-PnpDevice -InstanceId $gpudevs[0].InstanceId
# Dismount the Device from the Host
Dismount-VMHostAssignableDevice -Force -LocationPath $locationPath
# Assign the device to the guest VM.
Add-VMAssignableDevice -LocationPath $locationPath -VMName $vm
針對掛接 GPU 方面的問題進行疑難排解
如果將 GPU 傳遞到 VM,但遠端桌面服務或應用程式無法辨識 GPU,請檢查是否有下列常見問題。
請確認您已安裝 GPU 廠商支援的最新版驅動程式,並且該驅動程式沒有報告錯誤。 您可以這樣做,方法是檢查裝置管理員中的裝置狀態。
確定您的裝置在 VM 內配置了足夠的 MMIO 空間。 如需詳細資訊,請參閱 MMIO 空間。
確定您使用的是廠商支援在此設定中使用的 GPU。 例如,有些廠商會防止其取用卡在傳遞至 VM 時運作。
確定應用程式支援在 VM 內執行,以及應用程式同時支援 GPU 及其相關聯的驅動程式。 某些應用程式具有 GPU 和環境的允許清單。
如果您在客體上使用遠端桌面工作階段主機角色或 Windows Multipoint 服務,則必須確定特定群組原則項目已設定為允許使用預設 GPU。 使用套用於客體的群組原則物件 (或客體上的本機群組原則編輯器)。 瀏覽至以下群組原則項目:
電腦設定\系統管理員範本\Windows 元件\遠端桌面服務\遠端桌面工作階段主機\遠端工作階段環境\針對所有遠端桌面服務工作階段使用硬體圖形介面卡。
將群組原則值設為已啟用,然後在套用原則後重新啟動 VM。