【ARM】SMMU系统虚拟化整理

news2024/9/20 21:46:23

目录

1.MMU的基本介绍

1.1 特点梳理

2.功能

DVM interface 

PTW interface

2.1 操作流程

2.1.1 StreamID

2.1.2 安全状态:

2.1.3 HUM

2.1.4 可配置的操作特性

Outstanding transactions per TBU

QoS 仲裁

2.2 Cache结构

2.2.1 Micro TLB

2.2.2 Macro TLB


1.MMU的基本介绍

内部文档整理

MMU-500 是一个系统级的内存管理单元(Memory Management Unit, MMU),它负责将输入地址转换为输出地址,这一过程基于 MMU-500 内部寄存器和转换表中的地址映射和内存属性信息。MMU-500使用的是ARM SMMU架构v2,以下是 MMU-500 的主要功能和组件的详细解释:

  1. 地址转换阶段

    • 地址从输入地址转换到输出地址的过程被称为地址转换的一个阶段。
  2. 支持 ARM 架构

    • MMU-500 支持 ARMv7 和 ARMv8 架构定义的转换表格式。
  3. 转换类型

    • 第一阶段转换:将输入的虚拟地址(Virtual Address, VA)转换为输出的物理地址(Physical Address, PA)或中间物理地址(Intermediate Physical Address, IPA)。
    • 第二阶段转换:将输入的 IPA 转换为输出的 PA。
    • 组合阶段转换:将输入的 VA 转换为输出的 IPA,然后将该 IPA 转换为 PA。MMU-500 为每个转换阶段执行转换表遍历。
  4. 多级地址查找

    • 地址转换可以跨越两个阶段,即第一阶段和第二阶段。地址转换可能需要多次转换表查找,每次转换表查找被描述为地址查找的一个级别。每个第一阶段转换的级别可能需要额外的第二阶段转换。
  5. 内存属性定义

    • 除了将输入地址转换为输出地址外,地址转换的每个阶段还定义了输出地址的内存属性。在两阶段转换中,第二阶段转换可以修改第一阶段转换定义的属性。
  6. 转换阶段的禁用或旁路

    • 地址转换的一个阶段可以被禁用或旁路,MMU-500 可以为禁用和旁路的转换阶段定义内存属性。
  7. 上下文识别

    • MMU-500 使用请求主设备(requesting master)的输入来识别上下文。这个上下文告诉 MMU-500 用于转换的资源,包括要使用的转换表。
  8. 第一阶段转换

    • 通常与应用程序和操作系统级别的操作相关联,VA 范围可以被分割成两个子范围,由转换表基寄存器(Translation Table Base registers)TTBR0 和 TTBR1 转换,每个都有相关的转换表和控制寄存器。
  9. 支持的页面大小

    • ARMv7 架构:MMU-500 支持所有页面大小。
    • ARMv8 架构:除了 16KB 页面粒度外,MMU-500 支持所有页面大小。
  10. 安全和非安全转换上下文

    • 第一阶段转换支持安全和非安全转换上下文。通常,适当的操作系统:
      • 定义内存中的第一阶段转换的转换表,用于其安全状态。
      • 配置 MMU-500 以配置第一阶段转换,然后启用转换。
  11. 第二阶段转换

    • 仅支持非安全(Non-secure)转换上下文。典型的两级地址转换使用模型如下:
      • 非安全操作系统定义第一阶段地址转换,用于应用程序级和操作系统级操作。它假设自己是从处理器使用的 VAs 映射到物理内存系统中的 PAs,但实际上它将 VAs 映射到 IPAs。这个mapping的含义是 OS使用的translation table中的address是处于IPA address空间的,然后需要stage2来将IPA转换成PA。
      • 管理程序(hypervisor)定义第二阶段地址转换,将 IPAs 映射到 PAs。这是其虚拟化一个或多个非安全客户操作系统的一部分。
  12. 转换后备缓冲器(TLB)

    • MMU-500 可以在 TLB 中缓存转换表查找的结果,这意味着 MMU-500 也支持 TLB 维护操作。
  13. 参考文档

    • 有关 MMU-500 支持的架构特性的更多信息,请参阅 ARM® 系统内存管理架构规范。
    • 有关地址转换(包括转换表格式和 TLB 维护操作)的更多信息,请参阅:
      • ARM® 架构参考手册,ARMv7-A 和 ARMv7-R 版。
      • ARM® 架构参考手册,ARMv8,针对 ARMv8-A 架构配置。
  14. MMU-500 的关键组件

    • 转换缓冲单元(Translation Buffer Unit, TBU):包含一个 TLB,用于缓存页表。MMU-500 为每个连接的主设备实现一个 TBU,设计为靠近主设备本地。
    • 转换控制单元(Translation Control Unit, TCU):控制和管理地址转换。MMU-500 实现一个单一的 TCU。
    • 互连:将多个 TBU 连接到 TCU。

