瞭解如何使用離散裝置指派 (DDA) 搭配 PowerShell 將整個 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,SR-IOV), 您在使用 DDA 部署圖形裝置時可能會遇到問題。
設定 VM 以進行 DDA
解決方案的第一個步驟是解決 VM 的 DDA 限制。
以系統管理員身分登入 Hyper-V 主機。
開啟提升權限的 PowerShell 提示符號。
Automatic Stop Action
設定 VM 的屬性,以使用下列 PowerShell Cmdlet 啟用 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 內執行,而且應用程式同時支援 GPU 及其相關聯的驅動程式。 某些應用程式具有 GPU 和環境的允許清單。
如果您在客體上使用遠端桌面工作階段主機角色或 Windows Multipoint 服務,您必須確保特定群組原則項目已設定為允許使用預設 GPU。 使用套用至來賓的組策略物件(或來賓上的本地組原則編輯器)。 瀏覽至下列群組原則項目:
計算機設定\系統管理員範本\Windows 元件\遠端桌面服務\遠端桌面會話主機\遠端會話環境\針對所有遠端桌面服務會話使用硬體圖形適配卡。
將 [組策略] 值設定為 [已啟用],然後在套用原則之後重新啟動 VM。