ARM_SMMU

本篇参考 arm 官网公开材料 和 小崔的linux 专栏 https://zhuanlan.zhihu.com/p/105005488

宋宝华老师MMU介绍
armv8-armv9 MMU深度学习

MMU简介

MMU是Memory Management Unit的缩写,中文名是内存管理单元。它是一种负责处理中央处理器(CPU)的内存访问请求的计算机硬件。它的功能包括虚拟地址到物理地址的转换(即虚拟内存管理)、内存保护、中央处理器高速缓存的控制。

在linux中,用户态使用的内存是虚拟地址(Virtual Address,VA),实际硬件内存称为物理地址(Physical Address,PA)。用户访问内存看到的是VA,内核转化成PA操作实际物理地址。这里要提一下,实际MMU硬件支持2层转化,PA->IPA->VA,但是linux bypass了IPA,简化了流程(加密1次和加密2次效果一样)。

对用户体现虚拟地址,一方面可以起到安全作用(防止直接访问物理地址,查看我们存储的数据),另一方面减少用户对物理内存设备的关注,用户只要关注申请、读写、释放等使用内存操作即可。

DMA简介

操作系统中,内存的使用非常频繁,小到一个进程任务分配堆栈、申请内存,大到设备访问内存(读写等操作)。根据上述MMU功能介绍,这些内存使用都需要经过CPU从VA到PA的互相转化。而CPU的总线固定,一旦访问过多,访问有快有慢等,势必造成总线拥堵,影响性能。

此时加入DMA (Direct Memory Access,直接内存存取)硬件,它与外设和内存连接,将搜集的数据批量传输到内存,然后再发送一个中断通知CPU去内存取,这样减少了CPU被中断的次数,提高了系统的效率。如下图:
在这里插入图片描述
由于DMA不能像CPU一样通过MMU操作虚拟地址,所以DMA需要的是连续的物理地址。

smmu

A System Memory Management Unit (SMMU) performs a task that is analogous to that of an MMU in a PE, ** **. It is active for DMA only. Traffic in the other direction, from the system or PE to the device, is managed by other means – for example, the PE MMUs.

SMMU全称System Memory Management Unit,看名字很难理解是做什么的。其实 SMMU 和 MMU具有同样的作用,区别是供使用DMA的外设使用,同样提供页表转换工作,外设可通过页表转换访问物理地址,达到devices设备和进程一样使用虚拟地址。
在这里插入图片描述
官方给出的应用1:
在这里插入图片描述
如上图:

1)上面SMMU给(使能DMA)device提供地址转换功能。device 使用VA访问内存,smmu根据VA计算对应PA,访问物理内存;

2)下面SMMU一对一连接PCIe Root Complex (which itself hosts a network of endpoints)设备,为PCIE设备提供虚拟地址(通过ATS)功能。

官方给出的应用2:
在这里插入图片描述
1)SMMU A为complex device提供地址翻译功能;

2)SMMU B为多个device(使用同个I/O,经过DMA)提供地址翻译功能;

3)SMMU C并行提供多条路径,多个功能,以提供更高带宽,包括:
a. central translation table walker,包括主接口(用于获取翻译地址、初始化页表结构和队列)以及从接口(用于配置访问权限)。
b. 为多个device设备和PCIe提供虚拟化能力。

SMMU和MMU功能一样,为device设备提供地址转换功能,同时提供读写权限、Cache属性,更厉害的是MMU和SMMU可以共页表。

相对不同的是,一个MMU仅支持一个CPU,但是SMMU可以支持多个外设,为了区分这些外设,使用StreamID来标识,同个SMMU的StreamID必须唯一,不同SMMU的StreamID互不影响.

SMMU提供三大功能

1.地址转换功能,虚拟内存,提供1级页表和2级页表的能力;

2.地址读写权限属性、cache属性;