下图给出一个系统中SMMU集成的例子:

1.1 特点梳理
  1. 地址虚拟化

    • 为基于 ARM 处理器的系统和其他总线主设备提供地址虚拟化。
  2. 支持的转换

    • 第一阶段转换(Stage 1)。
    • 第二阶段转换(Stage 2)。
    • 第一阶段后跟第二阶段转换(Stage 1 followed by Stage 2)。
  3. 可编程服务质量(QoS)

    • 允许根据服务质量对请求进行仲裁。
  4. 分布式转换支持

    • 支持多达 32 个 TBUs(Translation Buffer Units)的分布式转换。
  5. 转换支持的地址范围

    • 支持 32 位到 49 位的虚拟地址范围和 48 位的物理地址范围。
  6. 多事务上下文

    • 支持多达 128 个可配置的上下文和可编程页面大小。MMU-500 使用主设备输入流 ID 来映射每个上下文。
  7. 转换支持

    • 支持 ARMv7 VMSA 的第一阶段转换。
    • 支持 ARMv8 AArch32 的第一阶段和第二阶段转换。
    • 支持 ARMv8 AArch64 的第一阶段和第二阶段转换,包括 4KB 和 64KB 粒度。
    • 支持第一阶段后跟第二阶段的转换。
  8. 页面大小限制

    • 除了 ARMv8 架构定义的 16KB 页面粒度外,支持所有页面大小。
  9. PTW 请求的仲裁

    • 使用已编程的 QoS 值对来自不同 TBUs 的 PTW(Page Table Walk)请求进行仲裁。
  10. 页面表遍历的缓存

    • 存储中间页面表遍历数据。
  11. TLB 中的页面表项缓存

    • 在 TLB 中缓存页面表项,以提高地址转换的效率。
  12. TLB 命中下未命中(HUM)支持

    • 支持在 TLB 命中时处理未命中的情况。
  13. 可配置的 PTW 深度

    • 使用并行 PTWs 配置 PTW 深度。
  14. TLB 失效

    • 通过 AMBA 4 DVM 信号或寄存器编程进行 TLB 失效。
  15. 转换和保护检查支持

    • 包括 TrustZone® 扩展支持。
  16. 故障处理、记录和信号

    • 包括需求分页和对暂停模型的支持。
  17. AMBA 从属接口

    • 每个 TBU 支持一个 ACE-Lite 从属接口,用于连接需要地址转换的总线主设备。
  18. AMBA 主接口

    • 支持 ACE-Lite 和 DVM 的主设备事务或 PTWs。
  19. AXI4 接口

    • 用于编程的 AXI4 接口。
  20. TLB 缓存的两个级别

    • 宏 TLB(Macro TLB)。
    • 微 TLB(Micro TLB)。
  21. 错误检测和失效

    • TLB 和遍历缓存 RAM 支持单比特错误检测和错误检测后的失效。上下文消歧多 FIFO(MFIFO)RAM 支持单比特错误检测和校正。
  22. 调试和性能监控事件

    • 提供调试和性能监控功能。
  23. TCU 核心时钟速度

    • TCU 核心可以在 TCU 外部接口时钟速度的一半运行。
  24. 预取缓冲器

    • 预取下一个 4K 或 64K leaf page entry,以减少延迟。
  25. IPA2PA 缓存

    • 加速第一阶段后跟第二阶段的转换。
  26. 支持每个 TBU 主接口的未完成事务

    • 支持每个 TBU 主接口多达 256 个未完成事务。
  27. 服务质量方案中优先级提升支持

    • 作为 QoS 方案的一部分,支持优先级提升。

