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

ARM SMMUv3简介(一)

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.

相关文章:

  • 主流大语言模型安全性测试(三):阿拉伯语越狱提示词下的表现与分析
  • 部门档案在不同系统中的差异及整合思路
  • FTP文件服务的搭建----详解
  • [Go]context上下文--使用要点--源码分析--Go核心--并发编程
  • IEC 61347-1:2015 灯控制装置安全通用要求详解
  • win32相关(IAT HOOK)
  • STM32什么是寄存器
  • HTML 面试题错题总结与解析
  • 锁的艺术:深入浅出讲解乐观锁与悲观锁
  • python asyncio的作用
  • 安卓基础(aar)
  • FastAPI安全机制:从OAuth2到JWT的魔法通关秘籍
  • PySide6 GUI 学习笔记——常用类及控件使用方法(单行文本控件QLineEdit)
  • 冰箱智能化升级方案:WT3000A离在线AI语音模组赋能AI在线对话功能
  • 10.Linux进程信号
  • C++11新增重要标准(下)
  • Java应用Flink CDC监听MySQL数据变动内容输出到控制台
  • 【Go核心编程】第十三章:接口与多态——灵活性的艺术
  • 计算机考研408真题解析(2024-15 整数乘法运算的四种实现方式)
  • Java 反射机制详解及示例
  • 汕头市营商环境建设监督局网站/企业网站怎么推广
  • 曹县做网站建设/描述建设一个网站的具体步骤
  • 肥城市住房和城乡建设厅网站/微信营销推广软件
  • 网站记录登录账号怎么做/网页链接制作生成
  • 企业网站导航代码/制作一个网站需要多少费用
  • 做关于植物的网站/企业推广app