【ARM】SMMU系统虚拟化整理

目录

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.mfbz.cn/a/842955.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

昇思25天学习打卡营第23天|ResNet50图像分类

课程打卡凭证 ResNet网络 ResNet(Residual Networks,残差网络)是一种深度神经网络结构,它的核心思想是引入了“残差学习”来解决深度网络中的退化问题。在深度神经网络中,当网络层数增加到一定程度时,网络…

深入理解Linux网络(二):UDP接收内核探究

深入理解Linux网络(二):UDP接收内核探究 一、UDP 协议处理二、recvfrom 系统调⽤实现 一、UDP 协议处理 udp 协议的处理函数是 udp_rcv。 //file: net/ipv4/udp.c int udp_rcv(struct sk_buff *skb) {return __udp4_lib_rcv(skb, &udp_…

什么是单例模式,有哪些应用?

目录 一、定义 二、应用场景 三、6种实现方式 1、懒汉式,线程不安全。 2、懒汉式,线程安全 3、双检锁/双重校验锁(DCL,即 double-checked locking) 4、静态内部类方式-------只适用于静态域 5、饿汉式 6、枚举…

Linux系统编程基础

Linux操作系统 Linux不是一个具体的操作系统,而是一类操作系统的总称,具体版本成为发行版。 Red Hat:目前被IBM收购,收费版,目前最大的Linux供应商CentOS: Red Hat退出的免费版Ubuntu:界面比较友…

【Gin】精准应用:Gin框架中工厂模式的现代软件开发策略与实施技巧(上)

【Gin】精准应用:Gin框架中工厂模式的现代软件开发策略与实施技巧(上) 大家好 我是寸铁👊 【Gin】精准应用:Gin框架中工厂模式的现代软件开发策略与实施技巧(上)✨ 喜欢的小伙伴可以点点关注 💝 前言 本次文章分为上下两部分&…

【C语言】动态内存管理(上)

文章目录 前言1.为什么要存在动态内存2. malloc和free2.1 malloc2.2 free2.3 使用实例(malloc和free) 3. calloc3.1 calloc例子 前言 本文开始将开始学习C语言中一个比较重要的知识点或者是操作——动态内存管理。由于本次的知识比较重要,为…

科技赋能,智慧粮仓视频综合管理方案助力粮食安全

一、背景需求 随着科技的快速发展,智慧化、智能化管理已成为各行各业的重要发展方向。粮食仓储作为国家粮食安全战略的重要组成部分,其管理的科学性和智能化水平直接关系到粮食的存储安全、品质保障和运营效率。 因此,TSINGSEE青犀提出一套…

GaussDB常见调优指南

文章目录 GaussDB常见调优指南一. Analyze 统计信息解析二. Explain 分布式计划解析三. 性能调优总体策略详解四. 性能调优之坏味道 SQL 识别五. 性能调优之好味道表定义六. 性能调优之 SQL 改写七. 性能调优之路径干预八. 性能调优之 Plan hint 运用九. 性能调优之 GUC 参数调…

Linux 12:多线程2

1. 生产者消费者模型 生产者消费者模型有三种关系,两个角色,一个交易场所。 三种关系: 生产者之间是什么关系?竞争 - 互斥 消费者和消费者之间?竞争 - 互斥 消费者和消费者之间?互斥和同步 两个角色: 生产者和消费者 一个交…

git 提交的进阶操作

cherry-pick cherry-pick 是 Git 中的一种操作,允许你从一个分支中选择特定的 commit,并将其应用到另一个分支。它的主要用途是将特定的更改引入到其他分支,而无需合并整个分支历史。这在修复 bug 或者移植某些功能时特别有用。 cherry-pick 的使用场景 Bug 修复: 例如,你…

安卓手机怎么格式化?格式化后数据如何恢复?1篇文章全搞定

随着时间的推移,手机中的数据越积越多,有时候我们可能需要对其进行一次彻底的大扫除——格式化。它就像一把双刃剑,一方面能够清除手机中的冗余数据,提升手机的运行效率;另一方面,如果不慎操作,…

Postman导出excel文件

0 写在前面 在我们后端写接口的时候,前端页面还没有出来,我们就得先接口测试,在此记录下如何使用postman测试导出excel接口。 如果不会使用接口传参可以看我这篇博客如何使用Postman 1 方法一 2 方法二 3 写在末尾 虽然在代码中写入文件名…

Apache BookKeeper 一致性协议解析

导语 Apache Pulsar 是一个多租户、高性能的服务间消息传输解决方案,支持多租户、低延时、读写分离、跨地域复制(GEO replication)、快速扩容、灵活容错等特性。Pulsar 存储层依托于 BookKeeper 组件,所以本文简单探讨一下 BookK…

QXlsx读写excel

QXlsx读写excel 安装 QXlsx使用 qmake使用 CMake 基本用法1. 写入 Excel 文件2. 读取 Excel 文件 详细用法1. 设置单元格样式2. 合并单元格3. 创建图表4. 设置列宽和行高 完整示例 QXlsx 是一个用于在 Qt 应用中读写 Excel 文件的第三方库。它提供了丰富的 API,可以…

react 快速入门思维导图

在掌握了react中一下的几个步骤和语法,基本上就可以熟练的使用react了。 1、组件的使用。react创建组件主要是类组件和函数式组件,类组件有生命周期,而函数式组件没有。 2、jsx语法。react主要使用jsx语法,需要使用babel和webpa…

由delete引起的锁扩大

这句话意思是:假设delete语句物理删除数据,那么delete事务会持有gap lock,那么会造成锁扩大,而实际上delete操作会转为update操作,最终delete事务持有的gap lock退化为record lock,不会造成锁扩大 下面用SQ…

FPGA:频闪灯设计

1、需求 若在FPGA上实现LED灯一秒闪烁一次,先进行计算,1秒闪烁一次,即周期为1秒,开发板XC7A35TFFG-2的基本时钟输入由板载 50MHz 有源晶振提供,即频率为f 50MHz 。 则一个周期为 T 1 f 1 50 M H z 20 n s T\frac{…

十七、【机器学习】【非监督学习】- K-均值 (K-Means)

系列文章目录 第一章 【机器学习】初识机器学习 第二章 【机器学习】【监督学习】- 逻辑回归算法 (Logistic Regression) 第三章 【机器学习】【监督学习】- 支持向量机 (SVM) 第四章【机器学习】【监督学习】- K-近邻算法 (K-NN) 第五章【机器学习】【监督学习】- 决策树…

学习系列一:YOLO系列目标检测框架之间介绍及对比

YOLO系列目标检测框架之间介绍及对比 华为HCIP AI高级工程师证书, 华为HCIA AI证书,目前从事视觉算法工作 文章目录 YOLO系列目标检测框架之间介绍及对比前言一、YOLOv1二、YOLOv2三、YOLOv3四、YOLOv4五、YOLOv5及后续算法 前言 YOLO系列算法 YOLO 创…

PyCharm创建一个空的python项目

1.设置项目路径 2.配置python解释器 右下角可以选择always