2.功能

DVM interface 

MMU-500 的 ACE-Lite 接口的 AC 信道连接到由 CCI 驱动的 AC 信道或支持 DVM 消息的 ACE 兼容的从属接口。ARM 建议使用 DVM 信道进行 TLB 维护操作。如果系统无法访问 DVM 信道,则必须将 acvalid 信号连接到低电平,并且可以使用编程接口进行 TLB 维护操作。

当您将 MMU-500 配置为提供专用的 AXI 信道以执行 PTW 时,AC 信道必须是 PTW 信道的一部分。

注意:

  • 如果没有配置专用信道,请使用 TBU0 AXI 接口后缀,并确保它连接到 TCU。
  • 此接口支持以下内容:
    • AC 信道(地址信道)
      • 44 位宽的 AC 信道连接到 TCU。
    • 注意:CD 信道(数据信道)没有连接到 MMU-500。
PTW interface

在 MMU-500 中,可以有一个专用接口提供对内存的访问以进行页表遍历(PTWs)。

如果 MMU-500 配置为支持 PTWs 的专用接口,您必须将与 PTWs 相关联的从属接口的读地址和读数据信道连接到 MMU-500 PTW 信道。在这种配置中,PTW 信道包含 "_ptw" 后缀。例如,araddr_ptw 和 acaddr_ptw。

注意:

  • 专用 PTW 接口上的写接口不使用。
  • 如果 MMU-500 配置为不支持 PTWs 的专用接口,PTWs 将在连接到 TBU0 的 ACE-Lite 接口上执行。

MMU-500的Clock和power domain

        当TBU0与TCU sharing相同的clock或power domain时。

2.1 操作流程

MMU-500 通过以下逻辑处理步骤路由每个地址转换:

  1. 安全状态确定。
  2. 上下文确定。
  3. 如果转换未缓存在 TLB 中,则进行页表遍历。
  4. 保护检查。
  5. 根据编程生成或合并属性。

您可以配置 MMU-500 绕过事务处理过程的事务,或者无论转换状态如何都使事务发生故障。

MMU-500 的主要功能是根据存储在转换表中的地址映射和内存属性信息,提供地址和内存属性转换。MMU-500 执行以下步骤以实现此目的:

  1. 接收地址事务,以及安全和流信息。
  2. 使用接收到的安全信息以及事务来确定事务的附加处理步骤。接收到的安全信息是事务发起者的安全状态。根据发起者的安全状态是安全还是非安全,MMU-500 分别使用安全或非安全的寄存器集合进行事务的附加处理。见第 2-14 页上的“安全确定”。
  3. 使用 (S)CR0.CLIENTPD 确定是否需要流匹配。如果 CLIENTPD 被禁用,则绕过事务。
  4. 使用接收到的流信息以及事务来确定要应用于事务的转换机制。转换机制可以是绕过、第一阶段转换、第二阶段转换,或第一阶段后跟第二阶段转换。
  5. 如果在上下文映射之前转换过程中识别出故障,则将故障信息添加到全局故障状态寄存器。如果故障是在上下文映射之后识别出的,则 MMU-500 将故障信息添加到上下文银行的故障状态寄存器中。 当启用中断报告时,故障会触发中断。您可以通过清除故障状态寄存器来清除中断。

注意: MMU-500 不支持配置错误。它将全局故障状态寄存器中的 CAF 位视为 RAZ(保留未用)。

2.1.1 StreamID

2.1.2 安全状态:

