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

【ARM】SMMU系统虚拟化整理

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.功能

未完待续ing

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Docker容器化技术(1)
  • python中的re模块--正则表达式
  • 美图WHEE AI:包括文生图、图生图、风格模型训练多种模式图片创作绘画创作平台
  • 查看仓库文件的改变(git-status , git-diff)
  • 前后端数据交互设计到的跨域问题
  • 水利行业的智慧转型之路:分析智慧水利的核心要素与优势,展望其在提升水资源利用效率、保障水安全方面的广阔前景
  • SpringMVC注解全解析:构建高效Web应用的终极指南 (下)
  • jmeter做接口压力测试_jmeter接口性能测试
  • Qt5离线安装包无法下载问题解决办法
  • zookeeper+kafka消息队列集群部署
  • 使用 ABBYY FineReader PDF 15 在创建或转换 PDF 时自动生成书签
  • 【linux】服务器重装系统之系统盘写入准备
  • 爬虫案例(读书网)(下)
  • STM32 GPIO的工作原理
  • LLaMA-Factory
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • CSS盒模型深入
  • ES6 学习笔记(一)let,const和解构赋值
  • JAVA之继承和多态
  • Just for fun——迅速写完快速排序
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • PHP 程序员也能做的 Java 开发 30分钟使用 netty 轻松打造一个高性能 websocket 服务...
  • 多线程事务回滚
  • 三分钟教你同步 Visual Studio Code 设置
  • 使用parted解决大于2T的磁盘分区
  • 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
  • 我的业余项目总结
  • 一个项目push到多个远程Git仓库
  • 怎样选择前端框架
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • ​​​​​​​开发面试“八股文”:助力还是阻力?
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • ​HTTP与HTTPS:网络通信的安全卫士
  • # .NET Framework中使用命名管道进行进程间通信
  • $.ajax()
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (C++二叉树05) 合并二叉树 二叉搜索树中的搜索 验证二叉搜索树
  • (java)关于Thread的挂起和恢复
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (二)换源+apt-get基础配置+搜狗拼音
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (算法)求1到1亿间的质数或素数
  • (转)winform之ListView
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • **PHP二维数组遍历时同时赋值
  • .NET C#版本和.NET版本以及VS版本的对应关系
  • .net php 通信,flash与asp/php/asp.net通信的方法
  • .NET 中小心嵌套等待的 Task,它可能会耗尽你线程池的现有资源,出现类似死锁的情况
  • .net 重复调用webservice_Java RMI 远程调用详解,优劣势说明