Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Chapter 9: 内存分区和监控

本章描述了内存分区和监控(MPAM)在 GICv3 架构中的应用。包含以下部分:

  • 概述

  • MPAM 和 Redistributor

  • MPAM 和 ITS

  • GIC 对 MPAM 的使用

  • GICv4.1 数据结构和 MPAM

9.1 概述

GIC 可选择支持 MPAM。此支持仅限于为软件提供控制,以设置 GIC 访问内存时使用的分区 ID(PARTID)。PARTID 是一个 MPAM ID,指示在内存系统组件中使用哪个内存系统性能资源分区。

当 GICD_CTLR.DS == 0 时,GIC 使用的所有 PARTID 都是 Non-secure MPAM ID,并且以 MPAM_NS 指示符为 true 进行通信。

当 GICD_CTLR.DS == 1 时,PARTID 是 Non-secure 还是 Secure MPAM ID 是 IMPLEMENTATION DEFINED。

Arm 建议在支持 MPAM 的系统中,软件能够控制 GIC 访问数据结构和内存中的结构时使用的 PARTID。

有关这些结构的更多详细信息,请参见以下部分:

  • LPI 配置表

  • LPI 待处理表

  • 虚拟 LPI 配置表和虚拟 LPI 待处理表

  • 设备表

  • 中断转换表

  • 集合表

  • vPE 表

  • ITS 命令接口

9.2 MPAM 和 Redistributor

GICR_TYPER.MPAM 报告对 MPAM 的支持,属于同一个 IRI 的所有 Redistributor 报告相同的 GICR_TYPER.MPAM 值。

GICR_MPAMIDR 报告支持的 PMG 和 PARTID 大小。

GICR_PARTIDR 控制 Redistributor 使用的 PARTID 和 PMG。

向 GICR_PARTIDR.PARTID 写入超出范围的值会导致 CONSTRAINED UNPREDICTABLE 行为,结果是:

  • 使用默认的 PARTID 和 PMG 值,并在读取时返回。

  • 使用 UNKNOWN 的有效值,并在读取时返回。

向 GICR_PARTIDR.PMG 写入超出范围的值会导致 CONSTRAINED UPREDICTABLE 行为,结果是:

  • 使用默认的 PMG 值,并在读取时返回。

  • 使用 UNKNOWN 的有效值,并在读取时返回。

对 GICR_PARTIDR 的写入仅保证在下次将 GICR_CTLR.Enable_LPIs 从 0 写入 1 时生效。实现必须确保使用旧值或新值,而不会在任何时候使用部分更新的值。

注意

Arm 强烈建议软件在 GICR_CTLR.Enable_LPIs == 1 时不要写入 GICR_PARTIDR,因为更改生效的时间不确定。

对于需要共享 LPI 配置表的 Redistributor,GICR_PARTIDR 是否访问公共状态是 IMPLEMENTATION DEFINED。GICR_TYPER.CommonLPIAff 指示哪些 Redistributor 需要共享 LPI 配置表。

当 GICR_TYPER.MPAM == 1 时,Redistributor 对以下数据结构的所有访问都使用 GICR_PARTIDR 中指定的 PARTID 和 PMG 值:

  • LPI 待处理表。

  • LPI 配置表。

  • 虚拟 LPI 待处理表。

  • 虚拟 LPI 配置表。

9.3 MPAM 和 ITS

GITS_TYPER.MPAM 报告对 MPAM 的支持,属于同一个 IRI 的所有 ITS 报告相同的 GITS_TYPER.MPAM 值。

GITS_MPAMIDR 报告支持的 PMG 和 PARTID 大小。

GITS_PARTIDR 控制 ITS 使用的 PARTID 和 PMG。

向 GITS_PARTIDR.PARTID 写入超出范围的值会导致 CONSTRAINED UNPREDICTABLE 行为,结果是:

  • 使用默认的 PARTID 和 PMG 值,并在读取时返回。

  • 使用 UNKNOWN 的有效值,并在读取时返回。

向 GITS_PARTIDR.PMG 写入超出范围的值会导致 CONSTRAINED UPREDICTABLE 行为,结果是:

  • 使用默认的 PMG 值,并在读取时返回。

  • 使用 UNKNOWN 的有效值,并在读取时返回。

对 GITS_PARTIDR 的写入仅保证在下次将 GITS_CTLR.Enable 从 0 写入 1 时生效。实现必须确保使用旧值或新值,而不会在任何时候使用部分更新的值。

注意

Arm 强烈建议软件在 GITS_CTLR.Enable == 1 时不要写入 GITS_PARTIDR,因为更改生效的时间不确定。

当 GITS_TYPER.MPAM == 1 时,Redistributor 对以下数据结构的所有访问都使用 GITS_PARTIDR 中指定的 PARTID 和 PMG 值:

  • 设备表。

  • 中断转换表。

  • 集合表。

  • 虚拟 PE 表。

  • 命令队列。

9.4 GIC 对 MPAM 的使用

此扩展仅限于为软件提供机制来指定 GIC 访问内存时使用的 PARTID。

使用 PARTID 内部分区资源或监控性能的任何支持都是 IMPLEMENTATION DEFINED。

当实现提供此类支持时,Arm 期望它按照 Arm[®] Architecture Reference Manual Supplement, Memory System Resource Partitioning and Monitoring (MPAM), for Armv8-A 中描述的方式进行。

9.5 GICv4.1 数据结构和 MPAM

当支持 MPAM 且 GITS_TYPER.SVPET==0 时,对 vPE 配置表的访问使用来自 GICR_PARTIDR 的 PARTID 和 PMG 值。

当支持 MPAM 且 GITS_TYPER.SVPET!=0 时,对 vPE 配置表的访问使用来自以下的 PARTID 和 PMG 值:

表 9-1 GICv4.1 中的 PARTID 使用 |—|—|—| | GICR_VPROPBASER.Valid | GITS_CTLR.Enabled | MPAM 信息来自: | | x | 1 | GITS_PARTIDR | | 0 | 1 | GITS_PARTIDR | | 1 | 1 | GICR_PARTIDR 或 GITS_PARTIDR | | 1 | 0 | GICR_PARTIDR |

当 vPE 配置表在 Redistributor 和 ITS 之间共享时,可以使用 Redistributor 或 ITS 的 PARTID 和 PMG 值来访问表,这可能因访问原因而异。