SMMU软件指南之系统架构考虑

安全之安全(security²)博客目录导读

目录

5.1 I/O 一致性

5.2 客户端设备

5.2.1 地址大小

5.2.2 缓存

5.3 PCIe 注意事项

5.3.1 点对点通信

5.3.2 No_snoop

5.3.3 ATS

5.4 StreamID 分配

5.5 MSI


本博客介绍与 SMMU 相关的一些系统架构注意事项。

5.1 I/O 一致性

如果一个设备的事务窥探(snoop)PE cache以寻找内存的可缓存区域,那么它与PE cache的I/O是一致的。这可以通过避免缓存维护操作(Cache Maintenance Operation, CMO)来提高性能。设备无需访问外部内存,而 PE 也不会嗅探设备cache。

如果设备与 PE cache保持 I/O 一致性,则不需要对与设备共享的内存进行 CMO。此内存在 CPU 上映射为Inner Write-Back (iWB), Outer Write-back (oWB), and Inner shareable (ISH)。如果设备与 PE 缓存不保持 I/O 一致性,则需要对映射为 iWB-oWB-ISH 的共享内存进行 CMO。

以下类型的 SMMU 访问可以是 I/O 一致的:

SMMU 发起的事务
        ◦ 翻译表遍历
        ◦ 获取 L1STD、STE、L1CD 和 CD
        ◦ 命令队列、事件队列和 PRI 队列访问
        ◦ MSI 中断写入
设备发起的事务
        ◦ 如果SMMU与系统的接口支持I/O一致性,则可以使简单的非一致性设备实现I/O一致性。SMMU 可以重写来自客户端设备的事务的可缓存性和共享性属性,使得输出到互连中的事务能够嗅探 PE 缓存。

SMMU 是否支持发出一致访问由 SMMU_IDR0.COHACC 指示。

【注意】Arm 基础系统架构要求翻译表和配置结构访问支持 I/O 一致性。

为了支持 I/O 一致性访问,SMMU 需要提供正确一致性保证的互连端口。例如,AMBA 互连中的 ACE-Lite 端口可以支持 I/O 一致性访问。

5.2 客户端设备

