当前位置: 首页 > 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…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架&#xff0c;支持"一次开发&#xff0c;多端部署"&#xff0c;可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务&#xff0c;为旅游应用带来&#xf…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站&#xff1a;https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本&#xff1a; Windows版&#xff08;推荐下载标准版&#xff09; Windows系统安装步骤 运行安装程序&#xff1a; 双击下载的.exe安装文件 如果出现安全提示&…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”&#xff0c;物流的终极形态正在诞生 想象这样的场景&#xff1a; 凌晨3点&#xff0c;某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径&#xff1b;AI视觉系统在0.1秒内扫描包裹信息&#xff1b;数字孪生平台正模拟次日峰值流量压力…...

论文笔记——相干体技术在裂缝预测中的应用研究

目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术&#xff1a;基于互相关的相干体技术&#xff08;Correlation&#xff09;第二代相干体技术&#xff1a;基于相似的相干体技术&#xff08;Semblance&#xff09;基于多道相似的相干体…...

学习一下用鸿蒙​​DevEco Studio HarmonyOS5实现百度地图

在鸿蒙&#xff08;HarmonyOS5&#xff09;中集成百度地图&#xff0c;可以通过以下步骤和技术方案实现。结合鸿蒙的分布式能力和百度地图的API&#xff0c;可以构建跨设备的定位、导航和地图展示功能。 ​​1. 鸿蒙环境准备​​ ​​开发工具​​&#xff1a;下载安装 ​​De…...

ui框架-文件列表展示

ui框架-文件列表展示 介绍 UI框架的文件列表展示组件&#xff0c;可以展示文件夹&#xff0c;支持列表展示和图标展示模式。组件提供了丰富的功能和可配置选项&#xff0c;适用于文件管理、文件上传等场景。 功能特性 支持列表模式和网格模式的切换展示支持文件和文件夹的层…...

在golang中如何将已安装的依赖降级处理,比如:将 go-ansible/v2@v2.2.0 更换为 go-ansible/@v1.1.7

在 Go 项目中降级 go-ansible 从 v2.2.0 到 v1.1.7 具体步骤&#xff1a; 第一步&#xff1a; 修改 go.mod 文件 // 原 v2 版本声明 require github.com/apenella/go-ansible/v2 v2.2.0 替换为&#xff1a; // 改为 v…...

机器学习的数学基础:线性模型

线性模型 线性模型的基本形式为&#xff1a; f ( x ) ω T x b f\left(\boldsymbol{x}\right)\boldsymbol{\omega}^\text{T}\boldsymbol{x}b f(x)ωTxb 回归问题 利用最小二乘法&#xff0c;得到 ω \boldsymbol{\omega} ω和 b b b的参数估计$ \boldsymbol{\hat{\omega}}…...

用递归算法解锁「子集」问题 —— LeetCode 78题解析

文章目录 一、题目介绍二、递归思路详解&#xff1a;从决策树开始理解三、解法一&#xff1a;二叉决策树 DFS四、解法二&#xff1a;组合式回溯写法&#xff08;推荐&#xff09;五、解法对比 递归算法是编程中一种非常强大且常见的思想&#xff0c;它能够优雅地解决很多复杂的…...

[拓扑优化] 1.概述

常见的拓扑优化方法有&#xff1a;均匀化法、变密度法、渐进结构优化法、水平集法、移动可变形组件法等。 常见的数值计算方法有&#xff1a;有限元法、有限差分法、边界元法、离散元法、无网格法、扩展有限元法、等几何分析等。 将上述数值计算方法与拓扑优化方法结合&#…...