当前位置: 首页 > news >正文

Windows 图形显示驱动开发-CPU 内存调节和64KB 页面支持

对于 32 位 OS 离散图形处理单元 (GPU) 不支持可调整大小的 BAR,或者当调整帧缓冲区 BAR 的大小失败时,Windows 显示驱动程序模型 (WDDM) v2 将提供一种替代机制,通过该机制可以有效地访问离散 GPU VRAM。 对于支持可编程 BAR 地址空间的 GPU,WDDM v2 中引入了新的 CPU 主机内存调节功能来抽象该功能。

内存调节

公开 CPU 主机内存调节时,内核模式驱动程序会为每个支持 CPU 主机内存调节的段填充新的 DXGK_CPUHOSTAPERTURE 上限结构。 这定义了 CPU 主机内存调节的大小,这允许驱动程序保留一些 BAR 供内部使用。 页大小与内存段的 GPU 页相同。

然后,内核模式驱动程序公开两个新的设备驱动程序接口, (DDI) 来管理 BAR 地址空间,尤其是 DxgkDdiMapCpuHostAperture 和 DxgkDdiUnmapCpuHostAperture。

CPU 主机内存调节后面的页表的内存由驱动程序管理,并在驱动程序初始化期间提前设置。 DxgkDdiMapCpuHostAperture 和 DxgkDdiUnmapCpuHostAperture 预期在段枚举后立即正常运行,并在视频内存管理器初始化期间使用,以在适配器初始化期间将 CPU 虚拟地址映射到系统分页进程的页目录和页表。

当需要 CPU 访问内存段时,视频内存管理器会保留 CPU 主机 Aperture 中的页,并通过它映射内存段页。 下面对此做了演示。

在链接的显示适配器配置中,除以下内容外,内容看起来类似。

默认 或 LinkMirrored 分配始终映射到 GPU0。
LinkInstanced 分配的虚拟地址范围为 AllocationSize*NumberOfGPUInLink ,这些地址范围与映射到不同 GPU 的分配的各个部分相关联。
下图说明了这一点:

 64KB 页面支持

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

支持 4 KB 页表条目的叶页表 (PTE) ;
支持 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 页表的 PTE 指向 4 KB 页表或 64 KB 页表;
  • 级别 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 页表:

  • 只有 64 KB 的对齐分配映射到该范围;
  • 映射到范围的所有分配的内存段支持 64 KB 页;

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

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

完成转换的方式如下:

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

无法从具有 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 页的段。

相关文章:

Windows 图形显示驱动开发-CPU 内存调节和64KB 页面支持

对于 32 位 OS 离散图形处理单元 (GPU) 不支持可调整大小的 BAR,或者当调整帧缓冲区 BAR 的大小失败时,Windows 显示驱动程序模型 (WDDM) v2 将提供一种替代机制,通过该机制可以有效地访问离散 GPU VRAM。 对于支持可编程 BAR 地址空间的 GPU…...

PLC通信交互系统技术分享

目录 0、前言 1、模块划分 2、状态机 3、通信层增强 4、异常处理机制 5、核心代码 关键状态处理示例 6、部署与测试方案 1. 环境要求 2. 性能测试指标 0、前言 这是一个C程序,用于与西门子PLC进行通信,处理SN码、拍照信号、检测结果等流程。代码…...

ceph HEALTH_WARN clock skew detected on mon.f, mon.o, mon.p, mon.q

