[IOMMU]面向芯片/SoC验证工程的IOMMU全景速览

面向芯片/SoC验证工程的IOMMU全景速览

       摘要:面向芯片/SoC 验证工程的 IOMMU 全景速览:包含基础概念、主流架构要点(ARM SMMU、Intel VT‑d、RISC‑V IOMMU),Linux 软件栈关系,SoC 上的验证方法(功能、错误、性能、系统化流程和覆盖),以及一个可用的“通用 IOMMU C 参考模型”(便于接入 UVM/系统级仿真做对比/记分)。

一、IOMMU 是什么,解决什么问题

  • 作用

    • DMA 虚实地址转换:把设备发出的 IOVA(IO 虚拟地址)转换为物理地址(PA)或中间物理地址(IPA),并施加权限检查(R/W/X)与内存属性。
    • 隔离与安全:把设备划入不同隔离域(domain),防御恶意/越界 DMA。
    • 虚拟化:两阶段翻译(Stage‑1/Stage‑2),支撑来宾 OS(S1)和宿主/管理程序(S2)共管地址空间。
    • SVA(Shared Virtual Addressing):设备和进程共享同一虚拟地址空间,通常通过 PASID 识别进程上下文。
    • 端到端地址服务:配合 PCIe ATS/PRI/PASID,降低 IOTLB 缺失开销,支持按进程页请求。
    • 中断重映射:将设备发出的 MSI/MSI‑X 重定向到平台中断控制器,施加隔离。
  • 关键术语

    • IOVA/GVA/IPA/PA:设备看到的虚拟地址/进程虚拟地址/中间物理/最终物理地址。
    • RID/BDF、Stream ID/SSID、PASID:识别设备或其子流(substream/进程)的标识。
    • Domain/Context:一组设备共享的地址空间与权限配置。
    • IOTLB/ATC:IOMMU 侧 TLB/设备侧地址转换缓存(PCIe ATS)。
    • ATS/PRI:Address Translation Service / Page Request Interface(设备在缺页时向主机申请映射)。
    • TLBI/Sync:IOMMU TLB 失效与屏障,同步页表更新的可见性。

二、主流架构速记

  • ARM SMMU

    • v2:以 Stream ID 映射到 Context Bank;支持 S1/S2;典型 AXI 接口。
    • v3:面向 PCIe 原生生态,Stream Table Entry(STE)→ Context Descriptor Table(CD);支持 PASID/SSID、ATS/PRI、命令队列(CMDQ)、事件队列(EVTQ)、PRI 队列(PRIQ)与 MSI doorbell;TLB 失效与 CMD_SYNC 时序保证。
    • 页表格式与权限模型近似 ARMv8 VMSA;叶子/块映射(4K/2M/1G)。
  • Intel VT‑d(DMA Remapping)

    • Root/Context/PASID 表层次,支持 Scalable Mode、Device‑TLB、Posted Interrupts、基于队列的失效指令与事件上报。
    • 可与 PCIe ATS/PRI 协同,隔离粒度到函数级(RID)或 PASID。
  • RISC‑V IOMMU(1.0 规范背景)

    • 与 Sv39/Sv48 协作的两阶段翻译;PASID/SVA;设备页请求与错误上报机制;属性/权限对齐 RISC‑V MMU 语义。

三、Linux 软件栈与调试要点

  • iommu 子系统:iommu‑api、iommu‑groups、domains、attach/detach。
  • 驱动:arm_smmu/arm_smmu_v3、intel‑iommu、riscv‑iommu。
  • VFIO/virtio‑iommu、DMA‑API(dma_map_*)、SVA(绑定 PASID 到 mm)。
  • 调试:dmesg 的 IOMMU faults、debugfs/sysfs(如 arm_smmu_v3 下的 cmdq/evtq 统计)、perf/ftrace 采样缺页/失效路径。

四、SoC 上验证 IOMMU 的方法

