Hi Reinette, On 7/25/25 13:29, Babu Moger wrote: > Introduce the resctrl file "mbm_assign_mode" to list the supported counter > assignment modes. > > The "mbm_event" counter assignment mode allows users to assign a hardware > counter to an RMID, event pair and monitor bandwidth usage as long as it is > assigned. The hardware continues to track the assigned counter until it is > explicitly unassigned by the user. Each event within a resctrl group can be > assigned independently in this mode. > > On AMD systems "mbm_event" mode is backed by the ABMC (Assignable > Bandwidth Monitoring Counters) hardware feature and is enabled by default. > > The "default" mode is the existing mode that works without the explicit > counter assignment, instead relying on dynamic counter assignment by > hardware that may result in hardware not dedicating a counter resulting > in monitoring data reads returning "Unavailable". > > Provide an interface to display the monitor modes on the system. > > $ cat /sys/fs/resctrl/info/L3_MON/mbm_assign_mode > [mbm_event] > default > > Add IS_ENABLED(CONFIG_RESCTRL_ASSIGN_FIXED) check to support Arm64. > > On x86, CONFIG_RESCTRL_ASSIGN_FIXED is not defined. On Arm64, it will be > defined when the "mbm_event" mode is supported. > > Add IS_ENABLED(CONFIG_RESCTRL_ASSIGN_FIXED) check early to ensure the user > interface remains compatible with upcoming Arm64 support. IS_ENABLED() > safely evaluates to 0 when the configuration is not defined. > > As a result, for MPAM, the display would be either: > [default] > or > [mbm_event] > > Signed-off-by: Babu Moger <babu.moger@xxxxxxx> > Reviewed-by: Reinette Chatre <reinette.chatre@xxxxxxxxx> > --- > v16: Update with Reviewed-by tag. > > v15: Minor text changes in changelog and resctrl.rst. > > v14: Changed the name of the monitor mode to mbm_cntr_evt_assign based on the discussion. > https://lore.kernel.org/lkml/7628cec8-5914-4895-8289-027e7821777e@xxxxxxx/ > Changed the name of the mbm_assign_mode's. > Updated resctrl.rst for mbm_event mode. > Changed subject line to fs/resctrl. > > v13: Updated the commit log with motivation for adding CONFIG_RESCTRL_ASSIGN_FIXED. > Added fflag RFTYPE_RES_CACHE for mbm_assign_mode file. > Updated user doc. Removed the references to "mbm_assign_control". > Resolved the conflicts with latest FS/ARCH code restructure. > > v12: Minor text update in change log and user documentation. > Added the check CONFIG_RESCTRL_ASSIGN_FIXED to take care of arm platforms. > This will be defined only in arm and not in x86. > > v11: Renamed rdtgroup_mbm_assign_mode_show() to resctrl_mbm_assign_mode_show(). > Removed few texts in resctrl.rst about AMD specific information. > Updated few texts. > > v10: Added few more text to user documentation clarify on the default mode. > > v9: Updated user documentation based on comments. > > v8: Commit message update. > > v7: Updated the descriptions/commit log in resctrl.rst to generic text. > Thanks to James and Reinette. > Rename mbm_mode to mbm_assign_mode. > Introduced mutex lock in rdtgroup_mbm_mode_show(). > > v6: Added documentation for mbm_cntr_assign and legacy mode. > Moved mbm_mode fflags initialization to static initialization. > > v5: Changed interface name to mbm_mode. > It will be always available even if ABMC feature is not supported. > Added description in resctrl.rst about ABMC mode. > Fixed display abmc and legacy consistantly. > > v4: Fixed the checks for legacy and abmc mode. Default it ABMC. > > v3: New patch to display ABMC capability. > --- > Documentation/filesystems/resctrl.rst | 31 ++++++++++++++++++++++ > fs/resctrl/rdtgroup.c | 37 +++++++++++++++++++++++++++ > 2 files changed, 68 insertions(+) > > diff --git a/Documentation/filesystems/resctrl.rst b/Documentation/filesystems/resctrl.rst > index c97fd77a107d..b692829fec5f 100644 > --- a/Documentation/filesystems/resctrl.rst > +++ b/Documentation/filesystems/resctrl.rst > @@ -257,6 +257,37 @@ with the following files: > # cat /sys/fs/resctrl/info/L3_MON/mbm_local_bytes_config > 0=0x30;1=0x30;3=0x15;4=0x15 > > +"mbm_assign_mode": > + The supported counter assignment modes. The enclosed brackets indicate which mode > + is enabled. > + :: > + > + # cat /sys/fs/resctrl/info/L3_MON/mbm_assign_mode > + [mbm_event] > + default > + > + "mbm_event": > + > + mbm_event mode allows users to assign a hardware counter to an RMID, event > + pair and monitor the bandwidth usage as long as it is assigned. The hardware > + continues to track the assigned counter until it is explicitly unassigned by > + the user. Each event within a resctrl group can be assigned independently. > + > + In this mode, a monitoring event can only accumulate data while it is backed > + by a hardware counter. Use "mbm_L3_assignments" found in each CTRL_MON and MON > + group to specify which of the events should have a counter assigned. The number > + of counters available is described in the "num_mbm_cntrs" file. Changing the > + mode may cause all counters on the resource to reset. > + > + "default": > + > + In default mode, resctrl assumes there is a hardware counter for each > + event within every CTRL_MON and MON group. On AMD platforms, it is > + recommended to use the mbm_event mode, if supported, to prevent reset of MBM > + events between reads resulting from hardware re-allocating counters. This can > + result in misleading values or display "Unavailable" if no counter is assigned > + to the event. > + > "max_threshold_occupancy": > Read/write file provides the largest value (in > bytes) at which a previously used LLC_occupancy > diff --git a/fs/resctrl/rdtgroup.c b/fs/resctrl/rdtgroup.c > index ca0475b75390..c7ca9113a12a 100644 > --- a/fs/resctrl/rdtgroup.c > +++ b/fs/resctrl/rdtgroup.c > @@ -1799,6 +1799,36 @@ static ssize_t mbm_local_bytes_config_write(struct kernfs_open_file *of, > return ret ?: nbytes; > } > > +static int resctrl_mbm_assign_mode_show(struct kernfs_open_file *of, > + struct seq_file *s, void *v) > +{ > + struct rdt_resource *r = rdt_kn_parent_priv(of->kn); > + bool enabled; > + > + mutex_lock(&rdtgroup_mutex); > + enabled = resctrl_arch_mbm_cntr_assign_enabled(r); > + > + if (r->mon.mbm_cntr_assignable) { > + if (enabled) > + seq_puts(s, "[mbm_event]\n"); > + else > + seq_puts(s, "[default]\n"); > + > + if (!IS_ENABLED(CONFIG_RESCTRL_ASSIGN_FIXED)) { > + if (enabled) > + seq_puts(s, "default\n"); > + else > + seq_puts(s, "mbm_event\n"); > + } > + } else { > + seq_puts(s, "[default]\n"); > + } > + > + mutex_unlock(&rdtgroup_mutex); > + > + return 0; > +} The resctrl_mbm_assign_mode_show() can also be moved to monitor.c. What do you think? -- Thanks Babu Moger