fs/resctrl: Introduce mbm_L3_assignments to list assignments in a group

Introduce the mbm_L3_assignments resctrl file associated with CTRL_MON and MON
resource groups to display the counter assignment states of the resource group
when "mbm_event" counter assignment mode is enabled.

Display the list in the following format:
<Event>:<Domain id>=<Assignment state>;<Domain id>=<Assignment state>

Event: A valid MBM event listed in
      /sys/fs/resctrl/info/L3_MON/event_configs directory.

Domain ID: A valid domain ID.

The assignment state can be one of the following:

_ : No counter assigned.

e : Counter assigned exclusively.

Example:
To list the assignment states for the default group
  $ cd /sys/fs/resctrl
  $ cat /sys/fs/resctrl/mbm_L3_assignments
  mbm_total_bytes:0=e;1=e
  mbm_local_bytes:0=e;1=e

Signed-off-by: Babu Moger <babu.moger@amd.com>
Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
Reviewed-by: Reinette Chatre <reinette.chatre@intel.com>
Link: https://lore.kernel.org/cover.1757108044.git.babu.moger@amd.com
This commit is contained in:
Babu Moger 2025-09-05 16:34:27 -05:00 committed by Borislav Petkov (AMD)
parent ef712fe97e
commit cba8222880
4 changed files with 88 additions and 0 deletions

View File

@ -509,6 +509,37 @@ When monitoring is enabled all MON groups will also contain:
Available only with debug option. The identifier used by hardware
for the monitor group. On x86 this is the RMID.
When monitoring is enabled all MON groups may also contain:
"mbm_L3_assignments":
Exists when "mbm_event" counter assignment mode is supported and lists the
counter assignment states of the group.
The assignment list is displayed in the following format:
<Event>:<Domain ID>=<Assignment state>;<Domain ID>=<Assignment state>
Event: A valid MBM event in the
/sys/fs/resctrl/info/L3_MON/event_configs directory.
Domain ID: A valid domain ID.
Assignment states:
_ : No counter assigned.
e : Counter assigned exclusively.
Example:
To display the counter assignment states for the default group.
::
# cd /sys/fs/resctrl
# cat /sys/fs/resctrl/mbm_L3_assignments
mbm_total_bytes:0=e;1=e
mbm_local_bytes:0=e;1=e
When the "mba_MBps" mount option is used all CTRL_MON groups will also contain:
"mba_MBps_event":

View File

@ -416,6 +416,8 @@ int resctrl_mbm_assign_on_mkdir_show(struct kernfs_open_file *of,
ssize_t resctrl_mbm_assign_on_mkdir_write(struct kernfs_open_file *of, char *buf,
size_t nbytes, loff_t off);
int mbm_L3_assignments_show(struct kernfs_open_file *of, struct seq_file *s, void *v);
#ifdef CONFIG_RESCTRL_FS_PSEUDO_LOCK
int rdtgroup_locksetup_enter(struct rdtgroup *rdtgrp);

View File

@ -1454,6 +1454,54 @@ int resctrl_available_mbm_cntrs_show(struct kernfs_open_file *of,
return ret;
}
int mbm_L3_assignments_show(struct kernfs_open_file *of, struct seq_file *s, void *v)
{
struct rdt_resource *r = resctrl_arch_get_resource(RDT_RESOURCE_L3);
struct rdt_mon_domain *d;
struct rdtgroup *rdtgrp;
struct mon_evt *mevt;
int ret = 0;
bool sep;
rdtgrp = rdtgroup_kn_lock_live(of->kn);
if (!rdtgrp) {
ret = -ENOENT;
goto out_unlock;
}
rdt_last_cmd_clear();
if (!resctrl_arch_mbm_cntr_assign_enabled(r)) {
rdt_last_cmd_puts("mbm_event counter assignment mode is not enabled\n");
ret = -EINVAL;
goto out_unlock;
}
for_each_mon_event(mevt) {
if (mevt->rid != r->rid || !mevt->enabled || !resctrl_is_mbm_event(mevt->evtid))
continue;
sep = false;
seq_printf(s, "%s:", mevt->name);
list_for_each_entry(d, &r->mon_domains, hdr.list) {
if (sep)
seq_putc(s, ';');
if (mbm_cntr_get(r, d, rdtgrp, mevt->evtid) < 0)
seq_printf(s, "%d=_", d->hdr.id);
else
seq_printf(s, "%d=e", d->hdr.id);
sep = true;
}
seq_putc(s, '\n');
}
out_unlock:
rdtgroup_kn_unlock(of->kn);
return ret;
}
/**
* resctrl_mon_resource_init() - Initialise global monitoring structures.
*
@ -1512,6 +1560,7 @@ int resctrl_mon_resource_init(void)
resctrl_file_fflags_init("event_filter", RFTYPE_ASSIGN_CONFIG);
resctrl_file_fflags_init("mbm_assign_on_mkdir", RFTYPE_MON_INFO |
RFTYPE_RES_CACHE);
resctrl_file_fflags_init("mbm_L3_assignments", RFTYPE_MON_BASE);
}
return 0;

View File

@ -1937,6 +1937,12 @@ static struct rftype res_common_files[] = {
.seq_show = event_filter_show,
.write = event_filter_write,
},
{
.name = "mbm_L3_assignments",
.mode = 0444,
.kf_ops = &rdtgroup_kf_single_ops,
.seq_show = mbm_L3_assignments_show,
},
{
.name = "mbm_assign_mode",
.mode = 0444,