[PATCH v9 09/10] fs/resctrl: Introduce interface to modify io_alloc Capacity Bit Masks

Babu Moger posted 10 patches 1 month ago
[PATCH v9 09/10] fs/resctrl: Introduce interface to modify io_alloc Capacity Bit Masks
Posted by Babu Moger 1 month ago
The io_alloc feature in resctrl enables system software to configure the
portion of the cache allocated for I/O traffic. When supported, the
io_alloc_cbm file in resctrl provides access to Capacity Bit Masks (CBMs)
reserved for I/O devices.

Enable users to modify io_alloc CBMs (Capacity Bit Masks) via the
io_alloc_cbm resctrl file when io_alloc is enabled.

To ensure consistent cache allocation when CDP is enabled, the CBMs
written to either L3CODE or L3DATA are mirrored to the other, keeping both
resource types synchronized.

Signed-off-by: Babu Moger <babu.moger@amd.com>
---
v9: Rewrote the changelog.
    Removed duplicated rdt_last_cmd_clear().
    Corrected rdt_staged_configs_clear() placement.
    Added one more example to update the schemata with multiple domains.
    Copied staged_config from peer when CDP is enabled.

v8: Updated changelog.
    Moved resctrl_io_alloc_parse_line() and resctrl_io_alloc_cbm_write() to
    fs/resctrl/ctrlmondata.c.
    Added resctrl_arch_get_cdp_enabled() check inside resctrl_io_alloc_parse_line().
    Made parse_cbm() static again as everything moved to ctrlmondata.c.

v7: Updated changelog.
    Updated CBMs for both CDP_DATA and CDP_CODE when CDP is enabled.

v6: Updated the user doc restctr.doc for minor texts.
    Changed the subject to fs/resctrl.

v5: Changes due to FS/ARCH code restructure. The files monitor.c/rdtgroup.c
    have been split between FS and ARCH directories.
    Changed the code to access the CBMs via either L3CODE or L3DATA resources.

v4: Removed resctrl_io_alloc_parse_cbm and called parse_cbm() directly.

v3: Minor changes due to changes in resctrl_arch_get_io_alloc_enabled()
    and resctrl_io_alloc_closid_get().
    Taken care of handling the CBM update when CDP is enabled.
    Updated the commit log to make it generic.

v2: Added more generic text in documentation.
---
 Documentation/filesystems/resctrl.rst | 11 ++++
 fs/resctrl/ctrlmondata.c              | 93 +++++++++++++++++++++++++++
 fs/resctrl/internal.h                 |  3 +
 fs/resctrl/rdtgroup.c                 |  3 +-
 4 files changed, 109 insertions(+), 1 deletion(-)

diff --git a/Documentation/filesystems/resctrl.rst b/Documentation/filesystems/resctrl.rst
index 15e3a4abf90e..7e3eda324de5 100644
--- a/Documentation/filesystems/resctrl.rst
+++ b/Documentation/filesystems/resctrl.rst
@@ -188,6 +188,17 @@ related to allocation:
 			# cat /sys/fs/resctrl/info/L3/io_alloc_cbm
 			0=ffff;1=ffff
 
+		CBMs can be configured by writing to the interface.
+
+		Example::
+
+			# echo 1=ff > /sys/fs/resctrl/info/L3/io_alloc_cbm
+			# cat /sys/fs/resctrl/info/L3/io_alloc_cbm
+			0=ffff;1=00ff
+			# echo 0=ff;1=f > /sys/fs/resctrl/info/L3/io_alloc_cbm
+			# cat /sys/fs/resctrl/info/L3/io_alloc_cbm
+			0=00ff;1=000f
+
 		When CDP is enabled "io_alloc_cbm" associated with the DATA and CODE
 		resources may reflect the same values. For example, values read from and
 		written to /sys/fs/resctrl/info/L3DATA/io_alloc_cbm may be reflected by