问题 ceph health detail[WRN] MON_CLOCK_SKEW: clock skew detected on mon.f, mon.o, mon.p, mon.qmon.f clock skew 0.243128s > max 0.05s (latency 0.000836159s)mon.o clock skew 16.249s > max 0.05s (latency 0<...

Git命令行入门

诸神缄默不语-个人CSDN博文目录 之前写过一篇VSCode Git的博文&#xff1a;VSCode上的Git使用手记&#xff08;持续更新ing…&#xff09; 现在随着开发经历增加&#xff0c;感觉用到命令行之类复杂功能的机会越来越多了&#xff0c;所以我专门再写一篇Git命令行的文章。 G…...

pdf-extract-kit paddle paddleocr pdf2markdown.py(效果不佳)

GitHub - opendatalab/PDF-Extract-Kit: A Comprehensive Toolkit for High-Quality PDF Content Extraction https://github.com/opendatalab/PDF-Extract-Kit pdf2markdown.py 运行遇到的问题&#xff1a; 错误&#xff1a; -------------------------------------- C Tra…...

Android 10.0 移除wifi功能及相关菜单

介绍 客户的机器没有wifi功能&#xff0c;所以需要删除wifi相关的菜单&#xff0c;主要有设置-网络和互联网-WLAN,长按桌面设置弹出的WALN快捷方式&#xff0c;长按桌面-微件-设置-WLAN。 修改 Android10 上直接将config_show_wifi_settings改为false,这样wifi菜单的入口就隐…...

什么是Dubbo?Dubbo框架知识点,面试题总结

本篇包含什么是Dubbo&#xff0c;Dubbo的实现原理&#xff0c;节点角色说明&#xff0c;调用关系说明&#xff0c;在实际开发的场景中应该如何选择RPC框架&#xff0c;Dubbo的核心架构&#xff0c;Dubbo的整体架构设计及分层。 主页还有其他的面试资料&#xff0c;有需要的可以…...

Django+Vue3全栈开发实战:从零搭建博客系统

文章目录 1. 开发环境准备2. 创建Django项目与配置3. 设计数据模型与API4. 使用DRF创建RESTful API5. 创建Vue3项目与配置6. 前端页面开发与组件设计7. 前后端交互与Axios集成8. 项目优化与调试9. 部署上线10. 总结与扩展10.1 项目总结10.1.1 技术栈回顾10.1.2 项目亮点 10.2 扩…...

双重差分学习笔记

双重差分适用的研究场景&#xff1a; 研究某项政策或者冲击造成的影响 例如&#xff0c;某某小学在2024.12.12日颁布了小红花激励措施&#xff0c;我们要研究这项措施对学生成绩的影响&#xff0c;此时&#xff0c;就可以使用双重差分模型。 双重差分适用的数据类型&#xf…...

python组备赛笔记(基础篇)

小数输出 1、代码示例&#xff1a; print(jc,%.3f%fc) 输出格式&#xff1a; 890 86075.959 2、代码示例&#xff1a; print(f%.3f%b) 输出格式&#xff1a; 1.000 金字塔输出 1、代码示例&#xff1a; n 5 t * for i in range(1,n1):print(f{t*(2*i-1):^{2*n-1}}) fo…...

从零开始构建一个小型字符级语言模型的完整详细教程(基于Transformer架构)

最近特别火的DeepSeek,是一个大语言模型,那一个模型是如何构建起来的呢?DeepSeek基于Transformer架构,接下来我们也从零开始构建一个基于Transformer架构的小型语言模型,并说明构建的详细步骤及内部组件说明。我们以构建一个字符级语言模型(Char-Level LM)为例,目标是通…...

XUnity.AutoTranslator-Gemini——调用Google的Gemini API, 实现Unity游戏中日文文本的自动翻译

XunityAutoTranslator-Gemini-API 本项目是一个使用 Flask 框架和 Google Gemini GenAI 模型构建的 Web API 服务&#xff0c;用于将日文unity游戏文本翻译成简体中文。 日文游戏文本AI翻译API (基于Google Gemini) 本项目是一个使用 Flask 框架和 Google Gemini GenAI 模型…...

中文Build a Large Language Model (From Scratch) 免费获取全文

中文pdf下载地址&#xff1a;https://pan.baidu.com/s/1aq2aBcWt9vYagT2-HuxdWA?pwdlshj 提取码&#xff1a;lshj 原文、代码、视频项目地址&#xff1a;https://github.com/rasbt/LLMs-from-scratch 翻译工具&#xff1a;沉浸式翻译&#xff08;https://app.immersivetrans…...

DeepSeek 助力 Vue 开发:打造丝滑的瀑布流布局(Masonry Layout)

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…...

C++:从拷贝构造函数到深浅拷贝

拷贝构造函数 当实例化一个新对象并使用同类型对其进行初始化时&#xff0c;会显式调用类的拷贝构造函数&#xff0c;拷贝构造函数写法&#xff1a;形参为const修饰的同类型类引用。拷贝构造函数有个需要注意的点&#xff0c;形参为何是只允许传递引用呢&#xff1f;原因在于若…...

Openssl之SM2加解密命令

### 1. 生成 SM2 私钥openssl genpkey -algorithm EC \-pkeyopt ec_paramgen_curve:sm2 \-out sm2_private_key.pem### 2. 从私钥导出 SM2 公钥openssl pkey -in sm2_private_key.pem \-pubout \-out sm2_public_key.pem### 3. 使用 SM2 公钥加密openssl pkeyutl -encrypt \-pu…...

Java集合框架之List接口详解

目录 一、List接口概述 二、List接口常见实现类 三、List接口特有方法: 1.元素操作 2. 查找元素位置 3. 子列表与不可变列表 四、List特有迭代器:ListIterator 1.特有的迭代方式 2.ListIterator接口中的常用方法: ⑴.void add(E e):在光标位置插入元素。(会移动…...

oracle apex post接口

日常记录 使用到了apex_json方式接收 、、、1 首先&#xff0c;接口通过body传递过来&#xff0c;成功接收到&#xff0c; 数据格式为 JSON_OBJECT_T l_json : JSON_OBJECT_T.parse(:body); 这里我用参数接收到 然后 里面是包含了 "data" 我用 继续接收到这个 l…...

【数据挖掘】--算法

【数据挖掘】--算法 目录&#xff1a;1. 缺失值和数值属性处理1缺失值处理&#xff1a; 2. 用于文档分类的朴素贝叶斯3. 分治法&#xff1a;建立决策树4. 覆盖算法建立规则5. 挖掘关联规则6. 线性模型有效寻找最近邻暴力搜索&#xff08;Brute-Force Search&#xff09;kd树&am…...

halcon机器视觉深度学习对象检测,物体检测

目录 效果图操作步骤软件版本halcon参考代码本地函数 get_distinct_colors()本地函数 make_neighboring_colors_distinguishable() 效果图 操作步骤 首先要在Deep Learning Tool工具里面把图片打上标注文本&#xff0c; 然后训练模型&#xff0c;导出模型文件 这个是模型 mod…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容&#xff1a;参考网站&#xff1a; PID算法控制 PID即&#xff1a;Proportional&#xff08;比例&#xff09;、Integral&#xff08;积分&…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

文章目录 1.什么是Redis&#xff1f;2.为什么要使用redis作为mysql的缓存&#xff1f;3.什么是缓存雪崩、缓存穿透、缓存击穿&#xff1f;3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

在Ubuntu中设置开机自动运行(sudo)指令的指南

在Ubuntu系统中&#xff0c;有时需要在系统启动时自动执行某些命令&#xff0c;特别是需要 sudo权限的指令。为了实现这一功能&#xff0c;可以使用多种方法&#xff0c;包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法&#xff0c;并提供…...

【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】

1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件&#xff08;System Property Definition File&#xff09;&#xff0c;用于声明和管理 Bluetooth 模块相…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生&#xff0c;我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要&#xff0c;而您认真负责的教学态度&#xff0c;让课程的每一部分都充满了实用价值。 尤其让我…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI&#xff08;https://spring.io/projects/spring-ai&#xff09;作为Spring生态中的AI集成框架&#xff0c;其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似&#xff0c;但特别为多语…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...

【Linux】Linux 系统默认的目录及作用说明

博主介绍&#xff1a;✌全网粉丝23W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...