分享

MPAM 简介

 新用户0118F7lQ 2023-10-21 发布于广东
1、概述

本文介绍了 Memory System Resource Partitioning and Monitoring(MPAM),这是 Arm 架构的一个 optional addition 部分,用于支持内存系统分区。MPAM 在 Arm 架构参考手册的 Memory System Resource Partitioning and Monitoring(MPAM)A-profile 体系结构补充中有详细文档。

2、背景

今天的许多计算需求都由共享内存计算系统满足,其中多个应用程序或多个虚拟机(VM)同时运行。共享内存计算系统使应用程序或多个虚拟机能够同时共享内存资源。共享内存资源可以降低设计成本和设计占地面积,提高性能,并大大减少冗余数据复制。

在理想情况下,每个共享应用程序或虚拟机应该在系统内均匀或按比例利用共享资源。通过这样做,系统内固有的公平性水平可以确保应用程序或虚拟机不会不成比例地利用系统资源。否则,这可能会影响相邻的共享应用程序或虚拟机的带宽和性能。然而,在现实世界中,每个应用程序或虚拟机都会竞争资源,相互干扰。

内存系统资源分区和使用监控(MPAM)通过提供内存资源分区和相关的监控功能来帮助减轻这种效应。本指南将介绍 MPAM,其概念、用例和术语。---- MPAM 是一种可选扩展,主要是解决共享资源 (共享内存) 竞争的问题。

3、MPAM 扩展

Arm Memory System Resource Partitioning and Monitoring (MPAM) Extension

共享内存计算系统的许多方面本质上是作为操作系统或虚拟机监控程序的基本操作的一部分进行管理的。例如,调度程序执行 CPU 时间管理,而内存分配器管理内存分配。

内存系统资源分区和监控(MPAM)扩展了软件协同管理内存系统组件的运行时资源分配的能力,例如缓存、互连和内存控制器。这些资源在其他情况下不会以这种细粒度受软件控制。

这种资源控制需要运行时反应和持续跟踪。这些要求是因为来自不同处理单元(PE)、安全状态和异常级别的请求可能在运行不同的虚拟机或应用程序。

MPAM 通过使操作系统或虚拟机监控程序等监控软件为每个虚拟机或应用程序分配唯一的分区标识符(unique partition identifier)来实现这一目标。这些唯一分配的分区标识符在内存系统中贯穿它们的整个生命周期。内存系统组件使用分区标识符来配置资源的分配给特定的虚拟机或应用程序。

MPAM 具有两个功能:内存系统资源分区和内存系统资源使用监控。这些功能为软件提供了控制和监控资源分配在虚拟机或应用程序之间如何分配的能力。然后,软件可以提供适当的响应级别、公平性或有目的的不公平性。

3.1 内存系统资源分区

计算机系统上运行的程序的性能可以受到内存系统性能的影响。内存系统性能可以受到内存系统内部的多个共享资源的影响,这些资源包括缓存、互连和内存控制器。在由多个虚拟机(VM)、操作系统(OS)和应用程序共享的内存系统中,每个软件环境可用的资源可能会有所不同,这取决于其他同时运行的程序。这是因为其他程序可能会消耗不受控制的内存系统资源的更多或更少。

内存系统资源分区(Memory-system resource partitioning)提供了对以前不受控制的内存系统资源的限制和使用的控制。

内存系统资源分区的一个示例是对缓存进行分区,从而将来自特定 VM、OS 或应用程序的分配限制为总缓存资源的子集。

3.2 内存系统资源使用监控

内存系统资源使用监控器测量资源使用水平或积累资源使用事件,具体取决于资源类型。以下是一些软件如何利用内存系统资源使用监控的示例:

· 动态利用内存系统资源使用监控收集的数据,影响特定 VM、OS 或应用程序的内存系统资源分区水平。
· 记录由内存系统资源使用监控器收集的数据,以供离线分析应用程序、VM 或系统。
· 静态利用由内存系统资源使用监控器收集的数据,确定适当的资源分区。
· 监控以检测异常行为,并对表现不佳的软件应用限制。

4、为什么使用 MPAM?

内存系统资源分区和使用监控可以减少内存系统干扰。本节描述了一些示例情景。

4.1 独立软件共享内存系统

