GpuMmu 模型

GpuMmu 模型中,图形处理单元 (GPU) 具有自己的内存管理单元 (MMU) ,它将每个进程的 GPU 虚拟地址转换为物理地址。

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

尽管视频内存管理器负责管理 GPU 虚拟地址空间及其基础页表,但视频内存管理器不会自动将 GPU 虚拟地址分配给分配。 此责任由用户模式驱动程序承担。

视频内存管理器为用户模式驱动程序提供两组服务。 首先,用户模式驱动程序可以通过现有的 Allocate 回调分配视频内存,并通过现有的 Deallocate 回调释放该内存。 就像今天一样,这会为用户模式驱动程序返回视频内存管理器分配的句柄,该分配可由 GPU 引擎操作。 此类分配仅表示分配的物理部分,可由引擎通过分配列表引用以物理方式运行来引用。

对于在虚拟模式下运行的引擎,需要将 GPU 虚拟地址显式分配给分配,然后才能以虚拟方式访问该地址。 为此,视频内存管理器提供用户模式驱动程序服务来保留或释放 GPU 虚拟地址,并将特定的分配范围映射到进程的 GPU 虚拟地址空间。 这些服务非常灵活,允许用户模式驱动程序对进程 GPU 虚拟地址空间进行精细控制。 用户模式驱动程序可能决定将非常具体的 GPU 虚拟地址分配给分配,或者让视频内存管理器自动选取可用的地址,从而可能指定一些最小和最大 GPU 虚拟地址限制。 单个分配可能有多个与之关联的 GPU 虚拟地址映射,并且会向用户模式驱动程序提供服务以实现 磁贴资源协定

同样,在链接的显示适配器配置中,用户模式驱动程序可能会将 GPU 虚拟地址显式映射到特定的分配实例,并为每个映射选择映射是映射到自我还是映射到特定的对等 GPU。 在此模型中,分配给分配的 CPU 和 GPU 虚拟地址是独立的。 用户模式驱动程序可能决定在两个地址空间中保持相同或保持独立。

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

对无效 GPU 虚拟地址范围的访问会导致访问冲突并终止导致访问故障的上下文和/或设备。 为了从此类故障中恢复,视频内存管理器会启动引擎重置,如果失败,该重置将提升为适配器范围的超时检测恢复 (TDR) 。

GpuMmu 模型如下所示:

显示 GpuMmu 模型及其组件和交互的示意图。