Hyper-V PCIe/GPU 直通教程:DDA 要求、显卡分配与恢复

Hyper-V 的 Discrete Device Assignment(DDA)可以把整张 PCIe 显卡或 NVMe 设备分配给虚拟机,让来宾系统直接安装原生驱动。根据 Microsoft Learn 在 2026 年更新的说明,DDA 宿主机适用于 Windows Server 2016、2019、2022、2025 和相应 Azure Local 环境;Windows 10/11 可以作为来宾系统,但普通 Windows 客户端不是这篇 DDA 教程的受支持宿主机。

高风险操作:DDA 会把设备从宿主机下线。显卡是宿主机唯一显示设备时,画面可能立刻消失;错误的 LocationPath、MMIO 或恢复步骤可能导致虚拟机无法启动或设备无法重新挂载。请准备远程管理、第二张显卡或带外管理,并先备份虚拟机和重要数据。

2026 年 DDA 的适用范围与前提

  • 宿主机:Windows Server 2016 或更高版本,建议安装最新累积更新。
  • 来宾系统:Windows Server 2016 或更高版本,或 Windows 10/11。
  • 硬件:主板、固件和 PCIe 拓扑必须支持安全隔离;先运行 Microsoft 的 SurveyDDA.ps1
  • 虚拟机:应关闭检查点、动态内存和保存状态依赖,并按设备要求配置 MMIO。
  • 驱动:消费级显卡厂商可能限制虚拟机直通,成功枚举不代表驱动一定支持。

以下原始实战步骤继续保留,但应结合 Microsoft Learn:Deploy graphics devices by using DDA 和你的服务器/设备厂商文档核对。

本文章所有PowerShell指令均在管理员下执行

先用 PowerShell 准备虚拟机和 MMIO

关闭目标虚拟机后,在宿主机管理员 PowerShell 中设置自动停止方式、写合并和 MMIO。下面数值来自 Microsoft 的单 GPU 实验示例,不是所有显卡的固定答案;出现“资源不足”时应按设备 BAR/MMIO 要求调整。

$vm = "TEST"
Set-VM -Name $vm -AutomaticStopAction TurnOff
Set-VM -GuestControlledCacheTypes $true -VMName $vm
Set-VM -LowMemoryMappedIoSpace 3Gb -VMName $vm
Set-VM -HighMemoryMappedIoSpace 33280Mb -VMName $vm

TEST 改成你的虚拟机名称。生产环境还应确认检查点、动态内存、远程管理和回滚方案符合设备厂商及 Microsoft 文档要求。

官方资料与适用范围

英伟达vGPU显卡帮助文档

GRID vGPU User Guide :(英文网页/英文PDF /中文网页[可能打不开])

官方资料与适用范围-文章(感谢这个大佬): https://www.licc.tech/article?id=35

第一步:查看你的设备是否支持

1.1 硬件和系统需求

系统要求:DDA 宿主机使用 Windows Server 2016 或更高版本;Microsoft 当前文档列出 Windows Server 2016、2019、2022、2025。Windows 10/11 可作为来宾系统,但不应把普通客户端当作受支持的 DDA 宿主机。

宿主机主板支持 SR-IOVACS 这些功能

关于硬件可以通过这个页面(Github)的脚本来检测

1.2 如何使用硬件检测的脚本?

下载这个脚本到任意位置,

如果PowerShell控制台提示禁止使用脚本,可以使用下列指令更改权限

 Set-ExecutionPolicy -Scope Process RemoteSigned 
Hyper-V PCIe/GPU 直通教程:DDA 要求、显卡分配与恢复配图

再运行这个下载下来的脚本即可

Hyper-V PCIe/GPU 直通教程:DDA 要求、显卡分配与恢复配图1

按照说明可以判断你的硬件是否可以使用

Hyper-V PCIe/GPU 直通教程:DDA 要求、显卡分配与恢复配图2
如果最后显示这样 可以洗洗睡了

第二步:创建虚拟机

(建议新建一台来进行实验,也可以用现成的)

2.1 打开新建虚拟机 虚拟机名字为 TEST

Hyper-V PCIe/GPU 直通教程:DDA 要求、显卡分配与恢复配图3

2.2.1内存设置

可以不使用动态内存, 如果说使用动态内存那么需要满足启动的RAM和最小的RAM相同

Hyper-V PCIe/GPU 直通教程:DDA 要求、显卡分配与恢复配图4
关闭动态内存

2.2.2 自动停止操作内容更改

将“自动停止操作”里面的操作从保存虚拟机状态改为强行关闭虚拟机

Hyper-V PCIe/GPU 直通教程:DDA 要求、显卡分配与恢复配图5

2.2.3 检查点类型设置

Hyper-V PCIe/GPU 直通教程:DDA 要求、显卡分配与恢复配图6

