视频内存管理器(VidMm)是 DirectX 图形内核(Dxgkrnl)中系统提供的组件,负责管理 GPU 的内存。 VidMm 处理与内核模式显示驱动程序(KMD)和用户模式驱动程序(UMD)使用的图形内存资源的分配、解除分配和总体管理相关的任务。 它与系统提供的 GPU 计划程序(VidSch)一起工作,以高效管理内存资源。
VidMm 在以下 OS 文件中实现:
- dxgkrnl.sys
- dxgmms1.sys
- dxgmms2.sys
这些文件仅作为 OS 安装的一部分提供,不能作为单独的下载提供。 这些文件仅用于与其他随附的 OS 文件协同工作。 图形驱动程序开发人员不得混合这些文件的版本。
以下部分介绍视频内存管理和图形处理单元(GPU)计划模型:
- 处理内存段
- 处理命令和 DMA 缓冲区
- GDI 硬件加速
- 视频内存套餐和回收
- GPU 抢占
1. VidMm 的核心职责
VidMm 主要负责以下任务:
功能 | 描述 |
---|---|
内存分配/释放 | 管理 显存(VRAM) 和 系统内存(共享/分页池) 的分配,供驱动和应用程序使用。 |
内存虚拟化 | 提供虚拟地址空间抽象,使多个进程/驱动能安全共享 GPU 内存。 |
内存回收 | 在资源不足时,回收闲置内存(如通过 TDR 重置后的显存清理)。 |
内存优先级 | 为不同任务(如游戏 vs 后台渲染)分配内存带宽优先级。 |
与 GPU 调度器(VidSch)协同 | 确保内存操作与 GPU 命令队列同步,避免竞争。 |
2. VidMm 的组成模块
VidMm 的实现分布在以下系统文件中
文件 | 作用 |
---|---|
dxgkrnl.sys | DirectX 图形内核主模块,包含 VidMm 核心逻辑。 |
dxgmms1.sys | 内存管理辅助模块(多适配器支持)。 |
dxgmms2.sys | 高级内存策略管理(如大页内存优化)。 |
注意:
- 这些文件 仅随 Windows 系统提供,不可单独下载或替换。
- 驱动开发者 必须使用系统原生版本,禁止混合不同版本(否则会导致兼容性问题)。
3. VidMm 的工作流程
(1) 内存分配流程
用户模式请求:
- 应用程序调用 ID3D12Device::CreateHeap 或类似 API。
- UMD(用户模式驱动)通过 D3DKMTAllocateMemory 向内核发起请求。
VidMm 处理:
- 检查可用内存(VRAM/系统内存)。
- 分配虚拟地址范围(GPU VA 空间)。
- 更新内存页表(如 GPU MMU)。
返回句柄:
- 返回内存句柄给 UMD,供后续操作(如绑定到资源)。
(2) 内存回收机制
显存不足时:VidMm 可能:
- 触发 分页(将不活跃资源换出到系统内存)。
- 调用驱动的 DxgkDdiBuildPagingBuffer 执行逐出操作。
TDR 重置后:VidMm 清理所有失效分配(如调用 DxgkDdiReleaseSwizzlingRange)。
4. 驱动开发者的交互
(1) 内核模式驱动(KMD)的职责
实现回调函数:
- DxgkDdiCreateAllocation:响应 VidMm 的内存分配请求。
- DxgkDdiDestroyAllocation:释放内存资源。
- DxgkDdiBuildPagingBuffer:处理内存迁移/逐出。
硬件适配:
- 驱动需将 VidMm 的抽象操作映射到具体 GPU 内存控制器(如 NVIDIA/AMD 的显存管理单元)。
(2) 用户模式驱动(UMD)的职责
通过 DXGKRNL 接口请求内存:
- 使用 D3DKMT API(如 D3DKMTCreateAllocation)。
避免直接管理内存:
- UMD 不应绕过 VidMm 直接操作物理内存(由内核统一管理)。
5. 关键技术与优化
技术 | 说明 |
---|---|
内存虚拟化 | 支持多个进程共享 GPU 内存,隔离访问(通过 GPU VA 空间)。 |
按需分页 | 延迟内存提交,减少显存占用(如 DirectX 12 的保留资源)。 |
内存压缩 | 部分 GPU 驱动支持显存压缩(由 VidMm 协调)。 |
多适配器支持 | 在多 GPU 系统中,VidMm 协调跨设备内存迁移(如 dxgmms1.sys 的功能)。 |
6. 常见问题与调试
(1) 内存泄漏
- 现象:GPU 内存持续增长,最终触发 TDR。
排查工具:
- Windows Performance Analyzer(WPA)分析 DXGKRNL 事件。
- GPUView 检查内存分配/释放记录。
(2) 内存碎片化
解决方案:
- 驱动应支持 DxgkDdiDefragment(WDDM 2.0+)。
- 应用层优化分配策略(如避免频繁创建/销毁资源)。
(3) 版本兼容性
严禁替换系统文件:
- dxgkrnl.sys 等文件必须与 Windows 版本严格匹配,否则会导致蓝屏(BSOD)。
7. 总结
- VidMm 是 WDDM 的内存管理核心,统一管理 GPU 显存和系统内存。
- 驱动开发者需通过标准接口交互(如 DXGKDDI 回调),避免直接操作硬件。
- 系统文件(dxgkrnl.sys 等)不可修改,必须依赖 OS 原生版本。
通过 VidMm 的协调,Windows 实现了高效的 GPU 内存虚拟化、多进程共享和错误恢复,为复杂图形应用(如游戏、AI 计算)提供了稳定基础。