虚拟机里的显卡:直通、DDA 与 Windows 来宾能用到什么
把显卡交给 Windows 虚拟机的三种方式、各自支持什么,以及决定它能否启动的 IOMMU/vBIOS 问题。
测试环境Pro (26H2) / Server · 版本号 26300.9457 / 26100.33650 · x64
E1- 版本号
- 26300.9457 / 26100.33650
- 版本
- Pro (26H2) / Server
- 架构
- x64
- 支持
- 文档(E1)
- 证据
- E1官方文档
- 核验日期
- 2026-10-29
- 页面类型
- 概念
“虚拟机里的显卡”有三种完全不同的东西,不能互换:
| 方式 | 来宾拿到什么 | 典型用途 |
|---|---|---|
| DDA(离散设备分配) | 一整块物理显卡,独占 | Hyper-V、工作站虚拟机 |
| 完整 PCIe 直通 | 一整块物理显卡,独占 | Proxmox/KVM、游戏虚拟机 |
| 虚拟 GPU(vGPU/GPU-P) | 受支持显卡的一个切片 | VDI、多会话 |
三种情况下来宾都看到真实显卡驱动,宿主都失去这张卡(vGPU 除外,它需要授权且限定平台)。
决定能否成功的条件
Section titled “决定能否成功的条件”- 固件与 hypervisor 都开启 IOMMU。没有它就没有直通。
- 显卡必须独占一个 IOMMU 组——与芯片组或网卡同组就无法隔离。
- 来宾需要该卡的驱动——与裸机同一个驱动。
- vBIOS——部分消费级卡在虚拟机里不初始化,除非提供 vBIOS 或厂商开关。
- 配置过程中这张卡不能是宿主唯一的显示输出。
Get-PnpDevice -Class Display | Select-Object FriendlyName,Status,InstanceIdGet-CimInstance Win32_VideoController | Select-Object Name,DriverVersion,AdapterRAM来宾里的 InstanceId 仍像 PCI 设备,这在直通下是正常的。Status : Error 通常意味着驱动绑上了但卡没初始化。
Windows Server 来宾:DDA 的具体要求
Section titled “Windows Server 来宾:DDA 的具体要求”DDA 是 Hyper-V 上受支持的路径:
- 显卡从宿主卸载并分配给一台虚拟机;
- 分配/移除时虚拟机必须关机;
- 来宾内部要装厂商驱动;
- 部分服务器 GPU 支持分区(GPU-P),需要厂商支持与授权。
DDA 不是“显卡共享”:一张卡,同一时刻一台虚拟机。
桌面来宾:能期待什么
Section titled “桌面来宾:能期待什么”- 游戏:KVM + vBIOS + 宿主用另一张卡时效果不错;延迟取决于显示路径(looking-glass、HDMI 直通,或直通卡上直接接显示器)。
- 计算(CUDA/ROCm):通常最简单——不需要显示路径。
- 视频编码:需要来宾内的厂商编码器支持;部分消费级驱动在虚拟机里禁用编码。
常见失败与含义
Section titled “常见失败与含义”| 现象 | 常见原因 |
|---|---|
| 带设备时虚拟机起不来 | IOMMU 未开,或设备在共享组里 |
| 来宾能启动,显卡报 43/31 | vBIOS 或驱动拒绝虚拟机 |
| 能用到重启 | 宿主回收了设备,或驱动更新 |
| 宿主失去显示 | 唯一的显卡被分配走了 |
| 性能极低 | 链路宽度/速率降级,或走了软件渲染 |
直通显卡的 43 错误是驱动策略拒绝,不是硬件故障——修复方式因厂商/驱动而异,部分消费级卡根本不支持。
投入一晚上之前先确认
Section titled “投入一晚上之前先确认”# 宿主(Proxmox 示例):IOMMU 是否开启、设备如何分组# dmesg | grep -e DMAR -e IOMMU# for d in /sys/kernel/iommu_groups/*; do echo "IOMMU group ${d##*/}"; doneWindows 宿主上,设备管理器 → 查看 → 依连接排序设备 能看出显卡挂在哪个 PCIe 根端口下,对应你要对付的分组。
E1。DDA 与 GPU-P 的要求有微软文档依据。实验室宿主没有独显分配给虚拟机,未尝试直通——本文刻意不发布任何性能数字。