Windows 图形显示驱动开发-IoMmu 模型

输入输出内存管理单元 (IOMMU) 是一个硬件组件,它将支持具有 DMA 功能的 I/O 总线连接到系统内存。 它将设备可见的虚拟地址映射到物理地址,使其在虚拟化中很有用。

在 WDDM 2.0 IoMmu 模型中,每个进程都有一个虚拟地址空间,即:

  • 在 CPU 和 GPU 之间共享。
  • 由 OS 内存管理器管理。

为了访问内存,GPU 向兼容的 IOMMU 发送数据请求。 该请求包括一个共享虚拟地址和一个进程地址空间标识符 (PASID)。 IOMMU 使用共享页表执行地址转换。 下图说明了此操作。

内核模式显示驱动程序 (KMD) 通过设置DXGK_VIDMMCAPS::IoMmuSupported 上限来表示对 IoMmu 模型的支持。 设置此标志后,视频内存管理器 (VidMm) 会自动将 GPU 与 IOMMU 一起使用的任何进程注册,并获取该进程地址空间的 PASID。 PASID 在创建设备期间传递给驱动程序。

VidMm 在显示之前将主要分配映射到光圈段,确保显示控制器具有对这些分配的物理访问权限。

在 IoMmu 模型中,用户模式显示驱动程序 (UMD) 继续使用 VidMm 的 Allocate 服务为 GPU 分配视频内存。 此过程允许 UMD:

遵循驻留模型;
支持 DirectX 资源共享模型;
确保主图面对内核可见,并在显示之前映射到内存调整;

UMD 在用户模式下完全管理第一级转换(磁贴资源地址到共享 CPU/GPU 地址)。

基于 IOMMU 的 GPU 隔离

基于 IOMMU 的 GPU 隔离是一种通过管理 GPU 访问系统内存的方式来增强系统安全性和稳定性的技术。 本文介绍了 WDDM 基于 IOMMU 的 GPU 隔离功能(适用于支持 IOMMU 的设备),以及开发人员如何在其图形驱动程序中实现该功能。

此功能从 Windows 10 版本 1803 (WDDM 2.4) 开始提供。 

基于 IOMMU 的 GPU 隔离允许 Dxgkrnl 利用 IOMMU 硬件对从 GPU 访问系统内存加以限制。 OS 可以提供逻辑地址,而不是物理地址。 这些逻辑地址可用于限制设备对系统内存的访问,使其只能访问允许访问的内存。 它通过确保 IOMMU 将 PCIe 上的内存访问转换为有效和可访问的物理页面来实现这一目标。

如果设备访问的逻辑地址无效,则设备就无法访问物理内存。 这一限制可防止一系列允许攻击者通过受损硬件设备访问物理内存的漏洞。 如果缺少它,攻击者就可以读取设备运行所不需要的系统内存内容。

默认情况下,只有为 Microsoft Edge 启用 Windows Defender 应用程序防护(即容器虚拟化)的电脑才会启用此功能。

出于开发目的,实际的 IOMMU 重新映射功能是通过以下注册表键值来启用或禁用的:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers
DWORD: IOMMUFlags0x01 Enabled* Enables creation of domain and interaction with HAL0x02 EnableMappings* Maps all physical memory to the domain* EnabledMappings is only valid if Enabled is also set. Otherwise no action is performed0x04 EnableAttach* Attaches the domain to the device(s)* EnableAttach is only valid if EnableMappings is also set. Otherwise no action is performed0x08 BypassDriverCap* Allows IOMMU functionality regardless of support in driver caps. If the driver does not indicate support for the IOMMU and this bit is not set, the enabled bits are ignored.0x10 AllowFailure* Ignore failures in IOMMU enablement and allow adapter creation to succeed anyway.* This value cannot override the behavior when created a secure VM, and only applies to forced IOMMU enablement at device startup time using this registry key.

如果启用此功能,IOMMU 将在适配器启动后立即启用。 所有在此之前分配的驱动程序在启用后都会被映射。

此外,如果将速度暂存密钥 14688597 设置为已启用,则会在创建安全虚拟机时激活 IOMMU。 目前,此暂存密钥默认为已禁用,以便在没有适当 IOMMU 支持的情况下允许自托管。

在启用后,如果驱动程序不提供 IOMMU 支持,则启动安全虚拟机会失败。