随着处理器速度的提高,通常将以前由两个或多个系统执行的功能集成到单一计算机系统中成本更低。如果这些以前分开的系统中的任何一个是实时或对性能敏感的,那么可能需要将该功能的性能与集成系统中的其他功能隔离开来。

内存系统性能可以进行监视,测量的使用情况可以指导系统分区的优化。

分区通常由系统开发人员静态确定。分区可以被赋予非共享资源分配,以减少由共享资源干扰引起的不确定性。所需的分区数量可能较少,类似于以前分开的系统的数量。

4.2 multi-tenant VM 服务器中的服务级别分配

MPAM 可以用于减少在共享租户虚拟机服务器上的 “嘈杂邻居” 效应,以便没有租户能够过度消耗资源。这允许软件控制的硬件强制实施机制,以实现公平性隔离。嘈杂邻居效应发生在应用程序或 VM 使用的可用资源超出了预期的情况下,通常会导致共享基础架构上的其他用户的性能问题。

当服务器运行多个不同用户的 VM 时,需要防止一个 VM 使用超出其服务级别协议(SLA)允许的资源。

MPAM 分区提供了一种调节 VM 使用的内存系统资源的手段。虽然只需要在服务器上预分配几个服务级别,但每个 VM 都需要一个单独的 PARTID,以便能够对该 VM 的资源需求进行独立响应。

4.3 前台和后台作业优化

当前台和后台作业在同一系统上运行时,前台作业的响应时间不应受到损害,后台作业的吞吐量应该得到优化。

前台和后台作业的性能可以进行监视,资源分配可以动态更改以跟踪系统负载,同时优化前台响应时间和后台吞吐量。

在 “Heracles: Improving Resource Efficiency at Scale” 中提出了这种方法的一个示例。该论文描述了一个只需要两个分区的系统,一个用于面向网络的应用程序,另一个用于尽力而为的应用程序。Heracles 方法测量了网络服务的尾延迟的服务级别目标,并调整两个分区之间资源的划分。资源使用监控还用于调整特定资源的资源分配。

5、MPAM 是如何工作的?

这一部分介绍了理解 MPAM 如何用于实施内存系统资源分区和内存系统资源使用监控所需的关键概念。

5.1 MPAM 请求者

MPAM 请求者是能够传输 MPAM 信息包的请求者。实现 FEAT_MPAM 的 Arm 处理器核心是 MPAM 请求者的一个示例,如 Cortex-A710。

5.2 MPAM 信息包

MPAM 依赖于一种将分区标识符附加到执行中的软件(如 VM、OS 或应用程序)的机制。MPAM 通过将 MPAM 信息包传播到所有下游内存系统组件(MSC)来实现这一点。MPAM 信息包包括分区 ID 空间、分区号(PARTID)和性能监视组(PMG)。分区 ID 空间和分区号一起用于在 MSC 内唯一标识 MPAM 资源分区。

图片

5.3 分区号(PARTID)

分区号(PARTID)引用分区 ID 空间内的特定分区。分区号的数值没有固有的含义。预计相关的 PARTID 空间管理器将为不同的 VM、OS 或应用程序分配唯一的分区号(PARTID)。PARTID 字段的最大宽度是 16 位,但 PE 实现可以支持小于最大宽度。例如,Cortex-A710 支持 6 位 PARTID。Arm 强烈建议系统中所有 PE 和 MSC 的 PARTID 大小相同。软件只能使用系统支持的最小 PARTID 大小。

5.4 分区 ID 空间

MPAM 支持多个分区 ID(PARTID)空间。MPAM 请求者的安全状态确定了在 MPAM 信息包中发送的分区 ID 空间。Arm 体系结构定义了两种安全状态:非安全状态和安全状态。当 PE 在安全状态下执行时,MPAM 信息包指示安全分区 ID(PARTID)空间(MPAM_NS == 0x0)。当 PE 在非安全状态下执行时,MPAM 信息包指示非安全分区 ID(PARTID)空间(MPAM_NS == 0x1)。

本指南不涵盖 FEAT_RME 及其对 MPAM 的影响。RME 系统的 MPAM 将在未来的指南中讨论。

5.5 性能监视组(PMG)

性能监视组(PMG)为 MPAM 资源使用监视器提供了额外的过滤器。PMG 扩展了 PARTID 监视能力,可以以两种方式使用:

