window 显示驱动开发-视频内存管理和 GPU 计划

视频内存管理器(VidMm)是 DirectX 图形内核(Dxgkrnl)中系统提供的组件,负责管理 GPU 的内存。 VidMm 处理与内核模式显示驱动程序(KMD)和用户模式驱动程序(UMD)使用的图形内存资源的分配、解除分配和总体管理相关的任务。 它与系统提供的 GPU 计划程序(VidSch)一起工作,以高效管理内存资源。

VidMm 在以下 OS 文件中实现:

  • dxgkrnl.sys
  • dxgmms1.sys
  • dxgmms2.sys

这些文件仅作为 OS 安装的一部分提供,不能作为单独的下载提供。 这些文件仅用于与其他随附的 OS 文件协同工作。 图形驱动程序开发人员不得混合这些文件的版本。

以下部分介绍视频内存管理和图形处理单元(GPU)计划模型:

  1. 处理内存段
  2. 处理命令和 DMA 缓冲区
  3. GDI 硬件加速
  4. 视频内存套餐和回收
  5. GPU 抢占

 1. VidMm 的核心职责

VidMm 主要负责以下任务:

功能描述
内存分配/释放管理 显存(VRAM) 和 系统内存(共享/分页池) 的分配,供驱动和应用程序使用。
内存虚拟化提供虚拟地址空间抽象,使多个进程/驱动能安全共享 GPU 内存。
内存回收在资源不足时,回收闲置内存(如通过 TDR 重置后的显存清理)。
内存优先级为不同任务(如游戏 vs 后台渲染)分配内存带宽优先级。
与 GPU 调度器(VidSch)协同确保内存操作与 GPU 命令队列同步,避免竞争。

 2. VidMm 的组成模块

VidMm 的实现分布在以下系统文件中

文件作用
dxgkrnl.sysDirectX 图形内核主模块,包含 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 计算)提供了稳定基础。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值