3.地址转换,存储空间扩展功能,比如设备需要地址空间大于物理内存空间;
在这里插入图片描述
如上图,smmu最大提供2级页表转换,并可控制 stage1 和 stage2 是否 bypass(bypass:不进行地址转换,直接透传):

  1. 如果SMMU全局接口关闭(SMMU_CR0.SMMUEN == 0),地址不经过翻译直接bypass传输,相当于无smmu器件;

  2. stage1 bypass,只提供IPA->PA; stage2 bypass,只提供VA->IPA;这里理解下,并不是说任一bypass,smmu就无法提供VA->PA的能力,而是只翻译一次。之前提过,linux的IPA是直接bypass,只用一次页表翻译的,所以理论上bypass stage1或stage2,翻译一次即可同linux页表翻译,此时比如只使能stage1,VA->IPA相当于VA->PA;

stream table entry(STE)

SMMU有2个数据结构保存stage1和stage2地址翻译信息,分别是 STE和CD(Context descriptor)
在这里插入图片描述
STE(stream table entry):包含stage1初始化信息、CD表指针(CD中包含stage1的页表基地址和相关转换信息)、stage2的页表基地址以及相关转换信息(如果使能stage2的话)
Incoming transaction的stream定位STE。Stream表支持两种格式: Linear Stream Table 和 2-level Strem table.

Linear Stream Table

在这里插入图片描述
一个 linear Stream table 是一个连续的STE array,由StreamID从0开始索引。该大小可配置为STE大小的 2n 倍,直到 SMMU 硬件支持的最大 StreamID 位数。所有SMMU实现都支持线性流表格式

2-level Strem table

在这里插入图片描述
2-level Stream table 是由一个 top-level table 组成的结构,该表包含指向多个二级表的描述符,这些二级表包含STEs。整个结构所覆盖的 streamid 的跨度可以配置到SMMU支持的最大数量,但第二级表不需要完全填充,大小可能不同。这节省了内存,并避免了对非常大的stream空间进行大型物理连续分配的需求

如上
1)SMMU根据 STRTAB_BASE 查找 STE table,每个设备对应一个streamID,并对应一个STE表。
2)SMMU_(S_)STRTAB_BASE_CFG.SPLIT 决定是 Linear Stream Table 还是 2-level Stream Table 查表方式;
3)Linear Stream Table 方式每个 StreamID 对应一个STE
4)2-level Stream Table方式 StreamID 不同 bit 指向不同STE

Context descriptor(CD)

在这里插入图片描述
CD(Context descriptor):包含stage1的页表基地址和相关转换信息;
在这里插入图片描述
stage1和stage2相关转换流程,如上图:

1)SMMU根据StreamID和SMMU_STRTAB_BASE查找到设备对应STE表;
2)SMMU检查STE表,STE.Config决定是否进行stage1转换,如果是,则(结合SubStreamID)根据S1ContextPtr指向对应CD表,CD表中包含stage1页表和转换的信息;
3)SMMU根据S2TTB(如果配置的话),查找stage2页表和转换信息;
在这里插入图片描述
由上可知每个SubStreamID对应一个CD表,SubStreamID对应每个用户态空间地址,换句话说,每个涉及对应外设的进程,都对应一个SubStreamID。
在这里插入图片描述

TLB(Translation Lookaside Buffer)

Translation Lookaside Buffer可翻译为“地址转换后援缓冲器”,也可简称为“快表”。用于存放页表转换关系的 cache,其中存储了当前最可能被访问到的页表项,其内容是部分页表项的一个副本。只有在TLB无法完成地址翻译任务时,才会到内存中查询页表,这样就减少了页表查询导致的处理器性能下降,提高页表转换的效率。

TLB miss:在TLB中没有找到需要查找的页表,需要到配置中查找;
TLB hit:在TLB中找到所需页表;
PTW:Page Table Walk,页表查找过程
在这里插入图片描述

SMMU整个查表流程,如上图是页表翻译过程:
1)外设输入VA、StreamID 和 SubStreamID 给SMMU;
2)SMMU 查表 STE 和 CD,找到 stage1 和 stage2 页表转换信息;
3)先通过 TLB 查找页表,找到则计算对应 PA 地址,没找到则根据 STE 和 CD 计算 PA;
4)将PA地址输出;


版权声明:本文为wangwangmoon_light原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。