在确定了 SSD 索引之后,SSD 表包含从 0 到 2^SSD 索引信号宽度 - 1 的位。 您必须按照以下方式确定位的状态:

  • SSD 索引可以是可编程的或不可编程的,并且可以处于安全或非安全状态。默认情况下,SSD 索引处于不可编程的非安全状态。
  • 非可编程索引列表
    • 对于这些索引,主设备的安全状态是定义好的,不会改变。
    • 您必须指定那些安全状态始终为安全的主设备的索引。
  • 可编程索引列表
    • 您可以编程可编程索引的安全状态。
    • 您必须确定那些安全状态可编程的每个主设备的默认状态。

注意:

  • 一个条目不能在多个列表中重复。
  • 您必须为每个配置至少指定一个可编程或固定的非安全条目。
  • 索引的数量由配置的 SSD 索引信号宽度决定。例如,如果 SSD 索引信号宽度为 6 位,则有 64 个索引,范围是 0-63。您必须将索引编程为以下之一:
    • 可编程安全。
    • 可编程非安全。
    • 非可编程安全。
  • 未编程的索引默认为不可编程非安全。

MMU-500 支持可以访问安全和非安全 TLB 的安全调试 TLB 访问。 SSD 表最多有 32Kb 的空间,该空间被分成 32 个部分,每个 TBU 分配 1Kb。 例如,TBU0 空间是从 0-1Kb,TBU1 空间是从 1-2Kb,TBU2 空间是从 2-3Kb。 每个 TBU 生成的 SSD 索引最多为 10 位,被索引到分配给 TBU 的 1Kb 空间中。 您必须使用这些信息来编程 SSD 表。

注意:

  • 当 integ_sec_override 信号被设置为零时,安全确定描述才有效。
  • 所有实现和集成寄存器都可以通过非安全访问来访问。这包括以下全局空间 0 寄存器:
    • 辅助配置寄存器(ACR)。
    • 调试寄存器。
  • 您不能访问任何安全寄存器。
  • 所有事务都被视为来自非安全主设备
2.1.3 HUM

Hit-Under-Miss (HUM) 是一种特性,它可以翻译 TLB 失效事务,并将事务传递给下游从属设备,如果翻译后的 TLB 失效事务结果为 TLB 命中。HUM 允许在 MMU-500 为先前发生 TLB 失效的事务执行翻译时,对于随后的事务如果出现 TLB 命中,可以响应主设备。以下是 HUM 对读写事务的特性:

  • 如果事务是读访问,HUM 将自动启用。
  • 如果事务是写操作,HUM 的启用或禁用基于写缓冲区的深度。您可以在配置期间指定写缓冲区的深度。
    • 如果写缓冲区的深度为零,则 HUM 自动禁用。
    • 如果写缓冲区的深度非零,只有当来自失效事务的写数据可以适应写缓冲区时,写命中事务才会被翻译。
  • 未完成的失效事务的数量由写缓冲区的深度决定。例如,如果缓冲区的深度为四,则它可以容纳两个长度为二的事务。每个缓冲区条目仅保存事务的一个节拍,即使它是窄宽度的。

HUM 特性提高了系统处理连续内存访问的效率,尤其是在有大量 TLB 失效和命中混合的情况下。

2.1.4 可配置的操作特性
Outstanding transactions per TBU

未完成事务定义为:

  • 生成物理地址访问并被从属设备接受的事务。
  • 写入或读取响应被暂停的事务。 对于每个 TBU,MMU-500 支持每个写入和读取访问各 256 个未完成事务。

MMU-500 在主设备的访问导致 TLB 失效时生成 PTW。然而,根据配置,MMU-500 支持每个 TBU 同时进行 8 或 16 个这样的并行 PTW。如果有超过 8 或 16 个 PTW 挂起,通道上的 TLB 失效表明 MMU-500 不能在接受写入或读取通道上的额外事务。

QoS 仲裁

PTW 由 TCU 为多个 TBU 发起。因此,当 TCU 中有多个未完成事务时,最高质量的 TBU 会被赋予优先权。MMU-500 重用为 PTWs 编程的 QoS 值。

arqosarb 信号,从 MMU-500 到 CCI 的边带信号,在 TCU 中所有 PTW 读取事务中具有最高的 QoS 值。

在地址转换中,MMU-500 使用已编程的服务质量(Quality of Service, QoS)值。

