[RFC PATCH 0/7] arm_mpam: Add L2 cache monitors

From: Jinjie Ruan

Date: Thu Oct 22 2026 - 04:49:22 EST


MPAM resource monitors hang off a partitionable resource in an MSC, not
off a particular cache level. resctrl only knows about the L3 scope, so
the L2 cache monitors that MPAM platforms implement are discovered by
the driver but never show up in resctrl.

An L2 MSC has the same CSU and MBWU counters as an L3 MSC; the cache
level comes from the ACPI MPAM table's cache locator. So this is mostly
a resctrl scope problem, not a hardware one.

Extend resctrl's monitor scope to L2: register the L2 occupancy and
bandwidth events against the L2 resource, pick the L2 classes for them,
and borrow a CSU/MBWU monitor for the duration of a read. With CDP the
two PARTIDs need separate accumulating monitors, so the borrowed-monitor
context becomes one monitor per PARTID.

Patches:

1-2 Generalise the per-domain read path, add l2c_occupancy and
mbm_core_bytes, update the documentation.

3 Split the borrowed-monitor context into data and code entries.

4 Do the CDP num_rmid halving for every mon_capable resource.

5-7 Pick the L2 classes, describe the events with the L2 resource,
add the read paths.

Tested on QEMU with an L2/L3/memory-controller MSC topology. The L2_MON
files show up and are readable; l2c_occupancy reports the modelled
occupancy, and mbm_core_bytes reports the modelled bandwidth.

QEMU branch: https://github.com/ruanjinjie-eng/qemu/tree/mpam
Test cases: https://github.com/ruanjinjie-eng/mpam_testcase

Jinjie Ruan (7):
fs/resctrl: Generalize __l3_mon_event_count for non-L3 resources
fs/resctrl: Add the L2 monitor events
arm_mpam: resctrl: Split monitor context for code/data
arm_mpam: resctrl: Halve num_rmid for every mon_capable resource on
CDP
arm_mpam: resctrl: Describe the L2 monitor events with the L2 resource
arm_mpam: resctrl: Pick L2 classes for the L2 monitor events
arm_mpam: resctrl: Add the L2 monitor read paths

Documentation/arch/arm64/mpam.rst | 23 +--
drivers/resctrl/mpam_resctrl.c | 236 +++++++++++++++++++++++-------
fs/resctrl/monitor.c | 15 +-
include/linux/resctrl_types.h | 13 +-
4 files changed, 222 insertions(+), 65 deletions(-)

--
2.43.0