diff --git a/fs/resctrl/ctrlmondata.c b/fs/resctrl/ctrlmondata.c
index a4e861733a95..791ecb559b50 100644
--- a/fs/resctrl/ctrlmondata.c
+++ b/fs/resctrl/ctrlmondata.c
@@ -848,3 +848,96 @@ int resctrl_io_alloc_cbm_show(struct kernfs_open_file *of, struct seq_file *seq,
 	cpus_read_unlock();
 	return ret;
 }
+
+static int resctrl_io_alloc_parse_line(char *line,  struct rdt_resource *r,
+				       struct resctrl_schema *s, u32 closid)
+{
+	enum resctrl_conf_type peer_type;
+	struct rdt_parse_data data;
+	struct rdt_ctrl_domain *d;
+	char *dom = NULL, *id;
+	unsigned long dom_id;
+
+next:
+	if (!line || line[0] == '\0')
+		return 0;
+
+	dom = strsep(&line, ";");
+	id = strsep(&dom, "=");
+	if (!dom || kstrtoul(id, 10, &dom_id)) {
+		rdt_last_cmd_puts("Missing '=' or non-numeric domain\n");
+		return -EINVAL;
+	}
+
+	dom = strim(dom);
+	list_for_each_entry(d, &r->ctrl_domains, hdr.list) {
+		if (d->hdr.id == dom_id) {
+			data.buf = dom;
+			data.mode = RDT_MODE_SHAREABLE;
+			data.closid = closid;
+			if (parse_cbm(&data, s, d))
+				return -EINVAL;
+			/*
+			 * When CDP is enabled, update the schema for both CDP_DATA
+			 * and CDP_CODE.
+			 */
+			if (resctrl_arch_get_cdp_enabled(r->rid)) {
+				peer_type = resctrl_peer_type(s->conf_type);
+				memcpy(&d->staged_config[peer_type],
+				       &d->staged_config[s->conf_type],
+				       sizeof(d->staged_config[0]));
+			}
+			goto next;
+		}
+	}
+
+	return -EINVAL;
+}
+
+ssize_t resctrl_io_alloc_cbm_write(struct kernfs_open_file *of, char *buf,
+				   size_t nbytes, loff_t off)
+{
+	struct resctrl_schema *s = rdt_kn_parent_priv(of->kn);
+	struct rdt_resource *r = s->res;
+	u32 io_alloc_closid;
+	int ret = 0;
+
+	/* Valid input requires a trailing newline */
+	if (nbytes == 0 || buf[nbytes - 1] != '\n')
+		return -EINVAL;
+
+	buf[nbytes - 1] = '\0';
+
+	cpus_read_lock();
+	mutex_lock(&rdtgroup_mutex);
+	rdt_last_cmd_clear();
+
+	if (!r->cache.io_alloc_capable) {
+		rdt_last_cmd_printf("io_alloc is not supported on %s\n", s->name);
+		ret = -ENODEV;
+		goto out_unlock;
+	}
+
+	if (!resctrl_arch_get_io_alloc_enabled(r)) {
+		rdt_last_cmd_printf("io_alloc is not enabled on %s\n", s->name);
+		ret = -ENODEV;
+		goto out_unlock;
+	}
+
+	io_alloc_closid = resctrl_io_alloc_closid(r);
+
+	rdt_staged_configs_clear();
+	ret = resctrl_io_alloc_parse_line(buf, r, s, io_alloc_closid);
+	if (ret)
+		goto out_clear_configs;
+
+	ret = resctrl_arch_update_domains(r, io_alloc_closid);
+
+out_clear_configs:
+	rdt_staged_configs_clear();
+out_unlock:
+	mutex_unlock(&rdtgroup_mutex);
+	cpus_read_unlock();
+
+	return ret ?: nbytes;
+}
diff --git a/fs/resctrl/internal.h b/fs/resctrl/internal.h
index 49934cd3dc40..5467c3ad1b6d 100644
--- a/fs/resctrl/internal.h
+++ b/fs/resctrl/internal.h
@@ -392,6 +392,9 @@ ssize_t resctrl_io_alloc_write(struct kernfs_open_file *of, char *buf,
 int resctrl_io_alloc_cbm_show(struct kernfs_open_file *of, struct seq_file *seq,
 			      void *v);
 
+ssize_t resctrl_io_alloc_cbm_write(struct kernfs_open_file *of, char *buf,
+				   size_t nbytes, loff_t off);
+
 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 71003328fdda..ddac021c02d8 100644
--- a/fs/resctrl/rdtgroup.c
+++ b/fs/resctrl/rdtgroup.c
@@ -1919,9 +1919,10 @@ static struct rftype res_common_files[] = {
 	},
 	{
 		.name		= "io_alloc_cbm",
-		.mode		= 0444,
+		.mode		= 0644,
 		.kf_ops		= &rdtgroup_kf_single_ops,
 		.seq_show	= resctrl_io_alloc_cbm_show,
+		.write		= resctrl_io_alloc_cbm_write,
 	},
 	{
 		.name		= "max_threshold_occupancy",
-- 
2.34.1
Re: [PATCH v9 09/10] fs/resctrl: Introduce interface to modify io_alloc Capacity Bit Masks
Posted by Reinette Chatre 2 weeks, 1 day ago
Hi Babu,

On 9/2/25 3:41 PM, Babu Moger wrote:
> The io_alloc feature in resctrl enables system software to configure the
> portion of the cache allocated for I/O traffic. When supported, the
> io_alloc_cbm file in resctrl provides access to Capacity Bit Masks (CBMs)
> reserved for I/O devices.

reserved -> allocated?

The cache portions represented by CBMs are not reserved for I/O devices - these
portions are available for sharing and can still be used by CPU cache allocation. 

> 
> Enable users to modify io_alloc CBMs (Capacity Bit Masks) via the

Can drop "(Capacity Bit Masks)" since acronym was spelled out in first paragraph.

> io_alloc_cbm resctrl file when io_alloc is enabled.
> 
> To ensure consistent cache allocation when CDP is enabled, the CBMs

This is not about "consistent cache allocation" but instead a consistent user
interface. How about "To present consistent I/O allocation information to user
space when CDP is enabled, the CBMs ..."

> written to either L3CODE or L3DATA are mirrored to the other, keeping both
> resource types synchronized.

(needs imperative)

> 
> Signed-off-by: Babu Moger <babu.moger@amd.com>
> ---

...

> ---
>  Documentation/filesystems/resctrl.rst | 11 ++++
>  fs/resctrl/ctrlmondata.c              | 93 +++++++++++++++++++++++++++
>  fs/resctrl/internal.h                 |  3 +
>  fs/resctrl/rdtgroup.c                 |  3 +-
>  4 files changed, 109 insertions(+), 1 deletion(-)
> 
> diff --git a/Documentation/filesystems/resctrl.rst b/Documentation/filesystems/resctrl.rst
> index 15e3a4abf90e..7e3eda324de5 100644
> --- a/Documentation/filesystems/resctrl.rst
> +++ b/Documentation/filesystems/resctrl.rst
> @@ -188,6 +188,17 @@ related to allocation:
>  			# cat /sys/fs/resctrl/info/L3/io_alloc_cbm
>  			0=ffff;1=ffff
>  
> +		CBMs can be configured by writing to the interface.
> +
> +		Example::
> +
> +			# echo 1=ff > /sys/fs/resctrl/info/L3/io_alloc_cbm
> +			# cat /sys/fs/resctrl/info/L3/io_alloc_cbm
> +			0=ffff;1=00ff
> +			# echo 0=ff;1=f > /sys/fs/resctrl/info/L3/io_alloc_cbm

To accommodate how a shell may interpret above this should perhaps be (see schemata examples):

			# echo "0=ff;1=f" > /sys/fs/resctrl/info/L3/io_alloc_cbm

> +			# cat /sys/fs/resctrl/info/L3/io_alloc_cbm
> +			0=00ff;1=000f
> +
>  		When CDP is enabled "io_alloc_cbm" associated with the DATA and CODE
>  		resources may reflect the same values. For example, values read from and
>  		written to /sys/fs/resctrl/info/L3DATA/io_alloc_cbm may be reflected by
> diff --git a/fs/resctrl/ctrlmondata.c b/fs/resctrl/ctrlmondata.c
> index a4e861733a95..791ecb559b50 100644
> --- a/fs/resctrl/ctrlmondata.c
> +++ b/fs/resctrl/ctrlmondata.c
> @@ -848,3 +848,96 @@ int resctrl_io_alloc_cbm_show(struct kernfs_open_file *of, struct seq_file *seq,
>  	cpus_read_unlock();
>  	return ret;
>  }
> +
> +static int resctrl_io_alloc_parse_line(char *line,  struct rdt_resource *r,
> +				       struct resctrl_schema *s, u32 closid)
> +{
> +	enum resctrl_conf_type peer_type;
> +	struct rdt_parse_data data;
> +	struct rdt_ctrl_domain *d;
> +	char *dom = NULL, *id;
> +	unsigned long dom_id;
> +
> +next:
> +	if (!line || line[0] == '\0')
> +		return 0;
> +
> +	dom = strsep(&line, ";");
> +	id = strsep(&dom, "=");
> +	if (!dom || kstrtoul(id, 10, &dom_id)) {
> +		rdt_last_cmd_puts("Missing '=' or non-numeric domain\n");
> +		return -EINVAL;
> +	}
> +
> +	dom = strim(dom);
> +	list_for_each_entry(d, &r->ctrl_domains, hdr.list) {
> +		if (d->hdr.id == dom_id) {
> +			data.buf = dom;
> +			data.mode = RDT_MODE_SHAREABLE;
> +			data.closid = closid;
> +			if (parse_cbm(&data, s, d))
> +				return -EINVAL;
> +			/*
> +			 * When CDP is enabled, update the schema for both CDP_DATA
> +			 * and CDP_CODE.

The comment just describes what can be seen from the code. How about something like
"Keep io_alloc CLOSID's CBM of CDP_CODE and CDP_DATA in sync."?

Of note is that these comments are generic while earlier comments related to CDP are L3
specific ("L3CODE" and "L3DATA"). Having resource specific names in generic code is not ideal,
even if first implementation is only for L3. I think this was done in many places though,
even in a couple of the changelogs I created and I now realize the impact after seeing
this comment. Could you please take a look to make the name generic when it is used in
generic changelog and comments?

> +			 */
> +			if (resctrl_arch_get_cdp_enabled(r->rid)) {
> +				peer_type = resctrl_peer_type(s->conf_type);
> +				memcpy(&d->staged_config[peer_type],
> +				       &d->staged_config[s->conf_type],
> +				       sizeof(d->staged_config[0]));
> +			}
> +			goto next;
> +		}
> +	}
> +
> +	return -EINVAL;
> +}
> +
> +ssize_t resctrl_io_alloc_cbm_write(struct kernfs_open_file *of, char *buf,
> +				   size_t nbytes, loff_t off)
> +{
> +	struct resctrl_schema *s = rdt_kn_parent_priv(of->kn);
> +	struct rdt_resource *r = s->res;
> +	u32 io_alloc_closid;
> +	int ret = 0;
> +
> +	/* Valid input requires a trailing newline */
> +	if (nbytes == 0 || buf[nbytes - 1] != '\n')
> +		return -EINVAL;
> +
> +	buf[nbytes - 1] = '\0';
> +
> +	cpus_read_lock();
> +	mutex_lock(&rdtgroup_mutex);
> +	rdt_last_cmd_clear();
> +
> +	if (!r->cache.io_alloc_capable) {
> +		rdt_last_cmd_printf("io_alloc is not supported on %s\n", s->name);
> +		ret = -ENODEV;
> +		goto out_unlock;
> +	}
> +
> +	if (!resctrl_arch_get_io_alloc_enabled(r)) {
> +		rdt_last_cmd_printf("io_alloc is not enabled on %s\n", s->name);
> +		ret = -ENODEV;

Compare to comment in patch #7 where the same error of io_alloc not being enabled results
in different error code (EINVAL). Please keep these consistent.

> +		goto out_unlock;
> +	}
> +
> +	io_alloc_closid = resctrl_io_alloc_closid(r);
> +
> +	rdt_staged_configs_clear();
> +	ret = resctrl_io_alloc_parse_line(buf, r, s, io_alloc_closid);
> +	if (ret)
> +		goto out_clear_configs;
> +
> +	ret = resctrl_arch_update_domains(r, io_alloc_closid);
> +
> +out_clear_configs:
> +	rdt_staged_configs_clear();
> +out_unlock:
> +	mutex_unlock(&rdtgroup_mutex);
> +	cpus_read_unlock();
> +
> +	return ret ?: nbytes;
> +}

Reinette
Re: [PATCH v9 09/10] fs/resctrl: Introduce interface to modify io_alloc Capacity Bit Masks
Posted by Moger, Babu 1 week, 6 days ago
Hi Reinette,

On 9/18/2025 1:03 AM, Reinette Chatre wrote:
> Hi Babu,
> 
> On 9/2/25 3:41 PM, Babu Moger wrote:
>> The io_alloc feature in resctrl enables system software to configure the
>> portion of the cache allocated for I/O traffic. When supported, the
>> io_alloc_cbm file in resctrl provides access to Capacity Bit Masks (CBMs)
>> reserved for I/O devices.
> 
> reserved -> allocated?

Sure.

> 
> The cache portions represented by CBMs are not reserved for I/O devices - these
> portions are available for sharing and can still be used by CPU cache allocation.
> 
>>
>> Enable users to modify io_alloc CBMs (Capacity Bit Masks) via the
> 
> Can drop "(Capacity Bit Masks)" since acronym was spelled out in first paragraph.

sure.

> 
>> io_alloc_cbm resctrl file when io_alloc is enabled.
>>
>> To ensure consistent cache allocation when CDP is enabled, the CBMs
> 
> This is not about "consistent cache allocation" but instead a consistent user
> interface. How about "To present consistent I/O allocation information to user
> space when CDP is enabled, the CBMs ..."
> 
>> written to either L3CODE or L3DATA are mirrored to the other, keeping both
>> resource types synchronized.
> 
> (needs imperative)

Here is the updated full changelog.

fs/resctrl: Introduce interface to modify io_alloc Capacity Bit Masks

The io_alloc feature in resctrl enables system software to configure the
portion of the cache allocated for I/O traffic. When supported, the
io_alloc_cbm file in resctrl provides access to Capacity Bit Masks 
(CBMs) allocated for I/O devices.

Enable users to modify io_alloc CBMs via io_alloc_cbm resctrl file when 
the feature is enabled.

Mirror the CBMs between CDP_CODE and CDP_DATA when CDP is enabled to 
present consistent I/O allocation information to user space and keep 
both resource types synchronized.

Signed-off-by: Babu Moger <babu.moger@amd.com>


> 
>>
>> Signed-off-by: Babu Moger <babu.moger@amd.com>
>> ---
> 
> ...
> 
>> ---
>>   Documentation/filesystems/resctrl.rst | 11 ++++
>>   fs/resctrl/ctrlmondata.c              | 93 +++++++++++++++++++++++++++
>>   fs/resctrl/internal.h                 |  3 +
>>   fs/resctrl/rdtgroup.c                 |  3 +-
>>   4 files changed, 109 insertions(+), 1 deletion(-)
>>
>> diff --git a/Documentation/filesystems/resctrl.rst b/Documentation/filesystems/resctrl.rst
>> index 15e3a4abf90e..7e3eda324de5 100644
>> --- a/Documentation/filesystems/resctrl.rst
>> +++ b/Documentation/filesystems/resctrl.rst
>> @@ -188,6 +188,17 @@ related to allocation:
>>   			# cat /sys/fs/resctrl/info/L3/io_alloc_cbm
>>   			0=ffff;1=ffff
>>   
>> +		CBMs can be configured by writing to the interface.
>> +
>> +		Example::
>> +
>> +			# echo 1=ff > /sys/fs/resctrl/info/L3/io_alloc_cbm
>> +			# cat /sys/fs/resctrl/info/L3/io_alloc_cbm
>> +			0=ffff;1=00ff
>> +			# echo 0=ff;1=f > /sys/fs/resctrl/info/L3/io_alloc_cbm
> 
> To accommodate how a shell may interpret above this should perhaps be (see schemata examples):

Sure.

> 
> 			# echo "0=ff;1=f" > /sys/fs/resctrl/info/L3/io_alloc_cbm
> 
>> +			# cat /sys/fs/resctrl/info/L3/io_alloc_cbm
>> +			0=00ff;1=000f
>> +
>>   		When CDP is enabled "io_alloc_cbm" associated with the DATA and CODE
>>   		resources may reflect the same values. For example, values read from and
>>   		written to /sys/fs/resctrl/info/L3DATA/io_alloc_cbm may be reflected by
>> diff --git a/fs/resctrl/ctrlmondata.c b/fs/resctrl/ctrlmondata.c
>> index a4e861733a95..791ecb559b50 100644
>> --- a/fs/resctrl/ctrlmondata.c
>> +++ b/fs/resctrl/ctrlmondata.c
>> @@ -848,3 +848,96 @@ int resctrl_io_alloc_cbm_show(struct kernfs_open_file *of, struct seq_file *seq,
>>   	cpus_read_unlock();
>>   	return ret;
>>   }
>> +
>> +static int resctrl_io_alloc_parse_line(char *line,  struct rdt_resource *r,
>> +				       struct resctrl_schema *s, u32 closid)
>> +{
>> +	enum resctrl_conf_type peer_type;
>> +	struct rdt_parse_data data;
>> +	struct rdt_ctrl_domain *d;
>> +	char *dom = NULL, *id;
>> +	unsigned long dom_id;
>> +
>> +next:
>> +	if (!line || line[0] == '\0')
>> +		return 0;
>> +
>> +	dom = strsep(&line, ";");
>> +	id = strsep(&dom, "=");
>> +	if (!dom || kstrtoul(id, 10, &dom_id)) {
>> +		rdt_last_cmd_puts("Missing '=' or non-numeric domain\n");
>> +		return -EINVAL;
>> +	}
>> +
>> +	dom = strim(dom);
>> +	list_for_each_entry(d, &r->ctrl_domains, hdr.list) {
>> +		if (d->hdr.id == dom_id) {
>> +			data.buf = dom;
>> +			data.mode = RDT_MODE_SHAREABLE;
>> +			data.closid = closid;
>> +			if (parse_cbm(&data, s, d))
>> +				return -EINVAL;
>> +			/*
>> +			 * When CDP is enabled, update the schema for both CDP_DATA
>> +			 * and CDP_CODE.
> 
> The comment just describes what can be seen from the code. How about something like
> "Keep io_alloc CLOSID's CBM of CDP_CODE and CDP_DATA in sync."?

Sure.

> 
> Of note is that these comments are generic while earlier comments related to CDP are L3
> specific ("L3CODE" and "L3DATA"). Having resource specific names in generic code is not ideal,
> even if first implementation is only for L3. I think this was done in many places though,
> even in a couple of the changelogs I created and I now realize the impact after seeing
> this comment. Could you please take a look to make the name generic when it is used in
> generic changelog and comments?

Sure.

> 
>> +			 */
>> +			if (resctrl_arch_get_cdp_enabled(r->rid)) {
>> +				peer_type = resctrl_peer_type(s->conf_type);
>> +				memcpy(&d->staged_config[peer_type],
>> +				       &d->staged_config[s->conf_type],
>> +				       sizeof(d->staged_config[0]));
>> +			}
>> +			goto next;
>> +		}
>> +	}
>> +
>> +	return -EINVAL;
>> +}
>> +
>> +ssize_t resctrl_io_alloc_cbm_write(struct kernfs_open_file *of, char *buf,
>> +				   size_t nbytes, loff_t off)
>> +{
>> +	struct resctrl_schema *s = rdt_kn_parent_priv(of->kn);
>> +	struct rdt_resource *r = s->res;
>> +	u32 io_alloc_closid;
>> +	int ret = 0;
>> +
>> +	/* Valid input requires a trailing newline */
>> +	if (nbytes == 0 || buf[nbytes - 1] != '\n')
>> +		return -EINVAL;
>> +
>> +	buf[nbytes - 1] = '\0';
>> +
>> +	cpus_read_lock();
>> +	mutex_lock(&rdtgroup_mutex);
>> +	rdt_last_cmd_clear();
>> +
>> +	if (!r->cache.io_alloc_capable) {
>> +		rdt_last_cmd_printf("io_alloc is not supported on %s\n", s->name);
>> +		ret = -ENODEV;
>> +		goto out_unlock;
>> +	}
>> +
>> +	if (!resctrl_arch_get_io_alloc_enabled(r)) {
>> +		rdt_last_cmd_printf("io_alloc is not enabled on %s\n", s->name);
>> +		ret = -ENODEV;
> 
> Compare to comment in patch #7 where the same error of io_alloc not being enabled results
> in different error code (EINVAL). Please keep these consistent.

Yes. Changed it to -EINVAL.

thanks
Babu


> 
>
Re: [PATCH v9 09/10] fs/resctrl: Introduce interface to modify io_alloc Capacity Bit Masks
Posted by Reinette Chatre 1 week, 3 days ago
Hi Babu,

On 9/19/25 1:49 PM, Moger, Babu wrote:
 
> Here is the updated full changelog.
> 
> fs/resctrl: Introduce interface to modify io_alloc Capacity Bit Masks

I do not think it is necessary to use upper case if not following it
by the acronym. I also think "bitmask" is usually one word? So:
	fs/resctrl: Introduce interface to modify io_alloc capacity bitmasks

> 
> The io_alloc feature in resctrl enables system software to configure the
> portion of the cache allocated for I/O traffic. When supported, the
> io_alloc_cbm file in resctrl provides access to Capacity Bit Masks (CBMs) allocated for I/O devices.
> 
> Enable users to modify io_alloc CBMs via io_alloc_cbm resctrl file when the feature is enabled.

(nit) can be made more specific with:

	Enable users to modify io_alloc CBMs by writing to the io_alloc_cbm resctrl
	file when the io_alloc feature is enabled.

> 
> Mirror the CBMs between CDP_CODE and CDP_DATA when CDP is enabled to present consistent I/O allocation information to user space and keep both resource types synchronized.

I think "and keep both resource types synchronized" is redundant considering the sentence
starts with "Mirror the CBMs"?

Reinette
Re: [PATCH v9 09/10] fs/resctrl: Introduce interface to modify io_alloc Capacity Bit Masks
Posted by Moger, Babu 1 week ago
Hi Reinette,

On 9/22/25 17:48, Reinette Chatre wrote:
> Hi Babu,
> 
> On 9/19/25 1:49 PM, Moger, Babu wrote:
>  
>> Here is the updated full changelog.
>>
>> fs/resctrl: Introduce interface to modify io_alloc Capacity Bit Masks
> 
> I do not think it is necessary to use upper case if not following it
> by the acronym. I also think "bitmask" is usually one word? So:
> 	fs/resctrl: Introduce interface to modify io_alloc capacity bitmasks
> 

Sure.

>>
>> The io_alloc feature in resctrl enables system software to configure the
>> portion of the cache allocated for I/O traffic. When supported, the
>> io_alloc_cbm file in resctrl provides access to Capacity Bit Masks (CBMs) allocated for I/O devices.
>>
>> Enable users to modify io_alloc CBMs via io_alloc_cbm resctrl file when the feature is enabled.
> 
> (nit) can be made more specific with:
> 
> 	Enable users to modify io_alloc CBMs by writing to the io_alloc_cbm resctrl
> 	file when the io_alloc feature is enabled.
> 

Sure.

>>
>> Mirror the CBMs between CDP_CODE and CDP_DATA when CDP is enabled to present consistent I/O allocation information to user space and keep both resource types synchronized.
> 
> I think "and keep both resource types synchronized" is redundant considering the sentence
> starts with "Mirror the CBMs"?

Removed "and keep both resource types synchronized."
-- 
Thanks
Babu Moger