WDDM 2.0 中的驱动程序驻留

本部分提供有关 Windows 显示驱动程序模型 (WDDM) 2.0 的驱动程序驻留更改的详细信息。 所述功能从Windows 10开始可用。

本部分中的内容

主题 说明

驻留概述

随着新驻留模型的引入,驻留将移动到设备上的显式列表,而不是每个命令的缓冲区列表。 视频内存管理器将确保在计划执行属于该设备的任何上下文之前,特定设备驻留要求列表上的所有分配都是驻留的。

分配用法跟踪

随着分配列表的消失,视频内存管理器不再能够查看特定命令缓冲区中引用的分配。 因此,视频内存管理器不再能够跟踪分配使用情况和处理相关同步。 此责任现在由用户模式驱动程序承担。 具体而言,用户模式驱动程序必须处理与直接 CPU 访问分配和重命名相关的同步。

供应和回收更改

对于 WDDM v2,有关 套餐回收 的要求正在放宽。 用户模式驱动程序不再需要在内部分配上使用套餐和回收。 空闲/挂起的应用程序将使用 Microsoft DirectX 11.1 中引入的 TrimAPI 删除驱动程序内部资源。

访问非驻留分配

图形处理单元 (GPU) 访问非驻留的分配是非法的,并且将导致为生成错误的应用程序删除设备。

有两种不同的模型来处理此类无效访问,具体取决于故障引擎是否支持 GPU 虚拟寻址:

  • 对于不支持 GPU 虚拟寻址并使用分配和修补程序位置列表修补内存引用的引擎,当用户模式驱动程序提交引用的分配列表时,将发生无效访问,该分配列表引用了不驻留在设备上的分配 (即用户模式驱动程序未在该分配) 调用 MakeResidentCb 。 发生这种情况时,图形内核会将错误的上下文/设备置于错误中。
  • 对于确实支持 GPU 虚拟寻址但访问无效的 GPU 虚拟地址的引擎,可能是因为虚拟地址后面没有分配,或者有有效的分配但尚未驻留,因此 GPU 应以中断的形式引发不可恢复的页面错误。 发生页面错误中断时,内核模式驱动程序需要通过新的页面错误通知将错误转发到图形内核。 收到此通知后,图形内核会在出错的引擎上启动引擎重置,并使出错的上下文/设备出错。 如果引擎重置失败,则图形内核会将错误提升为完全适配器范围的超时检测和恢复 (TDR) 。

进程驻留预算

在 WDDM v2 中,将为进程分配可保留多少内存的预算。 此预算可能会随时间而变化,但通常仅在系统面临内存压力时才施加。 在 Microsoft Direct3D 12 之前,预算由用户模式驱动程序以 剪裁 通知和 MakeResident 故障的形式 处理STATUS_NO_MEMORYTrimToBudget 通知、 Evict 和失败的 MakeResident 调用均以整数 NumBytesToTrim 值的形式返回最新预算,该值指示需要剪裁多少才能适应新预算。