对于个别的预取访问,MMU-500 使用命中事务的 QoS 值。

对于具有相同 QoS 值的事务,MMU-500 采用先到先服务(First-Come, First-Served, FCFS)模型进行处理。这意味着在相同优先级级别上,事务将按照它们到达的顺序被处理。

地址宽度

进入的地址宽度固定为49位,其中 A[48] 指定虚拟地址子范围。您必须将所有未使用的位连接到零。输出地址宽度为48位,AC地址总线的宽度为48位。

注意 MMU-500不支持地址宽度大于49位的外设。

2.2 Cache结构
2.2.1 Micro TLB

2.2.2 Macro TLB

预取缓冲区 MMU-500

会提前提取 4KB 和 64KB 大小的页面到预取缓冲区中。这减少了未来 PTWs(页表步进走)的延迟。您可以配置预取缓冲区的深度。 预取缓冲区是一个单一的四路组相联缓存,您可以根据上下文启用或禁用它。预取缓冲区与宏观 TLB 缓存共享 RAM。

Page walk缓存

MMU-500 缓存部分 PTWs 以减少 TLB 失效时的 PTW 数量。PTW 缓存存在于 TCU 中,第一阶段和第二阶段的第二级 PTWs 被缓存在 PTW 缓存中。

IPA 到 PA 缓存

MMU-500 实现了一个从 IPA(中间物理地址)到 PA(物理地址)的缓存,用于第一阶段后跟第二阶段的转换。 IPA 到 PA 缓存是一个单一的四路组相联缓存,您可以根据上下文启用或禁用它。IPA 到 PA 缓存与 PTW 缓存共享 RAM。

来个赞兄弟姐妹们~

下期预告:SMMU集成指导

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1940211.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

交叉编译ethtool(ubuntu 2018)

参考文章:https://www.cnblogs.com/nazhen/p/16800427.html https://blog.csdn.net/weixin_43128044/article/details/137953913 1、下载相关安装包 //ethtool依赖libmul git clone http://git.netfilter.org/libmnl //ethtool源码 git clone http://git.kernel.or…

go语言Gin框架的学习路线(七)

GORM入门(基于七米老师) 目录 GORM入门 安装 连接数据库 连接MySQL 连接PostgreSQL 连接Sqlite3 连接SQL Server 我们搞一个连接MySQL的例子 创建数据库 GORM操作MySQL GORM是一个流行的Go语言ORM(对象关系映射)库,它提供了一种方…

Golang | Leetcode Golang题解之第273题整数转换英文表示