· 监视器可以仅对 PMG 敏感,从而实现分组:它们监视和汇总与具有相同 PMG 值的所有 PARTID 相关的测量。
· 监视器可以同时对 PARTID 和 PMG 敏感,以实现更精细的监视。例如,两个 VM 可以被分配到 MSC 的同一分区,每个 VM 都被分配一个唯一的 PARTID 和唯一的 PMG。MPAM 资源使用监视器将允许监视每个 VM 对分配的分区的使用。

PMG 字段的最大宽度是 8 位,但 PE 实现可以支持小于最大宽度。例如,Cortex-A710 支持 1 位 PMG。

5.6 PARTID 空间管理器

PARTID 空间管理器是作为操作系统、虚拟机监控程序或安全监视器的一部分运行的软件子系统。PARTID 空间管理器的功能未由 MPAM 体系结构定义,但它是任何支持 MPAM 的软件栈的组成部分。预计 PARTID 空间管理器将负责为应用程序、VM 或 OS 分配唯一的分区号(PARTID)和 PMG。MPAM 体系结构支持多个分区 ID(PARTID)空间,这意味着在大多数情况下,不需要不同的 PARTID 空间管理器之间的协调。

5.7 内存系统组件(MSC)

MPAM 感知系统依赖于 MPAM 感知的内存系统组件(MSC)。MSC 处理由任何 MPAM 请求者发出的内存请求。MSC 可以具有可分区资源,包括但不限于以下内容:

· 缓存内存
· 互连
· 系统内存管理单元(SMMU)
· 内存控制器

PARTID 空间管理器配置 MSC 以分区其资源。MSC 内的可分区资源根据特定资源分区控制的编程进行分区。对于每个内存系统请求,MSC 使用 MPAM 信息包中提供的信息以及 MSC 的资源分区设置来确定特定 VM 或应用程序可以利用的可分区资源量。

图片

5.8 MPAM 资源使用监视器

MPAM 资源使用监视器可以为 PARTID 空间管理器提供可以由 MPAM 分区的资源类型的测量数据。每种监视器类型都测量特定 PARTID 的内存事务的使用情况,还可以选择测量 PMG 的使用情况。

5.8.1 内存带宽使用监视器

内存带宽使用监视器计数满足指定筛选条件的有效载荷字节。

5.8.2 缓存存储使用监视器

缓存存储使用监视器使用分区号(PARTID)、分区 ID 空间和 PMG 来筛选缓存存储使用情况。缓存存储使用寄存器报告了分配给 MPAM 资源分区的筛选的缓存中当前存在的存储量。

5.9 传播 MPAM 信息

MPAM 信息包需要通过内存系统从 MPAM 请求者传播到 MSC。通过内存系统的路径可以包括一个或多个 MSC。这些 MSC 将被称为中间 MSC 或终止 MSC。中间 MSC 必须将未更改的 MPAM 信息包传递给下游。终止 MSC 不会从请求中转发 MPAM 信息包。MPAM 感知系统需要支持在 MPAM 请求者和 MSC 之间传输 MPAM 信息包的互连。

图片

6、MPAM 使用模型

将 VMs 和应用程序分配给分区的责任由 PARTID 空间管理器负责。虚拟机监控程序的 PARTID 空间管理器分配 VMs 到分区,操作系统的 PARTID 空间管理器分配应用程序到分区。每个内存系统分区与 PE 上的软件环境相关联,通过加载相应的 MPAMn_ELx 寄存器与 PARTID_I 和 PARTID_D 一起完成。每个异常级别都有自己的 MPAMn_ELx 寄存器。这意味着在执行异常或从异常返回时,PE 会自动将相关的分区标识符附加到在该异常级别执行时进行的内存访问。

虚拟机监控程序和操作系统负责在切换 VMs 或应用程序时手动保存相关 MPAMn_ELx 寄存器的上下文。在对称多处理(SMP)环境中,一个 VM 或应用程序通常会同时在多个 PE 上运行。在这种情况下,我们预期分配给 VM 或应用程序的 MPAMn_ELx 寄存器中指定的唯一分区 ID 在运行软件的所有 PE 上是一致的。

图片

一旦发出带有 MPAM 信息包的内存系统请求,它将通过一个或多个 MSC 流经。MSC 将实现一个或多个分区控制接口,用于配置资源的分区。

