ARM SMMU与Linux内核MMU设备地址空间隔离 - 第4节

4.1 SMMU 硬件架构概览

系统内存管理单元(SMMU)是 ARM 架构中负责设备 DMA 地址转换与访问控制的硬件单元。其核心设计遵循 TCU(Translation Control Unit) 与 TBU(Translation Buffer Unit) 分离的微架构思想,并引入 微页表缓存(Micro TLB / uTLB) 以降低多级页表遍历的延迟。

从系统视角看,SMMU 位于总线互连(如 AMBA ACE/CHI)与内存控制器之间,对来自 PCIe、GPU、Display、Network 等外设的 DMA 请求进行地址翻译和权限检查。下图展示了 SMMU 在 SoC 中的典型位置:

SMMU 在 SoC 中的位置 SMMU 在 SoC 中的位置 PCIe EP GPU Display Network AMBA 总线 SMMU TCU + TBU 微页表缓存 DDR 内存 设备 DMA 请求 经 SMMU 翻译 后访问内存

4.2 SMMU 核心组成模块

SMMU 硬件架构由三大核心模块构成:TBU(Translation Buffer Unit)、TCU(Translation Control Unit) 以及 微页表缓存(Micro TLB / uTLB)。三者协同完成从设备侧虚拟地址(或 IOVA)到物理地址的快速转换。

4.2.1 TBU(Translation Buffer Unit)

TBU 是靠近设备端的翻译缓冲单元,通常与特定接口或设备簇紧耦合。其主要职责包括:

  • 接收设备 DMA 请求:从总线接口捕获设备发起的读写事务及其携带的地址。
  • 缓存最近使用的页表转换条目:维护一个本地 TLB(Translation Lookaside Buffer),加速重复地址的翻译。
  • 发起页表遍历请求:当本地 TLB 未命中时,向 TCU 发送页表遍历请求。
  • 执行地址转换与权限检查:将设备 IOVA 转换为物理地址,并校验访问权限。
设计要点: 一个 SMMU 实例可以包含多个 TBU,每个 TBU 服务于不同的设备端口或接口簇。TBU 的本地 TLB 容量通常较小(如 32~128 条),以降低延迟和面积开销。

4.2.2 TCU(Translation Control Unit)

TCU 是 SMMU 的控制核心,负责全局翻译管理与配置。其关键功能包括:

  • 管理页表基地址寄存器(TTBR):为每个 Stream(设备流)维护独立的页表根指针。
  • 执行多级页表遍历(Walk):当 TBU 未命中时,TCU 通过硬件状态机遍历内存中的页表。
  • 维护全局配置寄存器:如 SMMU_CRx、SMMU_SMRx、SMMU_CBARn 等。
  • 处理异常与中断:当翻译错误或权限违规时,触发同步异常或记录错误日志。
  • 协调多个 TBU 的一致性:通过广播无效化操作(TLBI)同步各 TBU 的缓存状态。

4.2.3 微页表缓存(Micro TLB / uTLB)

微页表缓存是位于 TCU 内部或紧邻 TCU 的一级页表条目缓存,专门缓存页表遍历过程中访问的中间级页表项(如 L1/L2 级描述符)。其作用在于:

  • 减少页表遍历的内存访问次数:典型 4 级页表遍历需要 4 次内存读,微页表缓存命中后可跳过部分中间级访问。
  • 降低翻译延迟:缓存命中时,翻译延迟可从数十纳秒降至数个时钟周期。
  • 提升多 TBU 共享效率:多个 TBU 的页表遍历请求可共享 TCU 中的微页表缓存。
注意: 微页表缓存与 TBU 中的 TLB 不同。TLB 缓存的是最终转换结果(物理页帧号 + 属性),而微页表缓存缓存的是页表遍历过程中的中间描述符。两者在 SMMU 中协同工作,形成两级缓存层次。

4.3 模块间交互流程

下图展示了 TBU、TCU 与微页表缓存之间的典型交互流程:

TBU、TCU 与微页表缓存交互流程 TBU、TCU 与微页表缓存交互流程 设备 DMA TBU 本地 TLB 查找 TCU 页表遍历控制 微页表缓存 内存页表 转换结果 ① DMA 请求 ② TLB 命中直接返回 ③ TLB 未命中 ④ 查询微页表缓存 ⑤ 命中则跳过内存访问 ⑥ 未命中则遍历内存页表 ⑦ 返回转换结果 流程说明: ① 设备发起 DMA 请求 ② TBU 本地 TLB 查找 ③ 未命中则请求 TCU ④ TCU 查询微页表缓存 ⑤ 未命中则遍历内存页表

4.4 模块功能对比

下表从多个维度对比 TBU、TCU 与微页表缓存的核心差异:

对比维度 TBU TCU 微页表缓存
物理位置 靠近设备接口 SMMU 中央控制单元 TCU 内部或紧邻
缓存内容 最终转换结果(PA + 属性) 配置寄存器、Stream 映射表 中间级页表描述符
容量 小(32~128 条) N/A(控制逻辑为主) 中等(64~512 条)
主要延迟 1~2 时钟周期(命中时) 数十时钟周期(遍历时) 2~4 时钟周期(命中时)
无效化粒度 按地址范围或 ASID 全局或按 Stream 随 TCU 遍历状态自动失效
典型数量 多个(每个设备簇一个) 单个(每个 SMMU 一个) 单个(共享)

4.5 硬件架构总结

SMMU 的 TBU + TCU + 微页表缓存三级架构,在面积、功耗与性能之间取得了良好平衡:

  • TBU 提供低延迟的本地翻译缓存,减少对 TCU 的访问压力。
  • TCU 集中管理页表遍历与配置,降低多 TBU 的硬件复杂度。
  • 微页表缓存 作为中间级缓存,加速页表遍历过程,减少内存访问次数。

关键设计权衡: 在实际 SoC 设计中,TBU 的数量与容量取决于所连接设备的带宽和延迟要求;TCU 的页表遍历深度(支持 2~4 级页表)需与系统内存大小对齐;微页表缓存的容量则需平衡命中率与芯片面积。理解这三者的协同关系,是掌握 SMMU 性能调优的基础。