mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-08 12:52:40 -04:00
x86/resctrl: Add "mba_MBps_event" file to CTRL_MON directories
The "mba_MBps" mount option provides an alternate method to control memory bandwidth. Instead of specifying allowable bandwidth as a percentage of maximum possible, the user provides a MiB/s limit value. In preparation to allow the user to pick the memory bandwidth monitoring event used as input to the feedback loop, provide a file in each CTRL_MON group directory that shows the event currently in use. Note that this file is only visible when the "mba_MBps" mount option is in use. Suggested-by: Reinette Chatre <reinette.chatre@intel.com> Signed-off-by: Tony Luck <tony.luck@intel.com> Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de> Reviewed-by: Reinette Chatre <reinette.chatre@intel.com> Tested-by: Babu Moger <babu.moger@amd.com> Link: https://lore.kernel.org/r/20241206163148.83828-7-tony.luck@intel.com
This commit is contained in:
committed by
Borislav Petkov (AMD)
parent
141cb5c482
commit
f5cd0e316f
@@ -518,6 +518,36 @@ static int smp_mon_event_count(void *arg)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int rdtgroup_mba_mbps_event_show(struct kernfs_open_file *of,
|
||||
struct seq_file *s, void *v)
|
||||
{
|
||||
struct rdtgroup *rdtgrp;
|
||||
int ret = 0;
|
||||
|
||||
rdtgrp = rdtgroup_kn_lock_live(of->kn);
|
||||
|
||||
if (rdtgrp) {
|
||||
switch (rdtgrp->mba_mbps_event) {
|
||||
case QOS_L3_MBM_LOCAL_EVENT_ID:
|
||||
seq_puts(s, "mbm_local_bytes\n");
|
||||
break;
|
||||
case QOS_L3_MBM_TOTAL_EVENT_ID:
|
||||
seq_puts(s, "mbm_total_bytes\n");
|
||||
break;
|
||||
default:
|
||||
pr_warn_once("Bad event %d\n", rdtgrp->mba_mbps_event);
|
||||
ret = -EINVAL;
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
ret = -ENOENT;
|
||||
}
|
||||
|
||||
rdtgroup_kn_unlock(of->kn);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void mon_event_read(struct rmid_read *rr, struct rdt_resource *r,
|
||||
struct rdt_mon_domain *d, struct rdtgroup *rdtgrp,
|
||||
cpumask_t *cpumask, int evtid, int first)
|
||||
|
||||
@@ -610,6 +610,8 @@ ssize_t rdtgroup_schemata_write(struct kernfs_open_file *of,
|
||||
char *buf, size_t nbytes, loff_t off);
|
||||
int rdtgroup_schemata_show(struct kernfs_open_file *of,
|
||||
struct seq_file *s, void *v);
|
||||
int rdtgroup_mba_mbps_event_show(struct kernfs_open_file *of,
|
||||
struct seq_file *s, void *v);
|
||||
bool rdtgroup_cbm_overlaps(struct resctrl_schema *s, struct rdt_ctrl_domain *d,
|
||||
unsigned long cbm, int closid, bool exclusive);
|
||||
unsigned int rdtgroup_cbm_to_size(struct rdt_resource *r, struct rdt_ctrl_domain *d,
|
||||
|
||||
@@ -1950,6 +1950,12 @@ static struct rftype res_common_files[] = {
|
||||
.seq_show = rdtgroup_schemata_show,
|
||||
.fflags = RFTYPE_CTRL_BASE,
|
||||
},
|
||||
{
|
||||
.name = "mba_MBps_event",
|
||||
.mode = 0444,
|
||||
.kf_ops = &rdtgroup_kf_single_ops,
|
||||
.seq_show = rdtgroup_mba_mbps_event_show,
|
||||
},
|
||||
{
|
||||
.name = "mode",
|
||||
.mode = 0644,
|
||||
@@ -2355,6 +2361,7 @@ static int set_mba_sc(bool mba_sc)
|
||||
struct rdt_resource *r = &rdt_resources_all[RDT_RESOURCE_MBA].r_resctrl;
|
||||
u32 num_closid = resctrl_arch_get_num_closid(r);
|
||||
struct rdt_ctrl_domain *d;
|
||||
unsigned long fflags;
|
||||
int i;
|
||||
|
||||
if (!supports_mba_mbps() || mba_sc == is_mba_sc(r))
|
||||
@@ -2369,6 +2376,9 @@ static int set_mba_sc(bool mba_sc)
|
||||
d->mbps_val[i] = MBA_MAX_MBPS;
|
||||
}
|
||||
|
||||
fflags = mba_sc ? RFTYPE_CTRL_BASE | RFTYPE_MON_BASE : 0;
|
||||
resctrl_file_fflags_init("mba_MBps_event", fflags);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user