4.1 环境搭建(建议)

  • 事务源
    • PCIe 设备 BFMs/Agent(含 ATS/PRI/PASID 能力,或 AXI 主设备代理)。
    • 多主并发:不同 RID/StreamID/SSID/PASID。
  • 内存/页表
    • 可编程 DRAM 模型,暴露页表区域;提供“OS 代理”驱动页表更新、IOMMU 命令队列写入和 TLBI。
  • 监测与对比
    • 总线监测:AXI/PCIe Monitor 获取 IOVA 事务与 IOMMU 翻译后的 PA 事务。
    • 参考模型:C Model 做期望翻译;Scoreboard 比对,记录属性/权限/错误一致性。
    • 队列/中断监测:CMDQ/EVTQ/PRIQ 的内存写入与 doorbell MSI;中断控制器接收情况。

4.2 典型功能用例与覆盖点

  • 翻译成功路径
    • 页尺寸:4K/2M/1G(或平台支持的所有块/页);跨页/跨块连续与非连续;边界对齐/非对齐突发。
    • 权限:R/W/X 组合;设备特权/非特权;不可缓存/可缓存、内存类型/可共享性传播。
    • Stage‑1/Stage‑2 各自启停与组合;直通/旁路模式。
  • 错误/异常
    • 不存在页(PTE invalid)、权限拒绝、访问超范围、页表对齐错误、页表循环/保留位错误、长度超页、设备未配置 Context。
    • PRI/ATS 路径:ATC 命中/未命中;PRI 请求、完成;设备在 IOMMU PRIQ 背压/溢出处理。
    • 事件/故障上报:队列满、队列指针错误、doorbell 丢失、MSI 映射错误。

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

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

相关文章

Jenkins全链路教程——Jenkins用户权限矩阵配置

在企业级CI/CD场景中,“权限混乱”往往比“构建失败”更致命——测试员误删生产流水线、实习生修改关键插件配置、多团队共用账号导致责任无法追溯……这些问题,99%都能用权限矩阵彻底解决!今天,我们不仅会拆解权限矩阵的底层逻辑…

库函数蜂鸣器的使用(STC8)

使用库函数控制蜂鸣器(STC8) 在STC8系列单片机中,可以通过库函数或直接操作寄存器来控制蜂鸣器。以下是基于STC8库函数的常用方法: GPIO板蜂鸣器 #include "GPIO.h" #include "Delay.h"void GPIO_config()…

redis8.0.3部署于mac

macOS11因版本过低,安装redis时,Homebrew和源码编译两种方式都无法成功。将操作系统升级至macOS15再安装。Redis(Remote Dictionary Server)是一个开源的内存数据库,遵守 BSD 协议,它提供了一个高性能的键值…

【和春笋一起学C++】(三十三)名称空间的其他特性

