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”