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

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 映射到系统上的任何物理内存。

相关文章:

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

输入输出内存管理单元 (IOMMU) 是一个硬件组件,它将支持具有 DMA 功能的 I/O 总线连接到系统内存。 它将设备可见的虚拟地址映射到物理地址,使其在虚拟化中很有用。 在 WDDM 2.0 IoMmu 模型中,每个进程都有一个虚拟地址空间,即&a…...

简单易懂,解析Go语言中的Channel管道

Channel 管道 1 初始化 可用var声明nil管道;用make初始化管道; len(): 缓冲区中元素个数, cap(): 缓冲区大小 //变量声明 var a chan int //使用make初始化 b : make(chan int) //不带缓冲区 c : make(chan stri…...

STM32 USB 设备的描述信息作用

在使用 STM32 USB 功能时 usbd_desc.c 文件中定义了一段宏,以下解每段宏的用途。 #define USBD_VID 1155 #define USBD_LANGID_STRING 1033 #define USBD_MANUFACTURER_STRING "STMicroelectronics" #define US…...

Redis字符串常见命令(String)

字符串常见命令(String) Redis 中的字符串类型是一种非常基础且常用的数据类型,它不仅可以存储任何形式的字符串(包括文本数据),还可以对数字字符串进行自增、自减等操作。以下是对 Redis 字符串类型常见命…...

Educational Codeforces Round 174 (Rated for Div. 2)(ABCD)

A. Was there an Array? 翻译: 对于整数数组 ​,我们将其相等特征定义为数组 ,其中,如果数组 a 的第 i 个元素等于其两个相邻元素,则 ;如果数组 a 的第 i 个元素不等于其至少一个相邻元素,则 …...

基于知识图谱的问答系统:后端Python+Flask,数据库Neo4j,前端Vue3(提供源码)

基于知识图谱的问答系统:后端PythonFlask,数据库Neo4j,前端Vue3 引言 随着人工智能技术的不断发展,知识图谱作为一种结构化的知识表示方式,逐渐成为问答系统的重要组成部分。本文将介绍如何构建一个基于知识图谱的问答…...

面试知识点2

文章目录 1. Linux 与 DockerLinux 基本指令VMware 安装 CentOSDocker 拉取镜像创建容器、部署 Spring Boot 项目 2. 关系型数据库 MySQL数据库语法多表关联查询数据库索引 3. 事务与死锁事务的隔离级别死锁的原因和避免方法 4. 排序算法与数据结构二分查找快速排序常见数据结构…...

Django项目之订单管理part1

一.前言 我们前面把django的常用知识点给讲完了,现在我们开始项目部分,项目是一个订单管理系统,我们同时也会在项目之中也会讲一些前面没有用到的知识点。 项目大概流程如下: 核心的功能模块: 认证模块,用…...

基于SSM+Vue的智能汽车租赁平台设计和实现(源码+文档+部署讲解)

技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论…...

deepseek本地调用

目录 1.介绍 2.开始调用 2.1模型检验 2.2 通过url调用 3.总结 1.介绍 这篇博客用来教你如何从本地调用ollama中deepseek的模型接口,直接和deepseek进行对话。 2.开始调用 2.1模型检验 首先要保证ollama已经安装到本地,并且已经下载了deepseek模型…...

文件同步工具哪家强?FreeFileSync 免费无限制

FreeFileSync 是一款备受推崇的开源文件同步与备份软件,凭借其卓越的功能和简洁直观的界面,赢得了全球用户的青睐。该软件不仅支持跨平台操作,兼容 Windows、macOS 和 Linux 系统,还能帮助用户在不同设备之间无缝同步文件&#xf…...

捷米特 JM - RTU - TCP 网关应用 F - net 协议转 Modbus TCP 实现电脑控制流量计

一、项目背景 在某工业生产园区的供水系统中,为了精确监测和控制各个生产环节的用水流量,需要对分布在不同区域的多个流量计进行集中管理。这些流量计原本采用 F - net 协议进行数据传输,但园区的监控系统基于 Modbus TCP 协议进行数据交互&…...

