When the io_alloc feature is enabled, a portion of the cache can be
configured for shared use between hardware and software.
Update the bit_usage representation to reflect the io_alloc configuration.
Signed-off-by: Babu Moger <babu.moger@amd.com>
---
v8: Moved the patch to last after all the concepts are initialized.
Updated user doc resctrl.rst.
Simplified the CDT check in rdt_bit_usage_show() as CDP_DATA and CDP_CODE
are in sync with io_alloc enabled.
v7: New patch split from earlier patch #5.
Added resctrl_io_alloc_closid() to return max COSID.
---
Documentation/filesystems/resctrl.rst | 19 +++++++++++++------
fs/resctrl/ctrlmondata.c | 2 +-
fs/resctrl/internal.h | 2 ++
fs/resctrl/rdtgroup.c | 18 ++++++++++++++++--
4 files changed, 32 insertions(+), 9 deletions(-)
diff --git a/Documentation/filesystems/resctrl.rst b/Documentation/filesystems/resctrl.rst
index d955e8525af0..1e46231b929c 100644
--- a/Documentation/filesystems/resctrl.rst
+++ b/Documentation/filesystems/resctrl.rst
@@ -90,12 +90,19 @@ related to allocation:
must be set when writing a mask.
"shareable_bits":
- Bitmask of shareable resource with other executing
- entities (e.g. I/O). User can use this when
- setting up exclusive cache partitions. Note that
- some platforms support devices that have their
- own settings for cache use which can over-ride
- these bits.
+ Bitmask of shareable resource with other executing entities
+ (e.g. I/O). Applies to all instances of this resource. User
+ can use this when setting up exclusive cache partitions.
+ Note that some platforms support devices that have their
+ own settings for cache use which can over-ride these bits.
+
+ When "io_alloc" is enabled, a portion of each cache instance can
+ be configured for shared use between hardware and software.
+ "bit_usage" should be used to see which portions of each cache
+ instance is configured for hardware use via "io_alloc" feature
+ because every cache instance can have its "io_alloc" bitmask
+ configured independently via io_alloc_cbm.
+
"bit_usage":
Annotated capacity bitmasks showing how all
instances of the resource are used. The legend is:
diff --git a/fs/resctrl/ctrlmondata.c b/fs/resctrl/ctrlmondata.c
index 1f69117f96f8..cfa766319189 100644
--- a/fs/resctrl/ctrlmondata.c
+++ b/fs/resctrl/ctrlmondata.c
@@ -754,7 +754,7 @@ static int resctrl_io_alloc_init_cbm(struct resctrl_schema *s, u32 closid)
* resource. Note that if Code Data Prioritization (CDP) is enabled, the number
* of available CLOSIDs is reduced by half.
*/
-static u32 resctrl_io_alloc_closid(struct rdt_resource *r)
+u32 resctrl_io_alloc_closid(struct rdt_resource *r)
{
if (resctrl_arch_get_cdp_enabled(r->rid))
return resctrl_arch_get_num_closid(r) / 2 - 1;
diff --git a/fs/resctrl/internal.h b/fs/resctrl/internal.h
index 5467c3ad1b6d..98b87725508b 100644
--- a/fs/resctrl/internal.h
+++ b/fs/resctrl/internal.h
@@ -395,6 +395,8 @@ int resctrl_io_alloc_cbm_show(struct kernfs_open_file *of, struct seq_file *seq,
ssize_t resctrl_io_alloc_cbm_write(struct kernfs_open_file *of, char *buf,
size_t nbytes, loff_t off);
+u32 resctrl_io_alloc_closid(struct rdt_resource *r);
+
const char *rdtgroup_name_by_closid(int closid);
#ifdef CONFIG_RESCTRL_FS_PSEUDO_LOCK
diff --git a/fs/resctrl/rdtgroup.c b/fs/resctrl/rdtgroup.c
index a3ab2851c6da..b85c2622c94b 100644
--- a/fs/resctrl/rdtgroup.c
+++ b/fs/resctrl/rdtgroup.c
@@ -1068,15 +1068,17 @@ static int rdt_bit_usage_show(struct kernfs_open_file *of,
cpus_read_lock();
mutex_lock(&rdtgroup_mutex);
- hw_shareable = r->cache.shareable_bits;
list_for_each_entry(dom, &r->ctrl_domains, hdr.list) {
if (sep)
seq_putc(seq, ';');
+ hw_shareable = r->cache.shareable_bits;
sw_shareable = 0;
exclusive = 0;
seq_printf(seq, "%d=", dom->hdr.id);
for (i = 0; i < closids_supported(); i++) {
- if (!closid_allocated(i))
+ if (!closid_allocated(i) ||
+ (resctrl_arch_get_io_alloc_enabled(r) &&
+ i == resctrl_io_alloc_closid(r)))
continue;
ctrl_val = resctrl_arch_get_config(r, dom, i,
s->conf_type);
@@ -1104,6 +1106,18 @@ static int rdt_bit_usage_show(struct kernfs_open_file *of,
break;
}
}
+
+ /*
+ * When the "io_alloc" feature is enabled, a portion of the
+ * cache is configured for shared use between hardware and software.
+ */
+ if (resctrl_arch_get_io_alloc_enabled(r)) {
+ ctrl_val = resctrl_arch_get_config(r, dom,
+ resctrl_io_alloc_closid(r),
+ s->conf_type);
+ hw_shareable |= ctrl_val;
+ }
+
for (i = r->cache.cbm_len - 1; i >= 0; i--) {
pseudo_locked = dom->plr ? dom->plr->cbm : 0;
hwb = test_bit(i, &hw_shareable);
--
2.34.1
Hi Babu On 8/5/25 4:30 PM, Babu Moger wrote: > When the io_alloc feature is enabled, a portion of the cache can be > configured for shared use between hardware and software. > > Update the bit_usage representation to reflect the io_alloc configuration. ... but no update to the bit_usage docs :( > > Signed-off-by: Babu Moger <babu.moger@amd.com> > --- .. > --- > Documentation/filesystems/resctrl.rst | 19 +++++++++++++------ > fs/resctrl/ctrlmondata.c | 2 +- > fs/resctrl/internal.h | 2 ++ > fs/resctrl/rdtgroup.c | 18 ++++++++++++++++-- > 4 files changed, 32 insertions(+), 9 deletions(-) > > diff --git a/Documentation/filesystems/resctrl.rst b/Documentation/filesystems/resctrl.rst > index d955e8525af0..1e46231b929c 100644 > --- a/Documentation/filesystems/resctrl.rst > +++ b/Documentation/filesystems/resctrl.rst > @@ -90,12 +90,19 @@ related to allocation: > must be set when writing a mask. > > "shareable_bits": > - Bitmask of shareable resource with other executing > - entities (e.g. I/O). User can use this when > - setting up exclusive cache partitions. Note that > - some platforms support devices that have their > - own settings for cache use which can over-ride > - these bits. > + Bitmask of shareable resource with other executing entities > + (e.g. I/O). Applies to all instances of this resource. User > + can use this when setting up exclusive cache partitions. > + Note that some platforms support devices that have their > + own settings for cache use which can over-ride these bits. > + > + When "io_alloc" is enabled, a portion of each cache instance can > + be configured for shared use between hardware and software. > + "bit_usage" should be used to see which portions of each cache > + instance is configured for hardware use via "io_alloc" feature > + because every cache instance can have its "io_alloc" bitmask > + configured independently via io_alloc_cbm. > + > "bit_usage": More ignored feedback. I was expecting changes to the "bit_usage" section. https://lore.kernel.org/lkml/94d075e0-6703-449f-9c0c-8e5973349dff@intel.com/ > Annotated capacity bitmasks showing how all > instances of the resource are used. The legend is: > diff --git a/fs/resctrl/ctrlmondata.c b/fs/resctrl/ctrlmondata.c > index 1f69117f96f8..cfa766319189 100644 > --- a/fs/resctrl/ctrlmondata.c > +++ b/fs/resctrl/ctrlmondata.c > @@ -754,7 +754,7 @@ static int resctrl_io_alloc_init_cbm(struct resctrl_schema *s, u32 closid) > * resource. Note that if Code Data Prioritization (CDP) is enabled, the number > * of available CLOSIDs is reduced by half. > */ > -static u32 resctrl_io_alloc_closid(struct rdt_resource *r) > +u32 resctrl_io_alloc_closid(struct rdt_resource *r) > { > if (resctrl_arch_get_cdp_enabled(r->rid)) > return resctrl_arch_get_num_closid(r) / 2 - 1; > diff --git a/fs/resctrl/internal.h b/fs/resctrl/internal.h > index 5467c3ad1b6d..98b87725508b 100644 > --- a/fs/resctrl/internal.h > +++ b/fs/resctrl/internal.h > @@ -395,6 +395,8 @@ int resctrl_io_alloc_cbm_show(struct kernfs_open_file *of, struct seq_file *seq, > ssize_t resctrl_io_alloc_cbm_write(struct kernfs_open_file *of, char *buf, > size_t nbytes, loff_t off); > > +u32 resctrl_io_alloc_closid(struct rdt_resource *r); > + > const char *rdtgroup_name_by_closid(int closid); > > #ifdef CONFIG_RESCTRL_FS_PSEUDO_LOCK > diff --git a/fs/resctrl/rdtgroup.c b/fs/resctrl/rdtgroup.c > index a3ab2851c6da..b85c2622c94b 100644 > --- a/fs/resctrl/rdtgroup.c > +++ b/fs/resctrl/rdtgroup.c > @@ -1068,15 +1068,17 @@ static int rdt_bit_usage_show(struct kernfs_open_file *of, > > cpus_read_lock(); > mutex_lock(&rdtgroup_mutex); > - hw_shareable = r->cache.shareable_bits; > list_for_each_entry(dom, &r->ctrl_domains, hdr.list) { > if (sep) > seq_putc(seq, ';'); > + hw_shareable = r->cache.shareable_bits; > sw_shareable = 0; > exclusive = 0; > seq_printf(seq, "%d=", dom->hdr.id); > for (i = 0; i < closids_supported(); i++) { > - if (!closid_allocated(i)) > + if (!closid_allocated(i) || > + (resctrl_arch_get_io_alloc_enabled(r) && > + i == resctrl_io_alloc_closid(r))) > continue; > ctrl_val = resctrl_arch_get_config(r, dom, i, > s->conf_type); > @@ -1104,6 +1106,18 @@ static int rdt_bit_usage_show(struct kernfs_open_file *of, > break; > } > } > + > + /* > + * When the "io_alloc" feature is enabled, a portion of the > + * cache is configured for shared use between hardware and software. Please add snippet to comment that highlights that CBM of CDP peers are kept in sync and the CBM used for I/O can thus be obtained from either. Reinette
Hi Reinette, On 8/7/2025 8:54 PM, Reinette Chatre wrote: > Hi Babu > > On 8/5/25 4:30 PM, Babu Moger wrote: >> When the io_alloc feature is enabled, a portion of the cache can be >> configured for shared use between hardware and software. >> >> Update the bit_usage representation to reflect the io_alloc configuration. > ... but no update to the bit_usage docs :( Yes. Missed that. Will update the text. > >> Signed-off-by: Babu Moger <babu.moger@amd.com> >> --- > .. > >> --- >> Documentation/filesystems/resctrl.rst | 19 +++++++++++++------ >> fs/resctrl/ctrlmondata.c | 2 +- >> fs/resctrl/internal.h | 2 ++ >> fs/resctrl/rdtgroup.c | 18 ++++++++++++++++-- >> 4 files changed, 32 insertions(+), 9 deletions(-) >> >> diff --git a/Documentation/filesystems/resctrl.rst b/Documentation/filesystems/resctrl.rst >> index d955e8525af0..1e46231b929c 100644 >> --- a/Documentation/filesystems/resctrl.rst >> +++ b/Documentation/filesystems/resctrl.rst >> @@ -90,12 +90,19 @@ related to allocation: >> must be set when writing a mask. >> >> "shareable_bits": >> - Bitmask of shareable resource with other executing >> - entities (e.g. I/O). User can use this when >> - setting up exclusive cache partitions. Note that >> - some platforms support devices that have their >> - own settings for cache use which can over-ride >> - these bits. >> + Bitmask of shareable resource with other executing entities >> + (e.g. I/O). Applies to all instances of this resource. User >> + can use this when setting up exclusive cache partitions. >> + Note that some platforms support devices that have their >> + own settings for cache use which can over-ride these bits. >> + >> + When "io_alloc" is enabled, a portion of each cache instance can >> + be configured for shared use between hardware and software. >> + "bit_usage" should be used to see which portions of each cache >> + instance is configured for hardware use via "io_alloc" feature >> + because every cache instance can have its "io_alloc" bitmask >> + configured independently via io_alloc_cbm. >> + >> "bit_usage": > More ignored feedback. I was expecting changes to the "bit_usage" section. > https://lore.kernel.org/lkml/94d075e0-6703-449f-9c0c-8e5973349dff@intel.com/ Yea. Added following text now. diff --git a/Documentation/filesystems/resctrl.rst b/Documentation/filesystems/resctrl.rst index 273c9c9389a4..0a56829407c9 100644 --- a/Documentation/filesystems/resctrl.rst +++ b/Documentation/filesystems/resctrl.rst @@ -124,8 +124,11 @@ related to allocation: "X": Corresponding region is available for sharing and used by hardware and software. These are the - bits that appear in "shareable_bits" as - well as a resource group's allocation. + bits that appear in "shareable_bits" as well as a + resource group's allocation. When io_alloc is enabled, + the capacity bitmasks configured via io_alloc_cbm will + also appear here, indicating the cache regions shared + with I/O devices. "S": Corresponding region is used by software and available for sharing. > >> Annotated capacity bitmasks showing how all >> instances of the resource are used. The legend is: >> diff --git a/fs/resctrl/ctrlmondata.c b/fs/resctrl/ctrlmondata.c >> index 1f69117f96f8..cfa766319189 100644 >> --- a/fs/resctrl/ctrlmondata.c >> +++ b/fs/resctrl/ctrlmondata.c >> @@ -754,7 +754,7 @@ static int resctrl_io_alloc_init_cbm(struct resctrl_schema *s, u32 closid) >> * resource. Note that if Code Data Prioritization (CDP) is enabled, the number >> * of available CLOSIDs is reduced by half. >> */ >> -static u32 resctrl_io_alloc_closid(struct rdt_resource *r) >> +u32 resctrl_io_alloc_closid(struct rdt_resource *r) >> { >> if (resctrl_arch_get_cdp_enabled(r->rid)) >> return resctrl_arch_get_num_closid(r) / 2 - 1; >> diff --git a/fs/resctrl/internal.h b/fs/resctrl/internal.h >> index 5467c3ad1b6d..98b87725508b 100644 >> --- a/fs/resctrl/internal.h >> +++ b/fs/resctrl/internal.h >> @@ -395,6 +395,8 @@ int resctrl_io_alloc_cbm_show(struct kernfs_open_file *of, struct seq_file *seq, >> ssize_t resctrl_io_alloc_cbm_write(struct kernfs_open_file *of, char *buf, >> size_t nbytes, loff_t off); >> >> +u32 resctrl_io_alloc_closid(struct rdt_resource *r); >> + >> const char *rdtgroup_name_by_closid(int closid); >> >> #ifdef CONFIG_RESCTRL_FS_PSEUDO_LOCK >> diff --git a/fs/resctrl/rdtgroup.c b/fs/resctrl/rdtgroup.c >> index a3ab2851c6da..b85c2622c94b 100644 >> --- a/fs/resctrl/rdtgroup.c >> +++ b/fs/resctrl/rdtgroup.c >> @@ -1068,15 +1068,17 @@ static int rdt_bit_usage_show(struct kernfs_open_file *of, >> >> cpus_read_lock(); >> mutex_lock(&rdtgroup_mutex); >> - hw_shareable = r->cache.shareable_bits; >> list_for_each_entry(dom, &r->ctrl_domains, hdr.list) { >> if (sep) >> seq_putc(seq, ';'); >> + hw_shareable = r->cache.shareable_bits; >> sw_shareable = 0; >> exclusive = 0; >> seq_printf(seq, "%d=", dom->hdr.id); >> for (i = 0; i < closids_supported(); i++) { >> - if (!closid_allocated(i)) >> + if (!closid_allocated(i) || >> + (resctrl_arch_get_io_alloc_enabled(r) && >> + i == resctrl_io_alloc_closid(r))) >> continue; >> ctrl_val = resctrl_arch_get_config(r, dom, i, >> s->conf_type); >> @@ -1104,6 +1106,18 @@ static int rdt_bit_usage_show(struct kernfs_open_file *of, >> break; >> } >> } >> + >> + /* >> + * When the "io_alloc" feature is enabled, a portion of the >> + * cache is configured for shared use between hardware and software. > Please add snippet to comment that highlights that CBM of CDP peers are kept in sync and the > CBM used for I/O can thus be obtained from either. Sure. Thanks Babu
Hi Babu, On 8/26/25 3:51 PM, Moger, Babu wrote: > Hi Reinette, > > On 8/7/2025 8:54 PM, Reinette Chatre wrote: >> Hi Babu >> >> On 8/5/25 4:30 PM, Babu Moger wrote: >>> When the io_alloc feature is enabled, a portion of the cache can be >>> configured for shared use between hardware and software. >>> >>> Update the bit_usage representation to reflect the io_alloc configuration. >> ... but no update to the bit_usage docs :( > > > Yes. Missed that. Will update the text. > > >> >>> Signed-off-by: Babu Moger <babu.moger@amd.com> >>> --- >> .. >> >>> --- >>> Documentation/filesystems/resctrl.rst | 19 +++++++++++++------ >>> fs/resctrl/ctrlmondata.c | 2 +- >>> fs/resctrl/internal.h | 2 ++ >>> fs/resctrl/rdtgroup.c | 18 ++++++++++++++++-- >>> 4 files changed, 32 insertions(+), 9 deletions(-) >>> >>> diff --git a/Documentation/filesystems/resctrl.rst b/Documentation/filesystems/resctrl.rst >>> index d955e8525af0..1e46231b929c 100644 >>> --- a/Documentation/filesystems/resctrl.rst >>> +++ b/Documentation/filesystems/resctrl.rst >>> @@ -90,12 +90,19 @@ related to allocation: >>> must be set when writing a mask. >>> "shareable_bits": >>> - Bitmask of shareable resource with other executing >>> - entities (e.g. I/O). User can use this when >>> - setting up exclusive cache partitions. Note that >>> - some platforms support devices that have their >>> - own settings for cache use which can over-ride >>> - these bits. >>> + Bitmask of shareable resource with other executing entities >>> + (e.g. I/O). Applies to all instances of this resource. User >>> + can use this when setting up exclusive cache partitions. >>> + Note that some platforms support devices that have their >>> + own settings for cache use which can over-ride these bits. >>> + >>> + When "io_alloc" is enabled, a portion of each cache instance can >>> + be configured for shared use between hardware and software. >>> + "bit_usage" should be used to see which portions of each cache >>> + instance is configured for hardware use via "io_alloc" feature >>> + because every cache instance can have its "io_alloc" bitmask >>> + configured independently via io_alloc_cbm. >>> + >>> "bit_usage": >> More ignored feedback. I was expecting changes to the "bit_usage" section. >> https://lore.kernel.org/lkml/94d075e0-6703-449f-9c0c-8e5973349dff@intel.com/ > > Yea. Added following text now. > > > diff --git a/Documentation/filesystems/resctrl.rst b/Documentation/filesystems/resctrl.rst > index 273c9c9389a4..0a56829407c9 100644 > --- a/Documentation/filesystems/resctrl.rst > +++ b/Documentation/filesystems/resctrl.rst > @@ -124,8 +124,11 @@ related to allocation: > "X": > Corresponding region is available for sharing and > used by hardware and software. These are the > - bits that appear in "shareable_bits" as > - well as a resource group's allocation. > + bits that appear in "shareable_bits" as well as a > + resource group's allocation. When io_alloc is enabled, > + the capacity bitmasks configured via io_alloc_cbm will > + also appear here, indicating the cache regions shared > + with I/O devices. This sounds as though when a bit is set in io_alloc_cbm then its corresponding position will contain an "X". An "X" will only be displayed if io_alloc_cbm has the corresponding bit set *and* the bit appears in a resource group's allocation. I think that patch #7 adds a very good definition of io_alloc_cbm and that it is unnecessary to duplicate it. Simply referring to io_alloc_cbm should thus be fine with user's search for it in the doc leading to a good description. Considering this, how about just: "X": Corresponding region is available for sharing and used by hardware and software. These are the bits that appear in "shareable_bits" or "io_alloc_cbm" as well as a resource group's allocation. Please also update the "H" section. Reinette
Hi Reinette, On 8/28/2025 10:11 PM, Reinette Chatre wrote: > Hi Babu, > > On 8/26/25 3:51 PM, Moger, Babu wrote: >> Hi Reinette, >> >> On 8/7/2025 8:54 PM, Reinette Chatre wrote: >>> Hi Babu >>> >>> On 8/5/25 4:30 PM, Babu Moger wrote: >>>> When the io_alloc feature is enabled, a portion of the cache can be >>>> configured for shared use between hardware and software. >>>> >>>> Update the bit_usage representation to reflect the io_alloc configuration. >>> ... but no update to the bit_usage docs :( >> >> Yes. Missed that. Will update the text. >> >> >>>> Signed-off-by: Babu Moger <babu.moger@amd.com> >>>> --- >>> .. >>> >>>> --- >>>> Documentation/filesystems/resctrl.rst | 19 +++++++++++++------ >>>> fs/resctrl/ctrlmondata.c | 2 +- >>>> fs/resctrl/internal.h | 2 ++ >>>> fs/resctrl/rdtgroup.c | 18 ++++++++++++++++-- >>>> 4 files changed, 32 insertions(+), 9 deletions(-) >>>> >>>> diff --git a/Documentation/filesystems/resctrl.rst b/Documentation/filesystems/resctrl.rst >>>> index d955e8525af0..1e46231b929c 100644 >>>> --- a/Documentation/filesystems/resctrl.rst >>>> +++ b/Documentation/filesystems/resctrl.rst >>>> @@ -90,12 +90,19 @@ related to allocation: >>>> must be set when writing a mask. >>>> "shareable_bits": >>>> - Bitmask of shareable resource with other executing >>>> - entities (e.g. I/O). User can use this when >>>> - setting up exclusive cache partitions. Note that >>>> - some platforms support devices that have their >>>> - own settings for cache use which can over-ride >>>> - these bits. >>>> + Bitmask of shareable resource with other executing entities >>>> + (e.g. I/O). Applies to all instances of this resource. User >>>> + can use this when setting up exclusive cache partitions. >>>> + Note that some platforms support devices that have their >>>> + own settings for cache use which can over-ride these bits. >>>> + >>>> + When "io_alloc" is enabled, a portion of each cache instance can >>>> + be configured for shared use between hardware and software. >>>> + "bit_usage" should be used to see which portions of each cache >>>> + instance is configured for hardware use via "io_alloc" feature >>>> + because every cache instance can have its "io_alloc" bitmask >>>> + configured independently via io_alloc_cbm. >>>> + >>>> "bit_usage": >>> More ignored feedback. I was expecting changes to the "bit_usage" section. >>> https://lore.kernel.org/lkml/94d075e0-6703-449f-9c0c-8e5973349dff@intel.com/ >> Yea. Added following text now. >> >> >> diff --git a/Documentation/filesystems/resctrl.rst b/Documentation/filesystems/resctrl.rst >> index 273c9c9389a4..0a56829407c9 100644 >> --- a/Documentation/filesystems/resctrl.rst >> +++ b/Documentation/filesystems/resctrl.rst >> @@ -124,8 +124,11 @@ related to allocation: >> "X": >> Corresponding region is available for sharing and >> used by hardware and software. These are the >> - bits that appear in "shareable_bits" as >> - well as a resource group's allocation. >> + bits that appear in "shareable_bits" as well as a >> + resource group's allocation. When io_alloc is enabled, >> + the capacity bitmasks configured via io_alloc_cbm will >> + also appear here, indicating the cache regions shared >> + with I/O devices. > This sounds as though when a bit is set in io_alloc_cbm then its corresponding position > will contain an "X". An "X" will only be displayed if io_alloc_cbm has the corresponding > bit set *and* the bit appears in a resource group's allocation. > > I think that patch #7 adds a very good definition of io_alloc_cbm and that it is > unnecessary to duplicate it. Simply referring to io_alloc_cbm should thus be fine with > user's search for it in the doc leading to a good description. > > Considering this, how about just: > "X": > Corresponding region is available for sharing and > used by hardware and software. These are the > bits that appear in "shareable_bits" or "io_alloc_cbm" as > well as a resource group's allocation. Looks good. > > > Please also update the "H" section. Sure. Thanks Babu
© 2016 - 2025 Red Hat, Inc.