mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-12-27 11:06:41 -05:00
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
This commit is contained in:
committed by
Borislav Petkov (AMD)
parent
556d2892aa
commit
48068e5650
@@ -137,6 +137,21 @@ related to allocation:
|
||||
"1":
|
||||
Non-contiguous 1s value in CBM is supported.
|
||||
|
||||
"io_alloc":
|
||||
"io_alloc" enables system software to configure the portion of
|
||||
the cache allocated for I/O traffic. File may only exist if the
|
||||
system supports this feature on some of its cache resources.
|
||||
|
||||
"disabled":
|
||||
Resource supports "io_alloc" but the feature is disabled.
|
||||
Portions of cache used for allocation of I/O traffic cannot
|
||||
be configured.
|
||||
"enabled":
|
||||
Portions of cache used for allocation of I/O traffic
|
||||
can be configured using "io_alloc_cbm".
|
||||
"not supported":
|
||||
Support not available for this resource.
|
||||
|
||||
Memory bandwidth(MB) subdirectory contains the following files
|
||||
with respect to allocation:
|
||||
|
||||
|
||||
@@ -676,3 +676,24 @@ int rdtgroup_mondata_show(struct seq_file *m, void *arg)
|
||||
rdtgroup_kn_unlock(of->kn);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int resctrl_io_alloc_show(struct kernfs_open_file *of, struct seq_file *seq, void *v)
|
||||
{
|
||||
struct resctrl_schema *s = rdt_kn_parent_priv(of->kn);
|
||||
struct rdt_resource *r = s->res;
|
||||
|
||||
mutex_lock(&rdtgroup_mutex);
|
||||
|
||||
if (r->cache.io_alloc_capable) {
|
||||
if (resctrl_arch_get_io_alloc_enabled(r))
|
||||
seq_puts(seq, "enabled\n");
|
||||
else
|
||||
seq_puts(seq, "disabled\n");
|
||||
} else {
|
||||
seq_puts(seq, "not supported\n");
|
||||
}
|
||||
|
||||
mutex_unlock(&rdtgroup_mutex);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -426,6 +426,7 @@ int mbm_L3_assignments_show(struct kernfs_open_file *of, struct seq_file *s, voi
|
||||
|
||||
ssize_t mbm_L3_assignments_write(struct kernfs_open_file *of, char *buf, size_t nbytes,
|
||||
loff_t off);
|
||||
int resctrl_io_alloc_show(struct kernfs_open_file *of, struct seq_file *seq, void *v);
|
||||
|
||||
#ifdef CONFIG_RESCTRL_FS_PSEUDO_LOCK
|
||||
int rdtgroup_locksetup_enter(struct rdtgroup *rdtgrp);
|
||||
|
||||
@@ -1947,6 +1947,12 @@ static struct rftype res_common_files[] = {
|
||||
.kf_ops = &rdtgroup_kf_single_ops,
|
||||
.seq_show = rdt_thread_throttle_mode_show,
|
||||
},
|
||||
{
|
||||
.name = "io_alloc",
|
||||
.mode = 0444,
|
||||
.kf_ops = &rdtgroup_kf_single_ops,
|
||||
.seq_show = resctrl_io_alloc_show,
|
||||
},
|
||||
{
|
||||
.name = "max_threshold_occupancy",
|
||||
.mode = 0644,
|
||||
@@ -2138,6 +2144,20 @@ static void thread_throttle_mode_init(void)
|
||||
RFTYPE_CTRL_INFO | RFTYPE_RES_MB);
|
||||
}
|
||||
|
||||
/*
|
||||
* The resctrl file "io_alloc" is added using L3 resource. However, it results
|
||||
* in this file being visible for *all* cache resources (eg. L2 cache),
|
||||
* whether it supports "io_alloc" or not.
|
||||
*/
|
||||
static void io_alloc_init(void)
|
||||
{
|
||||
struct rdt_resource *r = resctrl_arch_get_resource(RDT_RESOURCE_L3);
|
||||
|
||||
if (r->cache.io_alloc_capable)
|
||||
resctrl_file_fflags_init("io_alloc", RFTYPE_CTRL_INFO |
|
||||
RFTYPE_RES_CACHE);
|
||||
}
|
||||
|
||||
void resctrl_file_fflags_init(const char *config, unsigned long fflags)
|
||||
{
|
||||
struct rftype *rft;
|
||||
@@ -4409,6 +4429,8 @@ int resctrl_init(void)
|
||||
|
||||
thread_throttle_mode_init();
|
||||
|
||||
io_alloc_init();
|
||||
|
||||
ret = resctrl_mon_resource_init();
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
Reference in New Issue
Block a user