6.1 内存系统资源的控制接口

MPAM 体系结构定义了内存系统资源的以下标准控制接口类型:

· 缓存部分分区。
· 缓存最大容量分区。
· 缓存最大关联度分区。
· 内存带宽部分分区。
· 内存带宽最小和最大分区。
· 内存带宽比例跨步分区。
· 优先级分区。

这些控制接口将在未来的 “了解架构 MPAM” 指南中详细讨论。

6.2 示例 MPAM 使用

当配置了具有 MPAM 的 PE 发出内存请求时,请求将附带 MPAM 信息包发送。
启用时,MPAM 信息包是由 PE 自动生成的,每个请求都使用当前的安全状态和当前异常级别的 MPAM 寄存器。例如,如果当前的异常级别是 EL0,那么将使用 MPAM0_EL1 寄存器。

MPAMn_ELx 寄存器是运行在 ELn 中的软件的上下文的一部分。因此,在 EL0 中运行的应用程序在 MPAM0_EL1 中具有其 MPAM 状态,该寄存器由操作系统在应用程序之间进行上下文切换时保存和恢复。

MPAM 信息包将由关联的 PARTID 空间管理器分配。可以预期 PARTID 空间管理器不是上下文切换过程的一部分。它的目的是在 OS 或虚拟机监控程序请求时,从 PARTID 空间中提供一个未使用的 PARTID。这可能是一个相当少见的情况,例如在启动新 VM 时。

在以下示例中,EL1 OS PARTID Space Manager 配置了与在非安全 EL0 上运行的当前调度的应用程序相关联的 MPAM 信息包:非安全 EL1 PARTID Space Manager:

MRS x0, xzr
ORR x0, x0, #(0x2<<16) // EL1 PARTID_D == 0x2
ORR x0, x0, #(0x7<<0) // EL1 PARTID_I == 0x6
MSR MPAM0_EL1, x0
ISB

在 EL0 执行时,任何内存访问都将使用上述配置的 MPAM 信息包发送。

  • MPAM_NS == 0x1

  • PARTID_D == 0x2 / PARTID_I == 0x7

  • PMG_I == 0x0 / PMG_D == 0x0

图片

在这里,系统显示了两个 MSC,一个系统缓存和一个内存控制器:

· 系统缓存使用 MPAM 定义的缓存最大容量分区控制接口,该接口允许 MPAM 管理器指定特定 MPAM 资源分区在缓存中可以分配的存储容量量。
· 内存控制器使用 MPAM 定义的内存带宽最小和最大分区控制接口,允许 MPAM 管理器指定可用于特定 MPAM 资源分区的带宽量。

6.3 虚拟 MPAM

如前所述,预计不同的 PARTID 空间管理器在分配 MPAM 资源分区时不会进行协调。为防止操作系统分配已由虚拟机监控程序分配的 MPAM 资源分区,虚拟机监控程序需要一些机制来虚拟化由 Guest OS 分配的 MPAM 资源分区。MPAM 处理此情况的方式是允许虚拟机监控程序通过模拟 MPAMIDR_EL1 寄存器告诉 VM 的操作系统,VM 具有一些可使用的 PARTID。这些少量 PARTID 由虚拟机监控程序的 PARTID 空间管理器预先分配,并存储在 MPAMVPMn_EL2 寄存器中,将虚拟 PARTID 映射到虚拟机监控程序预先分配的 “真实”(我们称之为 “物理”)PARTID。VM 的操作系统可以管理虚拟 PARTID 的使用,无需陷入虚拟机监控程序。如果没有 MPAMVPMn 虚拟 PARTID 映射寄存器,EL1 和 EL0 需要陷入 MPAM1_EL1 和 MPAM0_EL1 的所有访问。

来自 Guest OS 对所有 MSC 的配置寄存器和用于配置 PE MSC 的系统寄存器的访问可以由主机虚拟机监控程序进行模拟。这允许模拟虚拟 PARTID 映射并应用资源分区的虚拟机监控程序策略。为实现这一点,对 MSC 的 MPAM 内存映射寄存器的访问将使用第 2 级翻译进行陷阱,从而允许虚拟机监控程序陷阱和模拟 MSC 访问。

图片

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多