Skip to content
Justsenger edited this page Apr 1, 2025 · 3 revisions

简介

  • GPU-PV全称为GPU paravirtualization,中文名叫做GPU半虚拟化。此功能自从WDDM 2.4开始提供,这同时意味着,虚拟机和宿主的系统版本一定不能低于17134,否则没有任何实现的可能。

  • 目前没有找到办法可以限制虚拟机GPU的资源使用,Set-VMGpuPartitionAdapter的设定参数并不会起到任何实质性作用。因此,在找到有效的方法前,不会提供资源分配功能。Nvidia的Grid驱动可以分割资源,但是它需要不菲的授权费。

  • 通过GPU-PV创建的逻辑适配器,仅仅是从系统层面模拟物理适配器,但对于物理适配器独特的注册表参数、硬件特征、驱动特征并没有很好地继承。因此,如果您尝试打开的软件/游戏依赖于这些特殊的标志,很可能出现错误,需要针对性的魔法修复。

  • 接下来介绍 WDDM 半虚拟化设计中涉及的各种组件。

WDDM

  • 以下是Windows版本和WDDM版本的对应关系,WDDM版本越高,GPU-PV的功能就越完善。
Windows版本 WDDM版本 虚拟化相关功能更新
17134 2.4 引入了基于 IOMMU 的 GPU 隔离。
17763 2.5 增强了虚拟化的支持,使得宿主和来宾之间的资源句柄管理和事件信号化,用户模式驱动(UMD)和内核模式驱动(KMD)能够更好地协同工作。
18362 2.6 提升了显存管理。虚拟机显存优先分配在GPU连续的物理显存,能收到内存的驻留状态。
19041 2.7 虚拟机设备管理器可以正确识别Microsoft Virtual Renderer Driver所对应的物理显卡型号。
20348 2.9 增加了支持跨适配器资源扫描输出(CASO)功能,渲染适配器的画面可以直接输出到显示适配器,而无需进行两次复制,降低了延迟和带宽需求。
22000 3.0 通过DMA重映射突破GPU地址限制,允许GPU访问超过硬件限制的更多内存。提高了用户模式驱动(UMD)和内核模式驱动(KMD)的事件信号机制,提升调试能力。
22621 3.1 用户模式驱动(UMD)和内核模式驱动(KMD)共享相同的内存区域,减少内存的复制和传输,优化内存的利用效率,提高数据访问速度。
26100 3.2 增加了GPU实时迁移功能。增强了图形驱动的超时检测和恢复分析。引入了WDDM功能查询机制。

Windows版本

宿主:Win11、Server 2022、Server 2025。

虚拟机:

  • 17134以下版本不支持GPU半虚拟化。

  • 17134到19040之间的版本(WDDM 2.4-2.6)可以调用GPU,但不会显示正确的显卡型号。

  • 从19041版本(WDDM 2.7)开始,可以正常使用GPU功能。

从虚拟机引出显示信号

在GPU半虚拟化模型中,虚拟机从宿主机获取到的GPU是作为“渲染适配器”存在的,通常会与作为“显示适配器”的 Microsoft Hyper-V 视频配对进行画面输出。然而,Microsoft Hyper-V 视频仅支持到1080p,刷新率也受到严重限制,因此我们需要一个更好的“显示适配器”。

总共有以下方案可以实现显示信号输出:

Microsoft Hyper-V 视频

这是默认选项,兼容性没有什么问题。资料整理中。

间接显示驱动程序

这是各种串流方案。资料整理中。

USB 显卡(需要DDA直通USB控制器x1)

比较常见的芯片是DL-6950SM768,以下一组图片描述了渲染适配器(GTX 1050)和显示适配器(DL 6950)联合工作的场景,在144Hz下fortnite几乎无延迟。

DL

DL

DL

DL

笔记

  • 工具会将宿主驱动导入到虚拟机,HostDriverStore下所有文件将设定为只读属性,以防止任何驱动文件丢失。

  • 对于Nvidia,会自动导入宿主系统的nvlddmkm.reg,并修改其中的DriverStore为HostDriverStore。

  • 一个虚拟机可以从同一张显卡获得多个逻辑适配器分区,但是总性能不变。

  • 一个虚拟机可以从多张显卡获得多个逻辑适配器分区。

Clone this wiki locally