共用方式為


使用具體裝置指派來部署圖形設備

瞭解如何使用離散裝置指派 (DDA) 搭配 PowerShell 將整個 PCIe 裝置傳遞至虛擬機器(VM)。 這麼做可讓您能在 VM 內部高效存取像 NVMe 儲存 或圖形卡等裝置,並套用這些裝置的原生驅動程式。 如需關於運作正常及可能的安全性影響之裝置的詳細資訊,請參閱 規劃使用離散裝置分配以部署裝置

本文會引導您完成搭配 DDA 使用裝置的步驟:

  1. 設定 DDA 的 VM
  2. 從主機分割區卸除裝置
  3. 將裝置指派給客體 VM

先決條件

您必須先具備下列條件,才能使用 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 限制。

  1. 以系統管理員身分登入 Hyper-V 主機。

  2. 開啟提升權限的 PowerShell 提示符號。

  3. Automatic Stop Action 設定 VM 的屬性,以使用下列 PowerShell Cmdlet 啟用 TurnOff

    Set-VM -Name VMName -AutomaticStopAction TurnOff
    

圖形裝置的 VM 準備

如果 VM 以特定方式設定,某些硬體會執行得更好。 如需您是否需要下列硬體設定的詳細數據,請連絡硬體廠商。 如需詳細資訊,請參閱 規劃使用離散裝置指派部署裝置 ,以及此 部落格文章

  1. 使用下列 Cmdlet 在 CPU 上啟用 Write-Combining:

    Set-VM -GuestControlledCacheTypes $true -VMName VMName
    
  2. 使用下列 Cmdlet 設定 32 位記憶體對應 IO (MMIO) 空間:

    Set-VM -LowMemoryMappedIoSpace 3Gb -VMName VMName
    
  3. 使用下列 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。