目前还无法在 IOMMU 启用后将其禁用。

IOMMU DMA 重新映射

直到 WDDM 3.0,Dxgkrnl 仅支持通过 1:1 物理重新映射实现 IOMMU 隔离,这意味着 GPU 访问的逻辑页被转换为相同的物理页码。 IOMMU DMA 重新映射允许 GPU 通过不再以 1:1 映射的逻辑地址访问内存。 相反,Dxgkrnl 能够提供逻辑上连续的地址范围。

Dxgkrnl 对 GPU 施加限制:GPU 必须能够访问所有物理内存才能启动设备。 如果 GPU 的最高可见地址不超过系统上安装的最高物理地址,则 Dxgkrnl 将无法初始化适配器。 即将推出的服务器和高端工作站可以配置超过 1 TB 的内存,突破了许多 GPU 常见的 40 位地址空间限制。 DMA 重新映射用作允许 GPU 在此环境中工作的机制。

在启动时,Dxgkrnl 通过将设备的最高可访问物理地址与系统上安装的内存进行比较来确定是否需要逻辑重新映射。 如有必要,DMA 重新映射用于将 GPU 可见边界内的逻辑地址范围映射到系统上的任何物理内存。 例如,如果 GPU 限制为 1 TB,则 Dxgkrnl 将从 [0, 1 TB) 分配逻辑地址,然后可以通过 IOMMU 映射到系统上的任何物理内存。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/70193.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软件测评报告包括哪些内容?第三方软件测评机构推荐

在当今信息技术飞速发展的时代,软件的品质与性能直接影响到企业的运营效率和市场竞争力。为了确保软件的可用性和可靠性,软件测评成为一个不可或缺的环节,软件测评报告也是对软件产品进行全面评估后形成的一份文档,旨在系统地纪录…

深浅拷贝区别,怎么区别使用

