Windows 图形显示驱动开发-WDDM 2.0 -GpuMmu 寻址方式

在 GpuMmu 模型中,GPU 有自己的内存管理单元 (MMU),用于将每进程 GPU 虚拟地址转换为物理地址。

每个进程都有单独的 CPU 和 GPU 虚拟地址空间,这些空间使用不同的页表。 视频内存管理器(VidMm)管理所有进程的 GPU 虚拟地址空间。 VidMm 还负责分配、扩展、更新、确保驻留和释放页表。 GPU MMU 使用的页表的硬件格式对于 VidMm 来说是未知的,并通过设备驱动程序接口 (DDI) 进行抽象封装。 抽象支持多级级别转换,包括固定大小的页表和可调整大小的根页表。

尽管 VidMm 负责管理 GPU 虚拟地址空间及其基础页表,但 VidMm 不会自动将 GPU 虚拟地址分配给分配。 这一责任落在用户模式驱动程序 (UMD) 身上。

VidMm 为 UMD 提供两个主要服务:

内存分配和解除分配。 UMD 可以通过现有 Allocate 回调分配视频内存,并通过现有 Deallocate 回调释放该内存。 Allocate 返回一个指向 VidMm 分配的句柄给 UMD。 GPU 引擎可以在此句柄上运行。 此类分配专门指物理视频内存,GPU 引擎可以通过分配列表访问和处理这些内存。

GPU 虚拟地址空间管理。 对于在虚拟模式下运行的引擎,必须先将 GPU 虚拟地址显式分配给内存分配,然后才能进行虚拟化访问。 为此,VidMm 提供 UMD 服务来保留或释放 GPU 虚拟地址,并将特定分配范围映射到进程的 GPU 虚拟地址空间。 这些服务很灵活,允许 UMD 精细控制进程 GPU 虚拟地址空间。 UMD 可以决定为某个分配指定特定的 GPU 虚拟地址,或者让 VidMm 自动选取可用地址,并可能指定一些最小和最大 GPU 虚拟地址的约束条件。 单项分配可以有多个与之关联的 GPU 虚拟地址映射,并且向 UMD 提供服务以实现图块资源协议。

同样,在链接的显示适配器配置中,UMD 可以将 GPU 虚拟地址显式映射到特定的分配实例。 对于每个映射,UMD 可以选择是映射到自身还是映射到特定的对等 GPU。 在此模型中,分配中分配的 CPU 和 GPU 虚拟地址是独立的。 UMD 可以决定在两个地址空间中保持它们相同,或使它们保持独立。

GPU 虚拟地址通过 DDI 接口以固定 4 KB 页面粒度进行逻辑化管理。 GPU 虚拟地址可以引用驻留在内存段或系统内存中的内存分配。 系统内存以 4 KB 物理粒度进行管理,而内存段在驱动程序选择时以 4 KB 或 64 KB 进行管理。 所有 VidMm 分配都对齐,并调整大小为驱动程序选择的页面大小的整数倍。

对无效范围的 GPU 虚拟地址的访问将导致访问冲突,并终止导致访问错误的上下文和/或设备。 为了从这种故障中恢复,VidMm 会启动引擎重置;如果不成功,则会升级为适配器范围的超时检测恢复 (TDR)。

下图演示了 GpuMmu 模型:

相关推荐
世微 如初14 天前
AP5125大功率LED恒流驱动实战:地摊灯项目从原理图到调试笔记
驱动开发·芯片·led电源驱动·降压恒流ic
ScilogyHunter14 天前
Zephyr串口驱动开发及构建完全指南
驱动开发·uart·zephyr
_Emma_14 天前
【DRM&Graphic】Linux图形与显示框架
linux·驱动开发·图形渲染·显示器
董厂长14 天前
Loop Engineering:停止手动提示,开始设计自动提示的系统
大数据·人工智能·驱动开发·llm
Saniffer_SH15 天前
【高清视频】Gen6 服务器还没到,Gen6 SSD 怎么测?Emily 现场演示三种测试环境
人工智能·驱动开发·测试工具·缓存·fpga开发·计算机外设·压力测试
暮云星影15 天前
全志linux开发屏幕适配(二)`HDMI`驱动适配说明
linux·arm开发·驱动开发
charlie11451419115 天前
嵌入式Linux驱动开发——从轮询到中断
linux·开发语言·驱动开发·嵌入式
暮云星影15 天前
瑞芯微rk3566开发FIT Secure Boot
linux·arm开发·驱动开发·安全
暮云星影15 天前
全志linux开发 USB接口设置
linux·arm开发·驱动开发
sukalot15 天前
windows显示驱动开发-CCD DDI的其它技术
windows·驱动开发