Windows 图形显示驱动开发-WDDM 2.0功能 64KB页面支持

64KB 页面支持

从 WDDM 2.0 (Windows 显示驱动程序模型) 开始,WDDM 提供两种类型的叶页表以支持 64KB 页:

  1. 支持 4 KB 页表条目的叶页表 (PTE) 。
  2. 支持 64 个 PTE 的叶页表。

这两个 PTE 大小涵盖相同的虚拟地址范围,因此 4KB 页的页表的条目数是 64 KB 页表的 16 倍。

64 KB 页表的大小由 DXGK_GPUMMUCAPS::LeafPageTableSizeFor64KPagesInBytes 定义。

UpdatePageTable 操作具有DXGK_UPDATEPAGETABLEFLAGS] (/windows-hardware/drivers/ddi/d3dkmddi/ns-d3dkmddi-_dxgk_updatepagetableflags) ::Use64KBPages 标志,指示要更新的页表的类型。

WDDM 2.0+ 支持两种操作模式:

  1. 级别 1 页表的 PTE 指向 4 KB 页表或 64 KB 页表。
  2. 级别 1 页表的 PTE 同时指向 4 KB 页表和 64 KB 页表。 这称为"双 PTE"模式。 双 PTE 支持由 DXGK_GPUMMUCAPS::DualPteSupported cap 表示。

视频内存管理器根据分配对齐方式、图形处理单元 (GPU) 内存段属性以及 GPU 内存段类型来选择页面大小。 如果其对齐方式和大小是 64 KB 的倍数,并且驻留在支持 64 KB 页的内存段中,则它使用 64 KB 页映射分配

单 PTE 模式

在此模式下,级别 1 页表的 PTE 指向 4 KB 页表或 64 KB 页表。

DXGK_PTE::PageTablePageSize 字段将添加到 DXGK_PTE。 它仅应用于旧术语) 中第 1 级页表 (页目录的 PTE。 此字段使用 64KB 或 4KB 页) 告知内核模式驱动程序相应页表的类型 (。

在以下情况下,视频内存管理器选择对虚拟地址范围使用 64 KB 页表:

  1. 只有 64 KB 的对齐分配映射到该范围。
  2. 映射到范围的所有分配的内存段支持 64 KB 页。

例如,当虚拟地址范围由 64 KB 页映射,并且上述条件 (不再有效时,) 将分配提交到系统内存段,视频内存管理器将从 64 KB 页表切换到 4 KB 页表。

例如,当页表只有 64 KB PTE 且 PTE 需要指向 4KB 页 (时,将分配放置在系统内存中) ,页表将转换为使用 4 KB PTE。

完成转换的方式如下:

  1. 进程的所有上下文都暂停。
  2. 现有 PTE 更新为指向 4KB 页面。 驱动程序将获取 UpdatePageTable 分页操作。
  3. 将更新指向页表的级别 1 PTE,以反映 pageTablePageSize = DXGK_PTE_PAGE_TABLE_PAGE_4KB) (新的页面大小。 驱动程序将获取 UpdatePageTable 分页操作。
  4. 进程的所有上下文都会恢复。

无法从具有 4KB PTE 的页面表转换为具有 64KB PTE 的页面表。

若要防止在不同页表大小之间频繁切换,驱动程序应将少量分配打包在一起。

双 PTE 模式

在此模式下,级别 1 页表的 PTE 可能同时指向 4 KB 页表和 64 KB 页表。

级别 1 页表的条目中的两个指针可能设置了 "有效" 标志,但级别 0 页表中涵盖相同 64 KB 虚拟地址范围的条目不能同时有效。

将 64 KB PTE 涵盖的分配置于页大小为 64 KB 的内存段时,64 KB PTE 将变为无效,相应的 4 KB PTE 将变为有效。

在下图中,4 KB 分配和 64 KB 对齐的分配位于级别 0 页表涵盖的相同虚拟地址范围中,以及支持 64 KB 页的段。

相关推荐
cxr8281 天前
SPARC方法论在Claude Code基于规则驱动开发中的应用
人工智能·驱动开发·claude·智能体
sukalot2 天前
window显示驱动开发—显示适配器的子设备
驱动开发
Evan_ZGYF丶2 天前
【RK3576】【Android14】如何在Android14下单独编译kernel-6.1?
linux·驱动开发·android14·rk3576
sukalot3 天前
window显示驱动开发—视频呈现网络简介
驱动开发
sukalot3 天前
window显示驱动开发—为头装载和专用监视器生成自定义合成器应用(二)
驱动开发
zwhSunday4 天前
Linux驱动开发(1)概念、环境与代码框架
linux·运维·驱动开发
sukalot4 天前
window显示驱动开发—为头装载和专用监视器生成自定义合成器应用(三)
驱动开发
sukalot4 天前
window显示驱动开发—为头装载和专用监视器生成自定义合成器应用(一)
驱动开发
cxr8285 天前
基于Claude Code的 规范驱动开发(SDD)指南
人工智能·hive·驱动开发·敏捷流程·智能体
zwhSunday6 天前
Linux驱动开发(2)进一步理解驱动
linux·驱动开发