将检查点类型改为生产检查点,并取消勾选如果……

第三步:从宿主机“下线”设备

3.1 获取设备的位置路径

在设备管理器找到PCIE设备,这里是显卡GTX 750 Ti,并复制其属性中的详细信息中的位置路径的这一项。

Hyper-V PCIe/GPU 直通教程:DDA 要求、显卡分配与恢复配图7

即获得的路径是

PCIROOT(0)#PCI(0300)#PCI(0000)

3.2 禁用设备

Hyper-V PCIe/GPU 直通教程:DDA 要求、显卡分配与恢复配图8

右键显卡即可禁用设备

3.2 使用Powershell控制台将设备下线

格式规范

 Dismount-VMHostAssignableDevice -LocationPath "设备路径" -force 

我这里填写:

 Dismount-VMHostAssignableDevice -LocationPath "PCIROOT(0)#PCI(0300)#PCI(0000)"  -force 
Hyper-V PCIe/GPU 直通教程:DDA 要求、显卡分配与恢复配图9

3.2.1下线后的结果

这个设备将不会在设备管理器中的“按类型列出设备”中找到

Hyper-V PCIe/GPU 直通教程:DDA 要求、显卡分配与恢复配图10

但是可以在“列出资源”中看到

Hyper-V PCIe/GPU 直通教程:DDA 要求、显卡分配与恢复配图11

第四步:将显卡连接到对应的虚拟机上

4.1 将设备连接至虚拟机

命令格式

  Add-VMAssignableDevice -LocationPath "设备路径" -VMName 虚拟机名称 

我这里输入

 Add-VMAssignableDevice -LocationPath "PCIROOT(0)#PCI(0300)#PCI(0000)" -VMName TEST

Hyper-V PCIe/GPU 直通教程:DDA 要求、显卡分配与恢复配图12

如果一直到这个位置都是正常的 一般情况下是成功了的

4.2检查是否成功绑定上虚拟机

 Get-VMAssignableDevice -VMName TEST  

Hyper-V PCIe/GPU 直通教程:DDA 要求、显卡分配与恢复配图13

启动虚拟机并安装显卡驱动

这个是否通常情况下只要硬件没有问题,就可以体验直通过后的显卡了,具体的优化措施与细节可以去看参考内容中的官方资料与适用范围-文章

如何把显卡恢复给宿主机

如果你进行到这一步,发现系统不支持而且不能正常使用

可以将设备与对应虚拟机解除绑定并重新上线设备:

5.1获取设备名称

命令格式

 Get-VMAssignableDevice -VMName 虚拟机名称 

我这里要输入

 Get-VMAssignableDevice -VMName TEST 

获取虚拟机中设备的位置路径

这里的位置路径前面位置路径是一样的

Hyper-V PCIe/GPU 直通教程:DDA 要求、显卡分配与恢复配图14

即获得的位置路径是

 "PCIROOT(0)#PCI(0300)#PCI(0000)" 

5.2 解除与虚拟机的绑定

命令格式

 Remove-VMAssignableDevice -LocationPath "位置路径" -VMName 虚拟机名称 

我这里要输入的

 Remove-VMAssignableDevice -LocationPath "PCIROOT(0)#PCI(0300)#PCI(0000)" -VMName TEST 
Hyper-V PCIe/GPU 直通教程:DDA 要求、显卡分配与恢复配图15

TIP:从这里复制代码到PowerShell可能会使-LocationPath前面的一个小斜杠“-”消失,暂时不清楚是什么BUG,大家请注意。

5.3 重新上线设备并启用设备

命令格式

 Mount-VMHostAssignableDevice -LocationPath "位置路径"  

我这里要输入的

 Mount-VMHostAssignableDevice -LocationPath  "PCIROOT(0)#PCI(0300)#PCI(0000)"   

Hyper-V PCIe/GPU 直通教程:DDA 要求、显卡分配与恢复配图16

重新上线设备成功

Hyper-V PCIe/GPU 直通教程:DDA 要求、显卡分配与恢复配图17

这个时候再启用设备即可,和刚刚的禁用设备步骤一样。

Hyper-V PCIe/GPU 直通教程:DDA 要求、显卡分配与恢复配图18

—-文章完—-

DDA 常见问题

Windows 11 Hyper-V 宿主机能照着做吗?

Microsoft 当前 DDA 图形设备文档把宿主机范围列为 Windows Server 和 Azure Local。Windows 11 上常见的是 GPU-P/GPU 分区等其他路线,不能把两套命令混用。

显卡直通后宿主机为什么看不到设备?

这是 DDA 的预期行为:设备被从宿主分区下线并独占分配给虚拟机。关机后先执行 Remove-VMAssignableDevice,再执行 Mount-VMHostAssignableDevice,最后在设备管理器重新启用。

相关阅读