本节描述了客户端设备的一些要求,包括:
• 地址大小
• 缓存
• 对 PCIe 设备或根端口的要求
• StreamID 分配
• 消息信号中断(Message Signalled Interrupts

5.2.1 地址大小

SMMU 的架构输入地址大小为 64 位。如果发生以下任一情况:
• 客户端设备输出的地址小于 64 位。
• 客户端设备与 SMMU 输入之间的互连支持的地址小于 64 位。

则较小的地址会以系统特定的方式转换为 64 位的 SMMU 输入地址。SMMU 会对扩展后的 64 位地址执行输入范围检查:
• N 被定义为 VA(虚拟地址)区域的大小,由 CD.T0SZ 或 CD.T1SZ 控制,例如 40 位。
• 如果使用了高字节忽略(Top Byte Ignore),即 CD.TBI0 或 CD.TBI1,则 VA[55:N-1] 的所有位都相同。
• 如果未使用高字节忽略,则 VA[63:N-1] 的所有位都相同。

5.2.2 缓存

连接在 SMMU 后面的设备不能包含与系统其余部分完全一致的缓存,因为嗅探(snoop)与物理缓存行有关,而 SMMU 无法从物理地址(PA)反向转换为虚拟地址(VA)这些设备可能包含不支持硬件一致性的缓存,此类缓存必须通过软件维护。

然而,包含通过 SMMU 使用 ATS(地址转换服务)填充的 TLB 的客户端设备可以保持完全一致的物理地址缓存,利用 TLB 将内部地址转换为物理地址后再进行缓存访问。SMMU 上游的任何物理地址缓存都必须保持一致性。例如,使用 ATS 来转换虚拟地址和一致性物理地址缓存的 CXL.cache 或 CCIX 客户端设备。

5.3 PCIe 注意事项

在与 PCIe 子系统配合使用时,SMMU 实现必须支持至少完整的 16 位 PCIe 请求者 ID 范围。系统必须确保根端口以一对一或线性方式将 PCI 请求者 ID 生成 StreamID,以便满足 StreamID[15:0] == RequesterID[15:0] 的关系。可以通过串联来自多个 PCI 域(或“段”)的请求者 ID 来构建更大的 StreamID,例如:
• StreamID[17:0] == { pci_rp_id[1:0], pci_bus[7:0], pci_dev[4:0], pci_fn[2:0] },即 StreamID[17:0] == { pci_domain[1:0], RequesterID[15:0] };

在支持 PASID 的 PCIe 系统中,系统必须确保根端口以一对一方式从 PCI PASID 生成子流 ID(SubstreamID)。建议 SMMU 支持与客户端根端口相同或更少的 PASID 位数,以便软件能够通过 SMMU 检测端到端的子流 ID 功能。这是因为软件可以查看 SMMU_IDR1.SSIDSIZE 寄存器字段来了解有多少位的 PASID 可用。如果根端口支持的位数少于 SMMU_IDR1.SSIDSIZE,则需要在其他地方提供此信息,例如固件表。

Arm 基础系统架构要求如果系统支持 PCIe PASID,则至少支持 16 位 PASID。该支持必须是从根端口到需要 PASID 支持的 SMMU 的完整系统支持。

属于 PCIe 终端设备的流不应被阻塞(stall)。终止(terminate)模型是唯一可行的选择。阻塞 PCIe 事务可能会导致来自 PCIe 终端设备的超时(恢复可能较难),或在某些场景中导致死锁。系统允许出于安全原因实施终止模型。例如,LTI 协议包括 LAFLOW 信号,AXI/ACE-Lite 问题 H 包括 AxMMUFLOW 信号,DTI 协议包括 DTI_TBU_TRANS_REQ.FLOW。所有这些信号和消息均支持 NoStall 模式,可以实施终止模型。如果发生转换错误,即使 SMMU 已为此转换上下文启用了 Stall Faulting,也会在不依赖于 SMMU 软件配置的情况下返回错误响应。

特别地,PCIe 流量不应等待任何 PE 操作,包括清空事件队列或重新启动被阻塞的事务。PCIe通信必须始终向前推进,而不受软件的无限延迟的影响。

5.3.1 点对点通信

PCIe 点对点(P2P)通信允许两个 PCIe 设备在彼此之间直接传输数据,而无需使用主机内存作为临时存储。是否支持通过系统的 P2P 流量取决于系统的具体情况。在支持 PCIe 层级进行 P2P 通信而无需经过 SMMU 的系统中,SMMU 无法隔离 PCIe 设备。为了解决此问题,PCIe 规范包含对 PCIe 访问控制服务(Access Control Services, ACS)的支持

• 使用 ACS 时,当交换机端口看到对对等交换机端口的请求时,它将 P2P 请求上行传输至根端口进行请求验证,以检查事务是否被允许以对等设备为完成者。
• 根端口决定是否可以将此请求转发至其预期目标设备。
• PCIe 规范指示,此决定借助重定向请求验证逻辑做出。
• SMMU 是唯一可以实施此隔离的代理,因此其扮演了重定向请求验证逻辑的角色。
• 如果 P2P 请求在 SMMU 查找中导致错误响应,则其为 ACS 违规错误。这可能由以下原因之一引起:
        ◦ 请求没有访问目标位置的必要权限。
        ◦ 请求的 VA 没有与请求设备上下文的转换表结构中存在的有效 VA 到 IPA 或 VA 到 PA 转换。
        ◦ 存在配置错误或某些暂时性错误。

5.3.2 No_snoop

PCIe 事务包含一个 No_snoop 属性。如果 PCIe 事务中设置了 No_snoop 属性,则表示允许该事务“退出”硬件缓存一致性。软件缓存一致性确保该访问不会命中缓存,从而允许 I/O 访问避免嗅探缓存。与该事务关联的内存属性必须被替换为 Normal-iNC-oNC-OSH。
No_snoop 的支持取决于系统。如果实现了 No_snoop,则其会将最终访问属性从 Normal 可缓存类型转换为 SMMU 下游的 Normal-iNC-oNC-OSH。

5.3.3 ATS

PCIe 功能可能会认为在地址转换缓存(ATC)中缓存转换是有益的。功能或软件可以考虑以下情况:
在较长时间内频繁访问的内存地址范围,或相关的缓冲区内容具有较高的更新速率。
• 例如,以下内存地址范围:
        ◦ 工作和完成队列结构
        ◦ 低延迟通信的数据缓冲区
        ◦ 图形帧缓冲区
        ◦ 用于缓存特定功能内容的主机内存

5.4 StreamID 分配

系统设计人员为请求方分配一个唯一的 StreamID 以输入 SMMU。StreamID 命名空间是每个 SMMU 单独的,因此 StreamID 必须在每个 SMMU 内唯一。
在具有 RME DA 扩展的 SMMU 的机密计算架构(CCA)系统中,设备接口可以在可信或非可信模式下操作:

  • 在非可信模式下操作时,SEC_SID = 非安全(Non-secure)
  • 在可信模式下操作时,SEC_SID = 领域(Realm)

在这两种模式下,提供给 SMMU 的 StreamID 是相同的。例如,请求者 ID 为 0x100 的 PCIe 设备将以 StreamID 0x100 输入到 SMMU,但由于设备配置的更改,SEC_SID 可能会改变。
【注意】:在 Linux 中,SMMUv3 驱动程序不支持多个设备在相同 SMMU 下使用相同的 StreamID。
有关 PCIe 设备 StreamID 生成,请参见 PCIe 注意事项。

由于与物理设备关联的 StreamID 是系统特定的,系统软件通过固件描述将 StreamID 提供给操作系统。ACPI 表和设备树均可将 StreamID 呈现给每个设备的操作系统。

5.5 MSI

在 Arm GICv3 架构中,GIC 中断翻译服务(Interrupt Translation Service,ITS)隔离了 MSIs。参见《区域特定外设中断(LPls) Arm 通用中断控制器 v3 和 v4》。

ITS 接收包含 EventID 和 DeviceID 输入的 MSI 写入信息,并使用这些信息选择正确的 PE 或虚拟 PE 和 IRQ 号以触发中断。

ITS 需要 DeviceID 输入来隔离中断源。Arm 基础系统架构提供了如何从 StreamID 生成 DeviceID 的规则,该 StreamID 通过 SMMU 传递。最简单的方法来实现相同粒度的中断源的区分和
SMMU DMA区分是从设备的SMMU StreamID生成设备的DeviceID。
这种关系越简单,对高级软件和固件系统描述越有利。DeviceID 可以一对一地或通过简单线性偏移从 StreamID 派生。

ITS 寄存器映射提供一个包含一个 MSI 目标寄存器的页面。此页面可以通过 SMMU 安全地暴露给设备,例如:

  • 当设备分配给用户空间驱动程序时,该页面可以通过一级转换映射到设备,以便用户空间驱动程序用 VA 目标编程 MSIs。
  • 当设备分配给虚拟机(VM)时,该页面可以通过二级转换映射到设备,使得guest操作系统使用 IPA 目标编程 MSIs。

在非 CCA 系统中,设备总是以 SEC_SID = 非安全(Non-secure)的方式向 SMMU 提供 MSIs。
在具有 RME DA 扩展的 CCA 系统中,兼容 TEE 设备接口安全协议(TDISP)的设备可以以两种方式发送 MSIs

  • 如果通过配置空间的 MSI 功能配置 MSI,则它以 T = 0 发送到主 SoC,并因此以 SEC_SID = 非安全的方式呈现给 SMMU。
  • 如果通过设备接口的受保护 MMIO 区域中的 MSI-X 功能配置 MSI,则它以 T = 1 发送到主 SoC,并因此以 SEC_SID = 领域的方式呈现给 SMMU。

来自单个设备接口的 MSIs 不论使用哪种 MSI 机制,都会以相同的 DeviceID 呈现给 GIC ITS 接口。MSI 的目标 PA 空间由转换表中的配置决定

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

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

相关文章

mysql自定义安装

1、下载安装包 我是在windows上安装,所以选择“Mysql Installer for Windows” 2、安装mysql 双击“mysql-installer-community-8.0.40.0.msi”,开始启动安装 这里选择安装项,这里只选择了两项。workbench是图形化管理工具,比较吃…

Python、R用深度学习神经网络组合预测优化能源消费总量时间序列预测及ARIMA、xgboost对比...

全文链接:https://tecdat.cn/?p38726 分析师:Qingxia Wang 在能源领域,精准预测能源消费总量对制定合理能源战略至关重要。当前,能源消费预测分析主要运用单一模型(如灰色预测法、时间序列分析法等)和组合…

AI周报(12.29-1.4)

AI应用-微软BiomedParse一键解析九大成像模式 BiomedParse是一款由微软和华盛顿大学等机构联合开发的生物医学图像解析模型,能够一键解析九大生物医学成像模式。该模型通过文本驱动的方式,整合了包括MRI、CT、病理学等多种成像模式,实现了高…

电商Google广告:2025年提升转化率的5种策略

展望 2025 年,Google 广告领域将迎来一系列显著变化,这些趋势对于提升广告转化率至关重要,值得我们提前关注与布局。 智能化程度持续加深,用户搜索习惯愈发精细,广告格式推陈出新,视频广告势头正猛...那么…

一文讲清楚HTTP常见的请求头和应用

文章目录 一文讲清楚HTTP常见的请求头和应用1. 啥是个HTTP请求头2. 常见的请求头,作用和示例3.协商缓存4.会话状态 一文讲清楚HTTP常见的请求头和应用 1. 啥是个HTTP请求头 一句话,说白了就是限定HTTP传输的一些规则参数,比如Accept&#xf…

Arduino 小白的 DIY 空气质量检测仪(5)- OLED显示模块、按钮模块

最终章 这一章把剩下的OLED显示模块、按钮模块分享一下&#xff0c;当前这个离线无存储的版本&#xff0c;基本告一段落。 如果后续能进化成&#x1f236;存储、联网版本&#xff0c;就再开一个小系列分享一下。 逐个分析 display.h #include <Arduino.h> #include &l…

WandB使用笔记

最近看代码&#xff0c;发现代码中有wandb有关的内容&#xff0c;搜索了一下发现是一个模型训练工具&#xff0c;然后学习了一下&#xff0c;这里记录一下使用过程&#xff0c;方便以后查阅。 WandB使用笔记 登录WandB 并 创建团队安装 WandB 并 登录模型训练过程跟踪模型版本管…

一文理解ssh,ssl协议以及应用

在使用基于密钥的认证方式的时候&#xff0c;私钥的位置一定要符合远程服务器规定的位置&#xff0c;否则找不到私钥的位置会导致建立ssh连接失败 SSH 全称是 “Secure Shell”&#xff0c;即安全外壳协议。 它是一种网络协议&#xff0c;用于在不安全的网络中安全地进行远程登…

Elasticsearch 创建索引 Mapping映射属性 索引库操作 增删改查

Mapping Type映射属性 mapping是对索引库中文档的约束&#xff0c;有以下类型。 text&#xff1a;用于分析和全文搜索&#xff0c;通常适用于长文本字段。keyword&#xff1a;用于精确匹配&#xff0c;不会进行分析&#xff0c;适用于标签、ID 等精确匹配场景。integer、long…

【Ubuntu】 Ubuntu22.04搭建NFS服务

安装NFS服务端 sudo apt install nfs-kernel-server 安装NFS客户端 sudo apt install nfs-common 配置/etc/exports sudo vim /etc/exports 第一个字段&#xff1a;/home/lm/code/nfswork共享的目录 第二个字段&#xff1a;指定哪些用户可以访问 ​ * 表示所有用户都可以访…

【谷歌开发者月刊】十二月精彩资讯回顾,探索科技新可能

我们在今年的尾声中回顾本月精彩&#xff0c;开发者们借助创新技术为用户打造温暖的应用体验&#xff0c;展现技术与实用的结合。欢迎您查阅本期月刊&#xff0c;掌握最新动态。 本月看点 精彩看点多多&#xff0c;请上下滑动阅览 01DevFest 北京站和上海站圆满举办&#xff0c…

浙江中医药大学携手云轴科技ZStack荣获“鼎信杯”金鼎实践奖

近日&#xff0c;2024“鼎信杯”信息技术发展论坛&#xff08;以下简称“论坛”&#xff09;在北京隆重召开。本次论坛汇聚多位领导和专家&#xff0c;以及业内骨干企业、研究机构、用户单位、行业组织代表等500余人&#xff0c;共同探讨信息技术应用创新产业趋势&#xff0c;分…

嵌入式linux系统中CMake的基本用法

第一:CMake的基本使用 在上篇文章中,我们聊了聊 Makefile。虽然它是 C/C++ 项目编译的“老司机”,但写起来真的是让人头大。尤其是当项目文件一多,手写依赖就像在搬砖,费时又费力。 那么问题来了,难道我们就没有更优雅的工具了吗?答案是:有! 这时候,CMake 就像一个…

vulnhub Earth靶机

搭建靶机直接拖进来就行 1.扫描靶机IP arp-scan -l 2.信息收集 nmap -sS -A -T4 192.168.47.132 得到两个DNS; 在443端口处会让我们加https dirb https://earth.local/ dirb https://terratest.earth.local/ #页面下有三行数值 37090b59030f11060b0a1b4e0000000000004312170a…

【AI日记】25.01.04 kaggle 比赛 3-3 | 王慧玲与基层女性

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】 工作 参加&#xff1a;kaggle 比赛 Forecasting Sticker Sales时间&#xff1a;6 小时 读书 书名&#xff1a;基层女性时间&#xff1a;3 小时原因&#xff1a;虽然我之前就知道这个作者&#xff0c;因为我…

《learn_the_architecture_-_aarch64_exception_model》学习笔记

1.当发生异常时&#xff0c;异常级别可以增加或保持不变&#xff0c;永远无法通过异常来转移到较低的权限级别。从异常返回时&#xff0c;异常级别可能会降低或保持不变&#xff0c;永远无法通过从异常返回来移动到更高的权限级别。EL0级不进行异常处理&#xff0c;异常必须在比…

linux上安装MySQL教程

1.准备好MySQL压缩包&#xff0c;并进行解压 tar -xvf mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar -C /usr/local 2.检查是否有mariadb数据库 rpm -aq|grep mariadb 关于mariadb:是MySQL的一个分支&#xff0c;主要由开源社区在维护&#xff0c;采用GPL授权许可 MariaDB的目…

量子力学复习

黑体辐射 热辐射 绝对黑体&#xff1a; &#xff08;辐射能力很强&#xff0c;完全的吸收体&#xff0c;理想的发射体&#xff09; 辐射实验规律&#xff1a; 温度越高&#xff0c;能量越大&#xff0c;亮度越亮 温度越高&#xff0c;波长越短 光电效应 实验装置&#xf…

OSI模型的网络层中产生拥塞的主要原因?

&#xff08; 1 &#xff09;缓冲区容量有限&#xff1b;&#xff08; 1.5 分&#xff09; &#xff08; 2 &#xff09;传输线路的带宽有限&#xff1b;&#xff08; 1.5 分&#xff09; &#xff08; 3 &#xff09;网络结点的处理能力有限&#xff1b;&#xff08; 1 分…

Spring Boot 的自动配置,以rabbitmq为例,请详细说明

Spring Boot 的自动配置特性能够大大简化集成外部服务和组件的配置过程。以 RabbitMQ 为例&#xff0c;Spring Boot 通过 spring-boot-starter-amqp 提供了自动配置支持&#xff0c;开发者只需在应用中添加相关依赖并配置必要的属性&#xff0c;Spring Boot 会自动配置所需的连…