mirror of
https://github.com/torvalds/linux.git
synced 2026-05-31 18:43:33 +02:00
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:
parent
ef712fe97e
commit
cba8222880
|
|
@ -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":
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user