目录 嵌套式名称空间 拓展——未命名的名称空间 嵌套式名称空间 示例代码1: namespace electronicEquipment {namespace computer{double price 4999.0;string modelNumber;string name;}namespace ElectronicWatch{double price 99.0;string modelNumber;stri…

异步电动机负载运行特性全解析

异步电动机负载运行特性详解 ——从空载到负载的完整分析一、为什么需要再谈“负载运行” 在上一篇《感应电动机空载特性深度剖析》中,我们已经看到:空载时,若定子加额定电压,转子转速 $n \approx n_s$(同步转速&#…

使用 Ansys Discovery 进行动态设计和分析

Ansys Discovery 是一款多功能工具,为创建模型、探索仿真设计和分析解决方案提供了一个单一的交互式工作区。它允许用户使用直接建模技术创建和修改几何结构,定义仿真并与结果实时交互。Discovery 支持结构、流体流动、热和电磁设计,提供直观…

力扣热题100-----118.杨辉三角

案例 给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中,每个数是它左上方和右上方的数的和。 示例 1: 输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]] 示例 2: 输入: numRows 1 输出: [[1]] 提示: 1 …

NTP /Chrony 网络时间协议

一、NTP(network time protocol)网络时间协议:实现时间同步,让设备时间与国际标准时间保持一致设备日志、服务日志需要记录时间分布式系统(分布式数据库、分布式缓存、分布式储存、消息队列)时间戳&#xf…

VSCode 刷 LeetCode 算法题配置教程

LeetCode 在线刷题地址:https://leetcode-cn.com/ 一、安装 Node.js 环境 LeetCode 插件依赖 node.js 运行环境,因此必须先安装: 前往官网下载安装:https://nodejs.cn/download/下载好的压缩包解压,可以看到当前文件…

非常简单!从零学习如何免费制作一个lofi视频

想必大家在网上会看到如下类似的音乐频道,这类频道都只是上传简单的Lo-Fi音乐带着循环播放的背景就可以赚钱。 那么上面的效果如何实现的呢?今天做一个可以免费制作lo-Fi音乐的教程。 Lo-Fi音乐: Lo-Fi音乐是一种以低保真度和模拟音色为特点…

基于 RAUC 的 Jetson OTA 升级全攻略

📖 推荐阅读:《Yocto项目实战教程:高效定制嵌入式Linux系统》 🎥 更多学习视频请关注 B 站:嵌入式Jerry 基于 RAUC 的 Jetson OTA 升级全攻略 0. 引子:常见问题 在 Jetson 平台做 OTA 升级时,你可能会问&…

MySQL 主备(Master-Slave)复制 的搭建

一、主备架构简介 Master(主库):负责处理所有写操作(INSERT/UPDATE/DELETE),并记录二进制日志(binlog)。Slave(备库):从主库拉取 binlog&#xff…

【三个数绝对值排序】2022-10-10

缘由绝对值比较&#xff0c;总是跑不过怎么办-编程语言-CSDN问答 template <class 形参> inline void 算交换(形参& a, 形参& b){ 形参 ab a - b; a - ab; b ab; } template <class 形参> void 三个升序(形参& a, 形参& b, 形参& c) {if (a…

【LoRA模型训练】Stable Diffusion LoRA 模型秋叶训练器详细教程

一、工具简介与安装指南 1.1 秋叶 LoRA 训练器概述 秋叶 LoRA 训练器&#xff08;基于 Akegarasu/lora-scripts 项目&#xff09;是针对 Stable Diffusion 模型的轻量化微调工具&#xff0c;通过低秩适应&#xff08;LoRA&#xff09;技术实现高效参数微调。其核心优势在于&a…

C++2024 年一级

1 单选题 (每题 2 分,共 30 分) 12 ⽉ 题号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 答案 C C D B B D B C C C D C D B D 第 1 题 2024年10⽉8⽇ &#xff0c;诺贝尔物理学奖“意外地”颁给了两位计算机科学家约翰霍普菲尔德&#xff08;John J. Hopfield&#xff09;和杰 弗⾥⾟…

react-window

下面&#xff0c;我们来系统的梳理关于 React 虚拟化列表&#xff1a;react-window 的基本知识点&#xff1a;一、虚拟化列表核心概念 1.1 什么是虚拟化列表&#xff1f; 虚拟化列表&#xff08;也称为窗口化&#xff09;是一种只渲染当前可见区域列表项的技术&#xff0c;而不…

2025AI颠覆认知!解锁智能新纪元

清晨的城市还裹着薄雾时&#xff0c;通勤族的手机已经自动规划好最优路线——避开施工路段、实时更新交通状况&#xff0c;连早餐店排队人数都能精准预测。这不是科幻电影里的片段&#xff0c;而是2025年AI深度融入生活的寻常场景。当数字化与智能化浪潮席卷而来&#xff0c;我…

实用Shell高级视频课程

实用Shell高级视频课程 Shell三剑客sed我网盘给你分享了「实用Shell高级视频课程」&#xff0c;点击链接或复制整段内容&#xff0c;打开「APP」即可获取。/bc3b37jg8i:/链接&#xff1a;http://t.cn/A6swtV7u提取码&#xff1a;ePV4 ​​​

hive-日期拆分为多行

hive-日期拆分为多行 代码 SELECT begin_date,date_add(begin_date, tmp.pos),end_date,d_days,tmp.pos,tmp.val FROM (SELECT begin_date,end_date,DATEDIFF(end_date, begin_date) AS d_daysFROM (SELECT 2025-08-01 AS begin_date,2025-08-10 AS end_date) a) b LA…

全志MPP学习(1)-全志MPP概念理清

文章目录1、全志MPP1.1、MPP-Framework1.2、MPP-Middleware1.3、MPP-Framework和MPP-Middleware之间的关系2、总结1、全志MPP 全志MPP&#xff08;Media Process Platform&#xff09;媒体处理软件平台&#xff0c;分为 mpp-middleware 和 mpp-framework 两部分。 mpp-middlew…