MPAM

什么是 MPAM

MPAM(内存分区与监控)是 CPU 和内存系统组件(例如缓存或内存控制器)中的一项功能,允许对内存流量进行标记、分区和监控。

流量由 CPU 根据当前任务在使用 resctrl 时被分配到的控制或监控组进行标记。分区策略可以使用 resctrl 中的模式(schemata)文件进行设置,监控值则通过 resctrl 读取。更多详细信息,请参阅 资源控制功能用户界面 (resctrl)

这允许共享内存系统资源(如缓存)的任务根据分区策略相互隔离(即所谓的“嘈杂邻居”问题)。

支持的平台

使用此功能需要 CPU 支持、内存系统组件支持,以及固件提供有关 MPAM 设备控制在 MMIO 地址空间中位置的描述(例如,“MPAM” ACPI 表)。

为内存系统组件提供 MPAM 控制/监控的 MMIO 设备被称为内存系统组件 (MSC)。

由于 MPAM 的用户界面是通过 resctrl 提供的,因此只有与 resctrl 兼容的 MPAM 功能才能暴露给用户空间。

MSC 基于拓扑结构被视为一个组。对应于 L3 缓存的 MSC 会被归为一组,不可能将 L2 和 L3 之间的 MSC 混合起来以“覆盖”一个 resctrl 模式。

支持的功能包括

  • L2 或 L3 缓存上的缓存部分位图控制 (CPOR)。要在 L2 或 L3 上暴露 CPOR,每个 CPU 在该级别必须拥有一个同样支持此功能的对应 CPU 缓存。不支持不匹配的大小核平台,因为此时 resctrl 的控制将取决于任务位置。

  • L3 缓存上或之后的内存带宽最大控制 (MBW_MAX)。resctrl 使用 L3 cache-id 来标识内存带宽控制的应用位置。因此,平台必须具备由固件提供 cache-id 的 L3 缓存。(它不需要支持 MPAM。)

    要作为“MB”模式导出,所选 MSC 组的拓扑结构必须与 L3 缓存的拓扑结构匹配,以便能够重新映射 cache-id。例如:在无 CPU 的 NUMA 节点上具有内存带宽最大控制的平台无法向 resctrl 暴露“MB”模式,因为这些节点没有对应的 L3 缓存。如果内存带宽控制位于内存而不是 L3 上,则必须存在一个全局唯一的 L3,否则无法得知流量来自哪个 L3。L3 和内存之间不能有缓存,以便路径的两端具有等效的流量。

    当 MPAM 驱动程序发现多个可用于“MB”模式的 MSC 组时,它会优先选择最靠近 L3 缓存的组。

  • 只要构成 L3 组的每个 MSC 上至少有一个 CSU 监控器,缓存存储使用量 (CSU) 计数器就可以暴露“llc_occupancy”。不支持从其他缓存或设备暴露 CSU 计数器。

报告错误

如果您没有看到预期的计数器或控件,请分享在启用动态调试并使用以下参数启动时产生的调试消息:dyndbg=”file mpam_resctrl.c +pl”