在 JavaScript 中,深拷贝(Deep Copy) 和 浅拷贝(Shallow Copy) 是两种不同的对象复制方式,它们的区别主要体现在对嵌套对象的处理上。以下是它们的详细对比及使用场景: 1. 浅拷贝(Sh…

tailscale + derp中继 + 阿里云服务器 (无域名版)

使用tailscale默认的中转节点延迟很高,因为服务器都在国外。 感谢大佬提供的方案:Tailscale 搭建derp中继节点,不需要域名,不需要备案,不需要申请证书(最新) - yafeng - 博客园 基于这个方案&…

【异常错误】pycharm debug view变量的时候显示不全,中间会以...显示

异常问题: 这个是在新版的pycharm中出现的,出现的问题,点击view后不全部显示,而是以...折叠显示 在setting中这么设置一下就好了: 解决办法: https://youtrack.jetbrains.com/issue/PY-75568/Large-stri…

【DeepSeek系列】04 DeepSeek-R1:带有冷启动的强化学习

文章目录 1、简介2、主要改进点3、两个重要观点4、四阶段后训练详细步骤4.1 冷启动4.2 推理导向的强化学习4.3 拒绝采样和有监督微调4.4 针对所有场景的强化学习 5、蒸馏与强化学习对比6、评估6.1 DeepSeek-R1 评估6.2 蒸馏模型评估 7、结论8、局限性与未来方向 1、简介 DeepS…

车载音频配置(二)

目录 OEM 自定义的车载音频上下文 动态音频区配置 向前兼容性 Android 14 车载音频配置 在 Android 14 中,AAOS 引入了 OEM 插件服务,使你可以更主动地管理由车载音频服务监督的音频行为。 随着新的插件服务的引入,车载音频配置文件中添加了以下更改: • OEM 自定义的车…

禁止WPS强制打开PDF文件

原文网址:禁止WPS强制打开PDF文件_IT利刃出鞘的博客-CSDN博客 简介 本文介绍如何避免WPS强制打开PDF文件。 方法 1.删除注册表里.pdf的WPS绑定 WinR,输入:regedit,回车。找到:HKEY_CLASSES_ROOT\.pdf删除KWPS.PDF…

深入解析NoSQL数据库:从文档存储到图数据库的全场景实践

title: 深入解析NoSQL数据库:从文档存储到图数据库的全场景实践 date: 2025/2/19 updated: 2025/2/19 author: cmdragon excerpt: 通过电商、社交网络、物联网等12个行业场景,结合MongoDB聚合管道、Redis Stream实时处理、Cassandra SSTable存储引擎、Neo4j路径遍历算法等42…

用 Biome 替代 ESLint 和 Prettier

简介 ESLint 和 Prettier ESLint:代码质量检查工具,确保代码风格一致与无错误 Prettier:代码格式化工具,自动美化代码布局 所以:ESLint Prettier 能自动美化代码、自动检查代码错误的工具 Biome Biome:…

6.3 DBMS的功能和特征

文章目录 DBMS的6大功能DBMS的3个特征DBMS的分类 DBMS的6大功能 DBMS包含数据定义,数据库操作(检索、插入、修改、删除),数据库运行管理(保证多用户环境下正常运行),数据组织、存储、管理&…

力扣hot100——找到字符串中的所有字母异位词

给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。 解法思路: 1. // 判断字符相等,其实就是给定一个定长的窗口去滑动查找子串,为了便于判断将p 与窗口中的子…

前端插件使用xlsx-populate,花样配置excel内容,根据坐添加标替换excel内容,修改颜色,合并单元格...。

需求要求:业务人员有个非常复杂得excel表格,各种表头等,但是模板是固定得。当然也可以实现在excel上搞出各种表格,但是不如直接用已有模板替换其中要动态得内容方便,这里我们用到CSDN得 xlsx-populate 插件。 实列中我…

未来AI方向落地场景:小语言模型,super_private_agent

未来AI方向落地场景:小语言模型,super_private_agent 目录 未来AI方向落地场景:小语言模型,super_private_agent小语言模型super - private - agent(注重隐私的智能代理)碳基生命和硅基生命交互界面面向agent的专用交互协议和数据接口从web平台经济到网络平台举例说明社交…

Coze扣子新功能详解

今晚(2025-01-24)扣子再次进行更新 主要更新内容: 搭建小程序和 H5 用户界面时,支持使用音频组件播放音频内容 数据库操作体验提升 界面优化:对数据库详情界面进行了重新设计,并将工作流运行数据库的测试数据位置从原工作流底…

汇能感知的光谱相机/模块产品有哪些?

CM020A 分辨率:1600H1200V 光谱范围:350~950nm 光谱分辨率:1nm 接口:USB2.0 帧率:16001200 (6帧) 输出格式:Raw 8bit FOV:D73.5H58.8V44.1 相机尺寸:505055mm VM02S10 分辨率…

Ollama 本地GUI客户端:为DeepSeek用户量身定制的智能模型管理与交互工具

Ollama 本地GUI客户端:为DeepSeek用户量身定制的智能模型管理与交互工具 相关资源文件已经打包成EXE文件,可双击直接运行程序,且文章末尾已附上相关源码,以供大家学习交流,博主主页还有更多Python相关程序案例&#xf…

OpenMv识别色块通过串口发给STM32

硬件连接 1、Openmv端 这里OpenMV端仅作为数据的发送端,所以只需要共地,以及OpenMV的TX(P4)与开发板的RX端连接即可。 2、STM32端 将开发板连接STM芯片RX端与转串口TX端的跳帽取下,再将OpenMV的TX端(P4)与STM的RX连接。如果使用USB转TTL则将TTL的RX端与STM的TX端连接…

以太网交换基础(涵盖二层转发原理和MAC表的学习)

在当今的网络世界中,以太网交换技术是局域网(LAN)的核心组成部分。无论是企业网络、学校网络还是家庭网络,以太网交换机都扮演着至关重要的角色。本文将详细介绍以太网交换的基础知识,包括以太网协议、帧格式、MAC地址…

菜鸟之路Day15一一IO流(一)

菜鸟之路Day15一一IO流(一) 作者:blue 时间:2025.2.8 文章目录 菜鸟之路Day15一一IO流(一)0.概述1.初识IO流1.1.什么是IO流?1.2.IO流的作用1.3.IO流的分类 2.IO流的体系结构3.字节输出流的基本…

汽车零部件开发应该具备哪些编程思维?

目录 1、功能安全思维 2、实时性与确定性思维 3、可靠性和冗余思维 4、硬件软件协同思维 5、CAN总线通信思维 6、故障诊断和自诊断思维 7、功耗优化思维 8、软件更新和版本管理思维 9、用户体验与安全性思维 汽车零部件开发中,嵌入式软件在车辆系统中的作用…