Skip to content

Commit f5cd0e3

Browse files
aeglbp3tk0v
authored andcommitted
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 <[email protected]> Signed-off-by: Tony Luck <[email protected]> Signed-off-by: Borislav Petkov (AMD) <[email protected]> Reviewed-by: Reinette Chatre <[email protected]> Tested-by: Babu Moger <[email protected]> Link: https://lore.kernel.org/r/[email protected]
1 parent 141cb5c commit f5cd0e3

File tree

3 files changed

+42
-0
lines changed

3 files changed

+42
-0
lines changed

arch/x86/kernel/cpu/resctrl/ctrlmondata.c

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -518,6 +518,36 @@ static int smp_mon_event_count(void *arg)
518518
return 0;
519519
}
520520

521+
int rdtgroup_mba_mbps_event_show(struct kernfs_open_file *of,
522+
struct seq_file *s, void *v)
523+
{
524+
struct rdtgroup *rdtgrp;
525+
int ret = 0;
526+
527+
rdtgrp = rdtgroup_kn_lock_live(of->kn);
528+
529+
if (rdtgrp) {
530+
switch (rdtgrp->mba_mbps_event) {
531+
case QOS_L3_MBM_LOCAL_EVENT_ID:
532+
seq_puts(s, "mbm_local_bytes\n");
533+
break;
534+
case QOS_L3_MBM_TOTAL_EVENT_ID:
535+
seq_puts(s, "mbm_total_bytes\n");
536+
break;
537+
default:
538+
pr_warn_once("Bad event %d\n", rdtgrp->mba_mbps_event);
539+
ret = -EINVAL;
540+
break;
541+
}
542+
} else {
543+
ret = -ENOENT;
544+
}
545+
546+
rdtgroup_kn_unlock(of->kn);
547+
548+
return ret;
549+
}
550+
521551
void mon_event_read(struct rmid_read *rr, struct rdt_resource *r,
522552
struct rdt_mon_domain *d, struct rdtgroup *rdtgrp,
523553
cpumask_t *cpumask, int evtid, int first)

arch/x86/kernel/cpu/resctrl/internal.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -610,6 +610,8 @@ ssize_t rdtgroup_schemata_write(struct kernfs_open_file *of,
610610
char *buf, size_t nbytes, loff_t off);
611611
int rdtgroup_schemata_show(struct kernfs_open_file *of,
612612
struct seq_file *s, void *v);
613+
int rdtgroup_mba_mbps_event_show(struct kernfs_open_file *of,
614+
struct seq_file *s, void *v);
613615
bool rdtgroup_cbm_overlaps(struct resctrl_schema *s, struct rdt_ctrl_domain *d,
614616
unsigned long cbm, int closid, bool exclusive);
615617
unsigned int rdtgroup_cbm_to_size(struct rdt_resource *r, struct rdt_ctrl_domain *d,

arch/x86/kernel/cpu/resctrl/rdtgroup.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1950,6 +1950,12 @@ static struct rftype res_common_files[] = {
19501950
.seq_show = rdtgroup_schemata_show,
19511951
.fflags = RFTYPE_CTRL_BASE,
19521952
},
1953+
{
1954+
.name = "mba_MBps_event",
1955+
.mode = 0444,
1956+
.kf_ops = &rdtgroup_kf_single_ops,
1957+
.seq_show = rdtgroup_mba_mbps_event_show,
1958+
},
19531959
{
19541960
.name = "mode",
19551961
.mode = 0644,
@@ -2355,6 +2361,7 @@ static int set_mba_sc(bool mba_sc)
23552361
struct rdt_resource *r = &rdt_resources_all[RDT_RESOURCE_MBA].r_resctrl;
23562362
u32 num_closid = resctrl_arch_get_num_closid(r);
23572363
struct rdt_ctrl_domain *d;
2364+
unsigned long fflags;
23582365
int i;
23592366

23602367
if (!supports_mba_mbps() || mba_sc == is_mba_sc(r))
@@ -2369,6 +2376,9 @@ static int set_mba_sc(bool mba_sc)
23692376
d->mbps_val[i] = MBA_MAX_MBPS;
23702377
}
23712378

2379+
fflags = mba_sc ? RFTYPE_CTRL_BASE | RFTYPE_MON_BASE : 0;
2380+
resctrl_file_fflags_init("mba_MBps_event", fflags);
2381+
23722382
return 0;
23732383
}
23742384

0 commit comments

Comments
 (0)