ARM SMMUv3简介(一)

发布于:2025-06-08 ⋅ 阅读:(15) ⋅ 点赞:(0)

1.概述

SMMU(System Memory Management Unit,系统内存管理单元)是ARM架构中用于管理设备访问系统内存的硬件模块。SMMU和MMU的功能类似,都是将虚拟地址转换成物理地址,不同的是MMU转换的虚拟地址来自CPU,SMMU转换的虚拟地址来自Device(比如DMA、PCIe等)。SMMU有以下特点:

  1. 起到地址隔离作用。DMA只能访问页表中的地址,非法地址将会被拦截。
  2. 支持设备使用连续虚拟地址访问离散物理地址,消除了传统DMA直接访问物理内存要求地址连续的限制,以及32位DMA访问4GB地址空间的限制。
  3. 支持设备共享CPU虚拟地址(IOVA=VA)空间。
  4. 在虚拟化环境中,SMMU可以为虚拟机中的设备提供地址转换和隔离,确保虚拟机之间的内存安全。

SMMU简介

如下所示,在支持虚拟化的环境中,SMMU支持2阶段地址转换,第一阶段把IOVA转换成IPA,第二阶段把IPA转换成PA,两阶段都可以设置成Bypass,即不做地址转换。若不支持虚拟化,则SMMU只做第一阶段地址转换,即把IOVA直接转换成PA。

SMMU地址转换示意图

2.内部结构

  1. 两个SMMU的功能相互独立。下图中一个SMMU负责转换普通设备的DMA请求地址,另一个SMMU负责转换PCIe设备的DMA请求地址。
  2. SMMU位于设备请求端和设备互联组件之间,多个SMMU通常都是并行放置,一个SMMU到内存的路径不经过另外一个SMMU。
  3. 由于SMMU负责地址转换和权限检查等,因此设置SMMU的软件必须运行再特权级别下,如EL1、EL2。
  4. SMMU与I/O设备缓存一致性:
    • SMMU与总线的接口支持I/O一致性协议(如ACE或CHI),确保设备访问内存时自动处理缓存一致性。
    • 设备发起的请求(如DMA写)不需要额外的一致性支持,SMMU会自动处理。
    • SMMU不转换系统到设备方向的请求地址,因此窥探流量不能从系统转发到SMMU后面的设备,因此不能将完全一致性设备缓存放置在SMMU后面(这类设备缓存必须直接连接一致性总线)。

SMMU结构

3.布局形式

  1. SMMU A嵌入到一个复杂设备中,属于设备的一部分,只为该设备提供地址转换和权限检查服务。通常情况下,这种SMMU的实现形式,有无竞争且专用的地址转换模块和TLB。
  2. SMMU B是一个的完整的模块,其集成了地址转换、编程接口及页表遍历功能。两个客户端设备将SMMU B作为DMA访问系统的路径。
  3. SMMU C 采用分布式设计,为多个不同的设备提供地址转换及访问权限检查等功能,从而实现更高带宽。其包括:
    1. 一个中央页表遍历器( central translation table walker),该模块拥有独立的请求端接口,用于获取页表结构、配置结构及队列;同时配备完成端接口,用于接收编程访问。此单元可能包含一个macro-TLB及配置缓存。
    2. 远端TLB单元在发生miss时,会向中央页表遍历器发起转换请求,并将结果缓存于本地。图中所示的两个TLB单元,第一个通过一个端口支持一组(三个)设备;第二个连接PCIe Root Complex,同时还向RC提供了ATS(用于处理EP发起地址转换的请求)接口。
  4. 智能设备中嵌入了一个TLB单元,但复用SMMU C的页表遍历器,这样可以减少设备的复杂度。

布局

4.地址转换流程

设备发起一次DMA请求,会把StreamID、SubstreamID和VA信息输入到SMMU,SMMU利用这些信息将IOVA转换成PA。

  1. 首先使用StreamID查找Stream Table,获取设备对应的Stream Table Entry (STE),STE里面保存了设备页表的配置信息、VMID及下一级Context Descriptor (CD)的基地址。
  2. 接着使用SubstreamID查找CD表。CD里面保存了SMMU页表的基地址、ASID等信息。
  3. 若页表TLB命中,则直接使用缓存的页表转换地址,否则从内存中查找页表,并填充TLB。
  4. 利用SMMU的页表,将IOVA转换成PA。
  5. 若是虚拟化环境,此时转换后的地址是IPA,需要利用StreamID进行第二级地址转换,最终得到PA。

地址转换流程示意图

参考资料

  1. Arm ® System Memory Management Unit Architecture Specification version 3.

网站公告

今日签到

点亮在社区的每一天
去签到