题目: 题解: var (singles []string{"", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"}teens []string{&…

高效日志管理系统设计

设计一个高效的日志管理系统,旨在确保日志数据能够被有效收集、存储、分析和检索,同时也要考虑到系统的可扩展性、可靠性和易用性。以下是高效日志管理系统设计的关键要素: 1. 日志收集 自动收集:使用轻量级的日志采集代理&…

windows11 vmware安装记录

注意:windows11不要安装vmware16版本以下的!!!会报错,与内核冲突,只有关闭内核才可以运动,但是这样电脑的安全性得不到保障。 Windows11 中 Vmware Workstations16 安装CentOS 7_windows featu…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 小区小朋友统计(100分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 🍿 最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,支持题目在线…

二染色,CF 1594D - The Number of Imposters

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 1594D - The Number of Imposters 二、解题报告 1、思路分析 并查集&…

某手某聚星登录算法分析

KS某聚星登录算法分析 某手某聚星登录算法分析第一步:抓包-登录第二步:定位加密入口第三步:分析加密算法第四步:算法实现 某手某聚星登录算法分析 在这篇文章中,我们将详细解析某手某聚星的登录算法,涵盖从…

opencv,连续拍摄多张图像求平均值减少噪点

对于照度低或者相机质量差造成的密集的随机小噪点,可以通过拍摄多张图像求平均值的方法来减少噪点,获得较为清晰的画面。 import cv2 import numpy as npclass FilterCamera:def __init__(self, cap, in_frame, num):self.cap cap # 定义的相机self.n…

n6.Nginx 压缩功能

Nginx 压缩功能 Nginx支持对指定类型的文件进行压缩然后再传输给客户端,而且压缩还可以设置压缩比例,压缩后的 文件大小将比源文件显著变小,这样有助于降低出口带宽的利用率,降低企业的IT支出,不过会占用相 应的CPU资…

科普文:后端性能优化的实战小结

一、背景与效果 ICBU的核心沟通场景有了10年的“积累”,核心场景的界面响应耗时被拉的越来越长,也让性能优化工作提上了日程,先说结论,经过这一波前后端齐心协力的优化努力,两个核心界面90分位的数据,FCP平…

PDF编辑器的秘密:解锁文档处理的无限可能

PDF这个文件因其跨平台兼容性、保持文档格式不变以及易于传输的特性,成为了工作、学习及日常生活中不可或缺的一部分。但是PDF编辑器可不多,我这次就介绍下我用过好用的PDF编辑器吧。 1福昕PDF编辑器 这个软件功能全面,所以软件本身的安装包…

服务攻防-中间件安全(漏洞复现)

一.中间件-IIS-短文件&解析&蓝屏 IIS现在用的也少了,漏洞也基本没啥用 1、短文件:信息收集 2、文件解析:还有点用 3、HTTP.SYS:蓝屏崩溃 没有和权限挂钩 4、CVE-2017-7269 条件过老 windows 2003上面的漏洞 二.中…

游戏常用运行库安装包 Game Runtime Libraries Package

游戏常用运行库安装包(Game Runtime Libraries Package)是一个整合了多种游戏所需运行库的安装程序,旨在帮助玩家和开发者解决游戏无法正常运行的问题。该安装包支持从Windows XP到Windows 11的系统,并且具备自动检测系统并推荐合…

threejs零基础搭建3D可视化汽车展厅

前置知识(最下面有完整代码) 每个代码都有注释,零基础也能看懂 中文官方文档教程 创建项目 创建空文件夹 执行如下命令初始化package.json文件 npm init -y安装threejs包 yarn add three安装tween.js动画库,用于做动画 tweenjs文档 yarn add @tweenjs/tween.js安装gui调…

问题解决实录 | Anaconda | Anaconda Navigator 启动无反应

问题解决实录 | Anaconda | Anaconda Navigator 启动无反应 以管理员身份运行 Anaconda Prompt conda update -n root conda conda update --all如果执行完以上步骤 碰到 AttributeError: module ‘pkgutil’ has no attribute ‘ImpImporter’. Did you mean: ‘zipimporter…

python3.10.4——CentOS7安装步骤

目录 1.CentOS7中默认有python2.7.5 2.安装前置依赖程序 3.在python官网下载linux系统安装包 4.解析、编译安装python3.10.4 5.创建软链接 6.修改yum相关配置 7.重新检查python版本号 1.CentOS7中默认有python2.7.5 2.安装前置依赖程序 yum install wget zlib-devel bz…

因果推断 | 双重机器学习(DML)算法原理和实例应用

文章目录 1 引言2 DML算法原理2.1 问题阐述2.2 DML算法 3 DML代码实现3.1 策略变量为0/1变量3.2 策略变量为连续变量 4 总结5 相关阅读 1 引言 小伙伴们,好久不见呀。 距离上次更新已经过去了一个半月,上次发文章时还信誓旦旦地表达自己后续目标是3周更…

HOST处理器访问PCI设备

HOST处理器对PCI设备的数据访问主要包含两方面内容,一方面是处理器向PCI设备发起存储器和I/O读写请求;另一方面是处理器对PCI设备进行配置读写。 在PCI设备的配置空间中,共有6个BAR寄存器。每一个BAR寄存器都与PCI设备使用的一组PCI总线地址…

RK3568笔记四十一:DHT11驱动开发测试

若该文为原创文章,转载请注明原文出处。 记录开发单总线,读取DHT11温湿度 一、DHT11介绍 DHT11是串行接口(单线双向)DATA 用于微处理器与 DHT11之间的通讯和同步,采用单总线数据格式,一次通讯时间4ms左右…