RISC-V IOMMU 硬件设计学习计划|第 1 天:IOMMU 在 RISC-V SoC 中解决什么问题 RISC-V IOMMU 硬件设计学习计划第 1 天IOMMU 在 RISC-V SoC 中解决什么问题 计划日期2026-07-27。本系列基于官方 RISC-V IOMMU Architecture Specification 与官方 riscv-iommu/iommu_ref_model C 参考模型整理。本文自包含阅读不要求读者同时打开规范或代码仓库。当日主题今天建立全局视图IOMMU 位于 IO bridge 与系统内存之间拦截设备发出的 DMA、ATS 翻译请求、PRI Page Request 和 MSI 写请求。它的核心任务不是“让设备更快访问内存”而是在可控性能成本下把设备访问纳入和 CPU MMU 类似的地址翻译、权限检查、隔离、虚拟化与故障报告框架。核心概念与原理讲解没有 IOMMU 时DMA-capable 设备通常可以用总线地址直接访问内存。一旦设备固件、驱动或硬件出错就可能覆盖内核、其他进程或其他虚拟机的内存。RISC-V IOMMU 通过每个设备的 device_id 查找 Device ContextDC并按 DC 中的控制字段决定该设备的 IOVA 应怎样被翻译。四类典型模式1. Bare/Bare第一阶段和第二阶段都关闭IOVA 近似作为 SPA 使用主要用于早期启动或受信任设备。2. 第一阶段开启、第二阶段 Bare设备使用进程/内核虚拟地址IOMMU 执行 S-stage 翻译适合 native OS 下的 DMA remap 或 SVA。3. 第一阶段 Bare、第二阶段开启设备被直通给 VMguest 驱动看到 GPAIOMMU 用 G-stage 把 GPA 限制到该 VM 的 SPA。4. 两阶段都开启设备请求 VA先 VS/S-stage 得到 GPA再 G-stage 得到 SPA适合带 PASID/SVA 的虚拟化直通。设备侧有三类地址类型Untranslated、Translated、PCIe ATS Translation Request。Untranslated 表示设备提交的地址仍需 IOMMU 判断Translated 表示设备声称地址已由设备 ATC 缓存翻译ATS Translation Request 表示设备请求 IOMMU 返回翻译结果以填充 DevATC。关键流程与硬件行为分析一个普通 DMA 读写进入 IOMMU 后硬件可抽象为流水线textIO bridge request- 解析 device_id / process_id / transaction type- 检查 ddtp.iommu_mode- DDT walk 定位 Device Context- 如有 PASID/process_idPDT walk 定位 Process Context- 查询 IOATCmiss 时执行一阶段/二阶段 page-table walk- 可选 MSI 识别与 MSI page-table 翻译- 返回 SPA、权限、PBMT、MSI/MRIF 标志或报告 fault从硬件实现角度要把 IOMMU 看成一个带内存读端口的翻译协处理器。它不只处理设备请求还会主动发起隐式内存访问读取 DDT、PDT、页表、命令队列、故障队列、页请求队列和 MSI 表。这些访问需要 QoS、endianness、PMA/PMP/总线错误处理并且不能被原始设备请求阻塞到死锁。对应代码片段解读参考模型的请求结构浓缩了硬件输入面c// host bridge 输入到 IOMMU 的抽象请求参考 iommu_req_rsp.htypedef struct {uint32_t device_id; // 最多 24 位设备身份PCIe 可映射为 BDF/RIDDSEGuint8_t pid_valid; // 是否携带 process_id/PASIDuint32_t process_id; // 最多 20 位进程身份uint8_t no_write; // ATS translation request 可请求 no-writeuint8_t exec_req; // 读是否带 execute intentuint8_t priv_req; // 1Supervisor, 0Useriommu_trans_req_t tr; // 地址类型、IOVA、长度、读写属性} hb_to_iommu_req_t;主入口在 iommu_translate.c。它先统计请求类型再从 ddtp.iommu_mode 判断 Off/Bare/DDT 模式随后调用 locate_device_context()、locate_process_context()、lookup_ioatc_iotlb() 和 two_stage_address_translation()。这正好对应硬件中的配置检查、上下文缓存、TLB lookup 和 page-walk pipeline。当天掌握要点小结- IOMMU 的基本角色是把设备 DMA 纳入地址翻译、权限检查、隔离和虚拟化。- device_id 选择 DCprocess_id/PASID 选择 PC它们共同决定地址空间。- Untranslated、Translated、ATS Translation Request 是硬件入口分类的第一层。- 实现 IOMMU 时要同时考虑设备请求路径和 IOMMU 自身的隐式内存访问路径。

相关新闻

最新新闻

SerenityOS 命令行选项解析指南:getopt 与 getopt_long 用法、返回值与底层实现

SerenityOS 命令行选项解析指南:getopt 与 getopt_long 用法、返回值与底层实现

SerenityOS 命令行选项解析指南:getopt 与 getopt_long 用法、返回值与底层实现 【免费下载链接】serenity The Serenity Operating System 🐞 项目地址: https://gitcode.com/GitHub_Trending/se/serenity 导读 本文以 getopt(3) 手册 为核心&a…

2026/9/23 4:54:42
轻量服务器还是ECS?大促云服务器选购与避坑实战指南

轻量服务器还是ECS?大促云服务器选购与避坑实战指南

每年大促节点,群里永远有人在问同一个问题:“38元的轻量服务器到底怎么抢?为什么我每次点进去都是已售罄?68元直购和99元的ECS我到底选哪个?”作为一个常年帮团队和自己采购云服务器的老用户,我太清楚这种纠…

2026/9/23 8:01:55
为 AI 代理的 Review 动作编写 Cedar 审批门控策略:review-agent-governance 策略编写实战指南

为 AI 代理的 Review 动作编写 Cedar 审批门控策略:review-agent-governance 策略编写实战指南

为 AI 代理的 Review 动作编写 Cedar 审批门控策略:review-agent-governance 策略编写实战指南 【免费下载链接】agents Multi-harness agentic plugin marketplace for Claude Code, Codex, Cursor, OpenCode, GitHub Copilot, and Google Antigravity 项目地址:…

2026/9/23 8:02:11
PaddleOCR 手写数学公式识别算法 CAN 实战指南:Counting-Aware Network 训练、评估与推理部署

PaddleOCR 手写数学公式识别算法 CAN 实战指南:Counting-Aware Network 训练、评估与推理部署

PaddleOCR 手写数学公式识别算法 CAN 实战指南:Counting-Aware Network 训练、评估与推理部署 【免费下载链接】PaddleOCR Turn any PDF or image document into structured data for your AI. A powerful, lightweight OCR toolkit that bridges the gap between i…

2026/9/23 8:01:38
Spring源码解析:构造器注入的类型转换与候选匹配机制

Spring源码解析:构造器注入的类型转换与候选匹配机制

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/23 8:01:21
openai-agents-python 多模型接入指南:深入解析 AnyLLMModel 适配层与 any-llm 路由

openai-agents-python 多模型接入指南:深入解析 AnyLLMModel 适配层与 any-llm 路由

openai-agents-python 多模型接入指南:深入解析 AnyLLMModel 适配层与 any-llm 路由 【免费下载链接】openai-agents-python A lightweight, powerful framework for multi-agent workflows 项目地址: https://gitcode.com/GitHub_Trending/op/openai-agents-pyth…

2026/9/23 8:02:28

日新闻

周新闻