Coze扣子怎么使用更强大doubao1.5模型

最近,豆包刚刚发布了最新的doubao1.5系列模型,并且加量不加价。 在性能极大进步的情况下,价格还与之前一致。真是业界良心了。 在同样的价格下,肯定要使用性能更强大的模型嘛 于是我准备把所有的智能体和工作流切换到doubao1.5…...

layui 远程搜索下拉选择组件(多选)

模板使用&#xff08;lay-module/searchSelect&#xff09;&#xff0c;依赖于 jquery、layui.dist 中的 dropdown 模块实现&#xff08;所以data 格式请参照 layui文档&#xff09; <link rel"stylesheet" href"layui-v2.5.6/dist/css/layui.css" /&g…...

嵌入式学习(18)---Linux文件编程中的进程

一、进程的概念 进程:(用来描述 程序动态执行的过程&#xff0c;方便操作系统管理的) 进行中的程序 程序的一次执行过程 (内存 CPU) 程序的实例 程序 ----加载到内存----> 进程 应用场景: 实现并发 同一时刻 同时发生 并行 …...

一.AI大模型开发-初识机器学习

机器学习基本概念 前言 本文主要介绍了深度学习基础&#xff0c;包括机器学习、深度学习的概念&#xff0c;机器学习的两种典型任务分类任务和回归任务&#xff0c;机器学习中的基础名词解释以及模型训练的基本流程等。 一.认识机器学习 1.人工智能和机器学习 人工智能&am…...

RoCE和 TCP的区别

RoCE&#xff08;RDMA over Converged Ethernet&#xff09;和 TCP&#xff08;Transmission Control Protocol&#xff09;都是用于数据传输的协议&#xff0c;但它们在多个方面存在显著区别&#xff0c;以下为你详细介绍&#xff1a; 设计目标 RoCE&#xff1a;主要设计目标…...

勒索病毒攻击:如何应对和恢复

近年来,勒索病毒(Ransomware)已经成为全球信息安全领域最具破坏力的威胁之一。无论是个人用户,还是大中型企业,甚至政府机构,勒索病毒的攻击频率和破坏性日益增加。2020年及2021年,勒索病毒攻击不仅数量激增,且其攻击手法、目标和传播方式也变得更加复杂、精密和具有针…...

解决MySQL错误:You can‘t specify target table ‘xxx‘ for update in FROM clause

目录 错误复现场景原因分析解决方案方法1&#xff1a;使用派生表&#xff08;推荐&#xff09;方法2&#xff1a;改用JOIN操作方法3&#xff1a;使用临时表 总结 在编写MySQL的UPDATE或DELETE语句时&#xff0c;如果子查询中直接引用了要操作的目标表&#xff0c;可能会遇到一个…...

在Linux上安装和使用Docker

在Linux上安装和使用Docker&#xff1a;一步步指南 Docker是一种流行的容器化平台&#xff0c;它可以帮助开发者轻松构建、部署和运行应用程序。在本文中&#xff0c;我们将介绍如何在Linux系统上安装Docker&#xff0c;并提供一些常用的Docker命令和使用说明。 1. 安装Docke…...

为什么禁止我请求别的网站的接口?——跨域与CORS _

你有没有遇到过这种情况&#xff1a;在自己的网页上想请求别人的API&#xff0c;结果浏览器直接报错&#xff1a;Access-Control-Allow-Origin header is missing。为什么浏览器要阻止你&#xff1f;服务器不响应不就完了吗&#xff1f; 今天&#xff0c;用小区门禁的故事&…...

**蓝绿部署实战:用 Go 实现无中断服务更新的优雅方案**在现代微服务架构中,**持续交

蓝绿部署实战&#xff1a;用 Go 实现无中断服务更新的优雅方案 在现代微服务架构中&#xff0c;持续交付&#xff08;CD&#xff09; 和 零停机发布&#xff08;Zero Downtime Deployment&#xff09; 已成为标配能力。而蓝绿部署&#xff08;Blue-Green Deployment&#xff09…...

别再只会调库了!手把手教你用Arduino的PWM引脚,让循迹小车转弯丝滑又精准

从PWM原理到实战&#xff1a;让你的Arduino循迹小车转弯如丝般顺滑 看着自己组装的循迹小车在赛道上磕磕绊绊地前进&#xff0c;时而冲出轨道&#xff0c;时而原地打转&#xff0c;这种挫败感每个Arduino爱好者都深有体会。问题的核心往往不在于硬件组装&#xff0c;而在于对PW…...

别再死记硬背LMFS参数了!手把手教你用JESD204B传输层搞定ADC到FPGA的数据打包

JESD204B传输层实战&#xff1a;从ADC采样到FPGA组帧的智能参数配置法 在高速数据采集系统的设计中&#xff0c;ADC与FPGA之间的数据传输一直是工程师面临的挑战。传统方法中&#xff0c;工程师往往需要死记硬背复杂的LMFS参数组合&#xff0c;这不仅效率低下&#xff0c;还容易…...

YOLOv5/v8炼丹必备:手把手教你插入SE、CBAM、ECA模块,实测mAP提升技巧

YOLOv5/v8模型优化实战&#xff1a;SE、CBAM、ECA注意力模块集成指南与效果对比 在目标检测领域&#xff0c;YOLO系列模型因其出色的速度和精度平衡而广受欢迎。然而&#xff0c;在实际工业应用中&#xff0c;我们常常需要在保持实时性的前提下进一步提升检测精度。注意力机制作…...

保姆级教程:在Windows 11上从零搭建Mask2Former环境(含Visual Studio 2022和CUDA 11.8避坑指南)

从零开始在Windows 11上搭建Mask2Former环境&#xff1a;避坑指南与实战验证 对于刚接触计算机视觉的开发者来说&#xff0c;环境搭建往往是第一个拦路虎。特别是在Windows系统上&#xff0c;从CUDA版本冲突到编译器缺失&#xff0c;每一步都可能遇到意想不到的问题。本文将手…...

功率芯片中高能氢离子

在半导体制造体系中,离子注入一直被视为“隐形核心工艺”。相比光刻等高曝光设备,它不直接决定线宽,却深刻影响器件的电学行为。此次围绕串列型高能氢离子注入机的技术突破,其本质并非简单设备国产化,而是将粒子加速技术引入功率器件制造的关键环节,属于典型的“跨学科工…...

告别环境变量困扰:手把手教你将gcc-arm-8.3工具链永久添加到Linux系统路径(含多用户配置)

彻底解决Linux下ARM工具链环境配置&#xff1a;从单用户到多用户的全局部署指南 每次打开新终端都要重新配置环境变量&#xff1f;团队成员抱怨工具链无法共享&#xff1f;作为嵌入式开发者&#xff0c;我们经常需要处理这类基础但令人头疼的问题。本文将带你深入理解Linux环境…...

Kaggle在机器学习项目中的实战价值与工业应用

1. Kaggle在机器学习项目中的核心价值Kaggle作为全球最大的数据科学竞赛平台&#xff0c;早已超越了单纯的比赛范畴&#xff0c;成为机器学习从业者的综合工具箱。我在过去三年参与的17个工业级ML项目中&#xff0c;有13个都不同程度地利用了Kaggle资源。这个平台最令人惊喜的不…...

银发经济新解法:魔珐星云 SDK 构建低延迟、高温情养老陪伴智能大屏

前言 2026 年我国 60 岁以上人口突破 3 亿&#xff0c;正式进入中度老龄化社会&#xff0c;万亿级银发经济赛道迎来爆发。但当前多数适老化智能设备&#xff0c;仅停留在放大字体、提高音量等表面优化&#xff0c;既没有真正跨越老年人的数字使用鸿沟&#xff0c;也无法弥补空巢…...