SMMU 软件指南
目录
-
- 1. 概述
-
- 1.1 开始之前
- 2. SMMU 的功能
- 3. SMMU 的操作
-
- 3.1 转换过程概述
- 3.2 流安全
- 3.3 流标识
-
- 3.3.1 什么是 StreamID?
- 3.3.2 SubstreamID 的作用
- 3.4 故障模型
-
- 3.4.1 终止模型
- 3.4.2 停滞模型
- 3.5 旁路
- 3.6 地址转换服务 (ATS)
- 3.7 页面请求接口 (PRI)
- 4. 编程 SMMU
-
- 4.1 SMMU 寄存器
- 4.2 流表
-
- 4.2.1 线性流表
- 4.2.2 两级流表
- 4.3 一级流表描述符 (L1STD)
- 4.4 STE
- 4.5 CD
-
- 4.5.1 单个 CD
- 4.5.2 单级 CD 表
- 4.5.3 两级 CD 表
- 4.6 虚拟机结构 (VMS)
- 4.7 缓存
- 4.8 命令队列
-
- 4.8.1 命令
- 4.9 事件队列
-
- 4.9.1 事件记录
- 4.10 全局错误
- 4.11 最小配置
- 5. 系统架构考虑
-
- 5.1 I/O 一致性
- 5.2 客户设备
-
- 5.2.1 地址大小
- 5.2.2 缓存
- 5.3 PCIe 考虑
-
- 5.3.1 点对点 (P2P)
- 5.3.2 No_snoop
- 5.3.3 ATS
- 5.4 StreamID 分配
- 5.5 MSI
- 6. SMMU 使用案例
-
- 6.1 第一阶段使用案例
-
- 6.1.1 分散-集中 (Scatter-gather)
- 6.1.2 64 位 OS 中的 32 位设备
- 6.1.3 OS 设备隔离
- 6.1.4 用户空间设备驱动程序
- 6.1.5 用户空间共享虚拟地址 (SVA)
- 6.2 第二阶段使用案例
-
- 6.2.1 VM 设备分配
- 6.2.2 带有客户 OS SMMU 使用的 VM 设备分配
- 6.2.3 媒体保护
- 6.2.4 主机隔离
- 7. 相关信息
Learn the Architecture - SMMU Software Guide
1. 概述
本指南描述了 Arm 系统内存管理单元版本 3 (SMMUv3) 的基本操作和使用案例。内容包括:
- SMMU 架构概念、术语和操作
- 与 SMMU 功能相关的系统级考虑
- 典型 SMMU 使用案例的知识
1.1 开始之前
本指南是对 Arm 系统内存管理单元架构规范版本 3 的补充,而非替代品。有关寄存器、数据结构和行为的详细描述,请参阅该规范。
本指南假设您熟悉 AArch64 虚拟内存系统架构 (VMSA)。如果您想了解 AArch64 VMSA,请参阅《学习架构 - AArch64
内存管理指南》和《学习架构 - AArch64 内存属性和特性指南》。
2. SMMU 的功能
SMMU 执行类似于 PE 中 MMU 的任务。它在系统 I/O 设备的 DMA 请求传递到系统互连之前转换地址。SMMU
仅为客户设备的事务提供转换服务,而不为到客户设备的事务提供服务。从系统或 PE 到客户设备的事务通过其他方式管理,例如 PE MMU。
SMMU 在系统中的角色示意图