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

[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.xdnf.cn/news/17564.html

相关文章:

  • GoEnhance AI-AI视频风格转换工具
  • 【LLM实战|langgraph】langgrpah基础
  • Zabbix API自动化运维实战
  • dnSpy:设置断点
  • 【Python 工具人快餐 · 第 1 份】
  • 小米MiMo-VL技术报告解读
  • Docker容器
  • 【网络与爬虫 51】Scrapy-Cluster分布式爬虫集群:企业级大规模数据采集解决方案
  • 浅谈 VM 桥接模式:让虚拟机像真实电脑一样接入网络
  • openvela之STM32开发板部署
  • BMS三大领域:电池、楼宇与业务管理系统解析
  • VisionMoE本地部署的创新设计:从架构演进到高效实现
  • 102-基于Spark的招聘数据预测分析推荐系统
  • Android中RecyclerView基本使用
  • SpringBoot配置生效优先级
  • CPU缓存(CPU Cache)和TLB(Translation Lookaside Buffer)缓存现代计算机体系结构中用于提高性能的关键技术
  • Irix HDR Pro:专业级 HDR 图像处理软件
  • ubuntu 端口占用 但是找不到进程 与docker 容器镜像相关
  • rem:CSS中的相对长度单位
  • B.10.01.3-性能优化实战:从JVM到数据库的全链路优化
  • 莫比乌斯反演学习笔记
  • .htaccess 文件上传漏洞绕过总结
  • Delphi:TList/TObjectList 设计中的 Notify 设计范式
  • 供应链需求预测项目如何设定合理的KPI、准确率指标(十四)
  • Spring Boot 集成 Quartz 实现定时任务(Cron 表达式示例)
  • Spark02 - SparkContext介绍
  • 【多模态目标检测数据集】【VEDAI】航空影像中的车辆检测:小目标检测基准
  • 2025年渗透测试面试题总结-10(题目+回答)
  • C语言:构造类型
  • C++学习之STL学习:map/set