赞
踩
Windows Server 2016 开始,可以使用离散设备分配 (DDA) 将整个 PCIe 设备传递到虚拟机 (VM) 中。这样做允许从 VM 中高性能访问 NVMe 存储或显卡等设备,同时能够应用设备的本机驱动程序。有关正常工作的设备以及可能的安全隐患的详细信息,请参阅规划使用离散设备分配部署设备。
重要
尽管不是必需的,但如果未启用或不支持单根 I/O 虚拟化 (SR-IOV),则在使用 DDA 部署图形设备时可能会遇到问题。
将设备与 DDA 配合使用有三个步骤:
您可以以管理员身份在 Windows PowerShell 控制台上执行主机上的所有命令。
解决方案的第一步是解决对 VM 的 DDA 限制。 使用以下 PowerShell cmdlet 配置 VM 以启用 TurnOff:Automatic Stop Action
Set-VM -Name VMName -AutomaticStopAction TurnOff
如果以某种方式配置 VM,则某些硬件的性能会更好。有关硬件是否需要以下配置的详细信息,请与硬件供应商联系。有关详细信息,请参阅规划使用离散设备分配部署设备以及此博客文章。
使用以下 cmdlet 在 CPU 上启用写入组合:
Set-VM -GuestControlledCacheTypes $true -VMName VMName
使用以下 cmdlet 配置 32 位 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
最后一步是告诉 Hyper-V VM 应有权访问设备。指定 VM 的位置、路径和名称。
Add-VMAssignableDevice -LocationPath $locationPath -VMName VMName
将设备成功装载到 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
然后,您可以在设备管理器中重新启用设备,主机操作系统将能够再次与设备交互。
此示例使用 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 传递到 VM 中,但远程桌面服务或应用程序无法识别 GPU,请检查以下常见问题:
请确保已安装 GPU 供应商支持的驱动程序的最新版本,并且该驱动程序未报告错误。您可以通过在设备管理器中检查设备状态来执行此操作。
确保设备在 VM 中分配了足够的 MMIO 空间。有关详细信息,请参阅 MMIO 空间。
请确保在此配置中使用供应商支持的 GPU。例如,某些供应商在传递到 VM 时会阻止其消费者卡工作。
确保应用程序支持在 VM 中运行,并且应用程序同时支持 GPU 及其关联的驱动程序。某些应用程序具有 GPU 和环境的允许列表。
如果在客户机上使用远程桌面会话主机角色或 Windows 多点服务,则必须确保将特定的组策略条目设置为允许使用默认 GPU。使用应用于来宾的组策略对象(或来宾上的本地组策略编辑器)导航到以下组策略项:
计算机配置 \ 管理员模板 \ Windows 组件 \ 远程桌面服务 \ 远程桌面会话主机 \ 远程会话环境 \ 对所有远程桌面服务会话使用硬件图形适配器。
将“组策略”值设置为“已启用”,然后在应用策略后重新启动 VM。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。