IOMMU如何处理PCIe ATS/ATC/PRI Request 发布时间:2026/7/21 8:30:37 本文讨论 PCIe 设备通过 IOMMU 访问主机内存时页表映射不存在或访问权限不足所引发的异常。通过分析 Linux 代码对比 Intel VT-d、AMD IOMMU 和 ARM SMMUv3 在三种 ATS/PRI 场景下的处理方式重点回答以下问题异常发生在 IOMMU Translation、ATS Translation 阶段还是 PRI Page Request 阶段异常发生时DMA Request 是否已经发出DMA Request 最终会被阻止、终止、重新发起还是继续执行1.简介下面总结了三种场景无 ATS/ATC设备直接发送 Untranslated DMA Request由 IOMMU 完成 Address Translation。有 ATS/ATC无 PRIATC 未命中后设备先发送 ATS Translation Request取得可用 Translation 后再发送 Translated DMA Request。有 ATS/ATC有 PRIATC 未命中后设备先发送 ATS Translation Request若 ATS Translation Completion 失败则发送 Page Request 请求主机 OS 分配缺失的内存页。2.结论场景Address Translation 路径异常现场DMA Request 是否发出异常处理方法DMA Request 是否可恢复无 ATS/ATC设备发送 Untranslated DMA Request由 IOMMU 执行 Address TranslationIOMMU 执行 Address Translation 时找不到有效页表项或者访问权限出错已经发出PCIe/RCIOMMU 阻止或终止 DMA Request。Memory Read Request 可能收到带错误状态的 CompletionUR/CA也可能最终发生 Completion Timeout具体由平台决定Memory Write Request 属于 Posted Request不会返回 Completion数据可能被丢弃并通过平台错误处理或 AER 上报。Intel VT-d写入 Fault Recording Register 并触发异常中断。AMD IOMMU在 Event Log 中写入IO_PAGE_FAULT并触发中断这是普通 Fault Event不是 PPR Log 中请求内存页的 Page Request。ARM SMMUv3写入 EVTQPCIe 总线不能暂停等待软件处理必须按 NoStall/Terminate 方式处理。DMA Request 通常不可恢复。该 Request 已经在 Translation 阶段失败。有 ATS/ATC无 PRIATC 未命中后设备先发送 ATS Translation RequestIOMMU 执行 Address Translation 时找不到有效页表项或者访问权限出错此使会返回带错误状态的 ATS Translation Completion未发出PCIe/设备ATS Translation Completion 未提供可用 Translation设备不能填充有效 ATC也不能发送对应的 Translated DMA Request通常会将队列或描述符置为失败或者稍后重新发起任务。Intel VT-dRequest 不进入 PRQ。AMD IOMMURequest 不进入 PPR Log。ARM SMMUv3Request 不进入 PRIQ。硬件即使另行记录也只是与实现相关的普通 Fault/Error不会触发 OS 缺页处理。没有发出 DMA Request。ATS Translation 失败后DMA Request 也会失败如果驱动在错误处理路径中另行建立映射并重新提交任务那也是新的 DMA Request不是恢复原 DMA Request。有 ATS/ATC有 PRIATS 未取得可用 Translation 后设备发送 Page RequestPage Request 进入 IOMMU 的专用队列Intel、AMD 将其上报为缺页异常 I/O Page FaultIOPF未发出PCIe/设备设备发送 Page Request并接收 Success、Invalid 或 Failure ResponseSuccess 后重试 ATSInvalid/Failure 时停止该访问。Intel VT-dPRQ → Linux IOPF → Page Group Response Descriptor。AMD IOMMUPPR Log → Linux IOPF →COMPLETE_PPR_REQUEST。ARM SMMUv3架构路径为 PRIQ/CMD_PRI_RESP当前 Linux 版本将该 Request 视为 Unexpected PRI Request 并返回 DENY。不是恢复一笔已经失败的 DMA Request而是在 DMA Request 发出前发送 Page Request 请求主机 OS 分配缺失的内存页。OS 处理成功后设备重发 ATS Translation Request收到正确的 ATS Translation Completion 后再发出 DMA Request。3.总结第一种场景是在IOMMU Translation 阶段产生普通 IOMMU Fault硬件记录错误并阻止或终止已发出的 Request。第二种场景没有 PRI也不进入 PRQ/PPR Log/PRIQ失败可能只反馈给设备不一定产生 Linux 可见的普通 IOMMU Fault。因此前两种场景都不会因该次失败而自动进入 OS 缺页处理流程。第三种场景具备进入可恢复缺页处理的硬件入口PCIe 设备发送 Page RequestIOMMU 将其放入专用 Page Request QueueIntel、AMD 驱动再将其作为 IOPF 交给 OSOS 进入缺页处理异常补齐页表后返回 Success。本文所用 ARM SMMUv3 驱动虽然能从 PRIQ 识别 PRI但当前直接返回 DENY不进入通用 IOPF。这里的“可恢复”特指能否在实际 DMA Request 发出之前通过 PRI 补齐映射使设备随后重新取得 ATS Translation 并发送 DMA Request。它不表示 IOMMU 能重试一笔已经失败的原始 DMA Request。下图比较三种场景的处理流程。蓝色表示设备 Request黄色表示 Address Translation 或软件处理绿色表示恢复成功红色表示失败或终止。
【无人机控制】十字型四旋翼无人机的非线性六自由度动力学模型附simulink仿真和Matlab代码 2026/7/19 23:05:46 ✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、算法改进、程序设计科研仿真。🍎完整代码获取 定制创新 论文复现私信🍊个人信条:做科研,博学之、审问之、慎思之、明辨之、…
SegmenTron与PyTorch生态集成:模型导出与部署最佳实践 2026/7/19 23:05:46 SegmenTron与PyTorch生态集成:模型导出与部署最佳实践 【免费下载链接】SegmenTron Support PointRend, Fast_SCNN, HRNet, Deeplabv3_plus(xception, resnet, mobilenet), ContextNet, FPENet, DABNet, EdaNet, ENet, Espnetv2, RefineNet, UNet, DANet, HRNet, DF…
纹渊 HarmonyOS 7 工程实战(06):distributedKVStore 收藏与最近浏览同步 2026/7/19 23:05:46 一、问题与目标 收藏与最近浏览都属于体量很小、操作频率很高的状态。只保存在单机上时,手机里刚收藏的纹样无法在平板继续使用;全部依赖分布式存储时,设备未组网、权限未授予或 KV 服务暂时不可用,又会拖累本机体验。比较稳妥的…
HarmonyOS7自定义标题导航页实战:NavDestination 标题区改造与头部布局 2026/7/21 8:30:08 文章目录前言页面骨架其实比参数更重要看懂状态,比看懂样式更重要真正决定页面行为的是这些函数第一段关键代码:页面是怎么被带起来的第二段关键代码:真正决定交互手感的地方这一页我建议这样上手从示例到项目,中间这几步别省这类…
Pikachu靶场实战:从原理到攻防,彻底掌握XXE漏洞利用 2026/7/21 8:30:08 1. 项目概述:为什么选择Pikachu靶场来攻克XXE? 如果你正在学习Web安全,尤其是想彻底搞懂XXE(XML External Entity)漏洞,那么Pikachu靶场绝对是一个绕不开的宝藏。它不像一些大型综合靶场那样庞杂࿰…
lerobot 之 so-101 机械臂数据采集 2026/7/21 8:30:08 一、环境搭建和框架安装 本文在 Ubuntu 22.04 、cuda-12.2 下搭建环境。 1、创建虚拟环境 在 Miniconda 下创建虚拟环境并激活: conda create -n lerobot python3.12 -y conda activate lerobot2、安装 ffmpeg 并验证 conda install ffmpeg -c conda-forge -y 3…
装修误拆事件解析:责任认定与行业规范 2026/7/21 8:30:08 1. 事件背景与核心争议点 2023年某小区发生一起离奇的装修乌龙事件:装修队本应拆除403室,却因看错楼层标识误将303室拆成毛坯房。当业主发现时,房屋内部结构已被破坏,墙面、地板、门窗等全部拆除。这起事件最终闹上法庭࿰…
selenium实操①---自动播放视频 2026/7/21 8:30:08 这里只做思路讲解,有附代码,仅供参考。既然是web端的自动化,那我们用到的就是selenium框架,导入selenium相关的模块1.对浏览器进行配置,我这里设置的配置只有执行完毕后不自动关闭浏览器。2.创建Chrome()浏览器驱动对象…
C++编译期正则表达式引擎:利用模板元编程实现零运行时开销的文本匹配 2026/7/21 8:29:07 一、当正则表达式遇见编译期计算正则表达式是文本处理的利器,但传统正则引擎在运行时解析模式、构建状态机、执行匹配,这些开销在性能敏感场景下不可忽视。C 的模板元编程和 constexpr 能力为我们打开了另一扇门——编译期正则表达式引擎。它的核心理念是…
Windows+macOS 通用 OpenClaw 部署流程,内置依赖一键启动智能桌面助手 2026/7/21 0:01:59 📌教程适配:OpenClaw v2.7.9 | 兼容 Windows10/11、macOS 双系统 📖前言 当下各类本地 AI 工具层出不穷,多数产品仅能完成文字问答交互,很难直接操控电脑执行实际操作。OpenClaw,业内常称小龙虾 AI&#…
Codex 接入后 Bug 反增?复盘从个人演示到团队协作的“流程陷阱” 2026/7/21 0:01:59 聊《一次Codex项目复盘,问题最后出在流程而不是模型》之前,先说一句实在的:别急着背概念,先看它在真实项目里到底解决什么问题。摘要先把这篇文章的目标说清楚:看完之后,你应该能判断这件事值不值得做&…
只会用工具不算黑客,手把手教你写第一个渗透脚本 2026/7/21 0:03:00 从“工具人”到“创造者”:为什么只会用工具不算黑客 在网络安全的学习道路上,很多初学者都会经历一个相似的阶段:手里攥着一堆神器,Burp Suite 抓包改包行云流水,SQLMap 一键注入势如破竹,Nmap 扫描全网段…
Unity与Python本地通信:基于Flask的跨语言数据交换实战 2026/7/21 1:51:45 1. 项目概述:为什么我们需要一个本地通信服务器?在游戏开发、数字孪生、仿真训练等众多领域,Unity作为强大的实时3D内容创作平台,其核心逻辑通常由C#驱动。然而,当我们需要进行复杂的数据分析、机器学习推理、科学计算…
科研课题设计全流程:从选题到成果落地的实战指南 2026/7/20 0:49:17 1. 课题设计全流程解析:从选题到成果落地的实战指南课题设计是科研工作者、高校师生以及企业研发人员日常工作中的核心环节。一个优秀的课题设计不仅决定了研究的方向和质量,更直接影响最终成果的学术价值和应用前景。作为在科研一线摸爬滚打多年的从业者…
开发者实测:ChatGPT vs Gemini vs DeepL,谁家PDF翻译的格式保留最完整? 2026/7/20 0:49:17 背景 作为开发者,我经常需要翻译技术文档。最近接了个活:帮团队把300页的英文技术手册翻译成中文。试用了几家主流AI翻译引擎,发现翻译质量差别不大,但格式保留能力的差距让人意外。 本文从开发者视角,对 ChatGPT、Gem…
别再手动拼矩阵了!用MATLAB的triu和tril函数,5分钟搞定随机对称矩阵生成 2026/7/19 14:48:50 别再手动拼矩阵了!用MATLAB的triu和tril函数,5分钟搞定随机对称矩阵生成在数值计算和算法测试中,随机对称矩阵的生成是一个常见需求。无论是机器学习中的协方差矩阵模拟,还是结构力学中的刚度矩阵构建,对称矩阵都扮演着…
数据分析师必学MySQL:从零构建电商销售分析实战 2026/7/19 22:49:12 你是不是也遇到过这样的困惑:想学数据分析,看了很多Python、R语言的教程,结果发现第一步就被卡住了——数据从哪里来?怎么存?怎么查?怎么保证数据准确?很多数据分析教程都默认你已经有了一个干净…
HS2-HF Patch:3步实现HoneySelect2完美汉化与MOD整合 2026/7/21 4:49:45 HS2-HF Patch:3步实现HoneySelect2完美汉化与MOD整合 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch HS2-HF Patch是专为HoneySelect2玩家设计的一站…