Skip to content

Commit 48068e5

Browse files
babumogerbp3tk0v
authored andcommitted
fs/resctrl: Introduce interface to display "io_alloc" support
Introduce the "io_alloc" resctrl file to the "info" area of a cache resource, for example /sys/fs/resctrl/info/L3/io_alloc. "io_alloc" indicates support for the "io_alloc" feature that allows direct insertion of data from I/O devices into the cache. Restrict exposing support for "io_alloc" to the L3 resource that is the only resource where this feature can be backed by AMD's L3 Smart Data Cache Injection Allocation Enforcement (SDCIAE). With that, the "io_alloc" file is only visible to user space if the L3 resource supports "io_alloc". Doing so makes the file visible for all cache resources though, for example also L2 cache (if it supports cache allocation). As a consequence, add capability for file to report expected "enabled" and "disabled", as well as "not supported". 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://patch.msgid.link/e8b116a8f424128b227734bb1d433c14af478d90.1762995456.git.babu.moger@amd.com
1 parent 556d289 commit 48068e5

4 files changed

Lines changed: 59 additions & 0 deletions

File tree

Documentation/filesystems/resctrl.rst

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,21 @@ related to allocation:
137137
"1":
138138
Non-contiguous 1s value in CBM is supported.
139139

140+
"io_alloc":
141+
"io_alloc" enables system software to configure the portion of
142+
the cache allocated for I/O traffic. File may only exist if the
143+
system supports this feature on some of its cache resources.
144+
145+
"disabled":
146+
Resource supports "io_alloc" but the feature is disabled.
147+
Portions of cache used for allocation of I/O traffic cannot
148+
be configured.
149+
"enabled":
150+
Portions of cache used for allocation of I/O traffic
151+
can be configured using "io_alloc_cbm".
152+
"not supported":
153+
Support not available for this resource.
154+
140155
Memory bandwidth(MB) subdirectory contains the following files
141156
with respect to allocation:
142157

fs/resctrl/ctrlmondata.c

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -676,3 +676,24 @@ int rdtgroup_mondata_show(struct seq_file *m, void *arg)
676676
rdtgroup_kn_unlock(of->kn);
677677
return ret;
678678
}
679+
680+
int resctrl_io_alloc_show(struct kernfs_open_file *of, struct seq_file *seq, void *v)
681+
{
682+
struct resctrl_schema *s = rdt_kn_parent_priv(of->kn);
683+
struct rdt_resource *r = s->res;
684+
685+
mutex_lock(&rdtgroup_mutex);
686+
687+
if (r->cache.io_alloc_capable) {
688+
if (resctrl_arch_get_io_alloc_enabled(r))
689+
seq_puts(seq, "enabled\n");
690+
else
691+
seq_puts(seq, "disabled\n");
692+
} else {
693+
seq_puts(seq, "not supported\n");
694+
}
695+
696+
mutex_unlock(&rdtgroup_mutex);
697+
698+
return 0;
699+
}

fs/resctrl/internal.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -426,6 +426,7 @@ int mbm_L3_assignments_show(struct kernfs_open_file *of, struct seq_file *s, voi
426426

427427
ssize_t mbm_L3_assignments_write(struct kernfs_open_file *of, char *buf, size_t nbytes,
428428
loff_t off);
429+
int resctrl_io_alloc_show(struct kernfs_open_file *of, struct seq_file *seq, void *v);
429430

430431
#ifdef CONFIG_RESCTRL_FS_PSEUDO_LOCK
431432
int rdtgroup_locksetup_enter(struct rdtgroup *rdtgrp);

fs/resctrl/rdtgroup.c

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1947,6 +1947,12 @@ static struct rftype res_common_files[] = {
19471947
.kf_ops = &rdtgroup_kf_single_ops,
19481948
.seq_show = rdt_thread_throttle_mode_show,
19491949
},
1950+
{
1951+
.name = "io_alloc",
1952+
.mode = 0444,
1953+
.kf_ops = &rdtgroup_kf_single_ops,
1954+
.seq_show = resctrl_io_alloc_show,
1955+
},
19501956
{
19511957
.name = "max_threshold_occupancy",
19521958
.mode = 0644,
@@ -2138,6 +2144,20 @@ static void thread_throttle_mode_init(void)
21382144
RFTYPE_CTRL_INFO | RFTYPE_RES_MB);
21392145
}
21402146

2147+
/*
2148+
* The resctrl file "io_alloc" is added using L3 resource. However, it results
2149+
* in this file being visible for *all* cache resources (eg. L2 cache),
2150+
* whether it supports "io_alloc" or not.
2151+
*/
2152+
static void io_alloc_init(void)
2153+
{
2154+
struct rdt_resource *r = resctrl_arch_get_resource(RDT_RESOURCE_L3);
2155+
2156+
if (r->cache.io_alloc_capable)
2157+
resctrl_file_fflags_init("io_alloc", RFTYPE_CTRL_INFO |
2158+
RFTYPE_RES_CACHE);
2159+
}
2160+
21412161
void resctrl_file_fflags_init(const char *config, unsigned long fflags)
21422162
{
21432163
struct rftype *rft;
@@ -4409,6 +4429,8 @@ int resctrl_init(void)
44094429

44104430
thread_throttle_mode_init();
44114431

4432+
io_alloc_init();
4433+
44124434
ret = resctrl_mon_resource_init();
44134435
if (ret)
44144436
return ret;

0 commit comments

Comments
 (0)