From: Reinette Chatre <reinette.chatre@intel.com>
To: Babu Moger <babu.moger@amd.com>, Tony Luck <tony.luck@intel.com>,
"Ben Horgan" <ben.horgan@arm.com>,
James Morse <james.morse@arm.com>,
Dave Martin <Dave.Martin@arm.com>,
Drew Fustini <fustini@kernel.org>,
Fenghua Yu <fenghuay@nvidia.com>, Chen Yu <yu.c.chen@intel.com>
Cc: Borislav Petkov <bp@alien8.de>,
Thomas Gleixner <tglx@linutronix.de>,
"Dave Hansen" <dave.hansen@linux.intel.com>,
Peter Newman <peternewman@google.com>,
"x86@kernel.org" <x86@kernel.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: [RFC] mpam,x86,fs/resctrl: Generic schema description Proof of Concept
Date: Tue, 2 Jun 2026 15:56:19 -0700 [thread overview]
Message-ID: <533f6b30-6d6d-4962-a7f5-b7b83d888f6b@intel.com> (raw)
In-Reply-To: <188147f4-db82-4aa6-adb0-d1a26565cfdd@amd.com>
Hi Babu,
On 6/2/26 1:23 PM, Babu Moger wrote:
> Hi Reinette,
>
> For some reason, I couldn’t find your patch on lore.kernel.org:
> https://lore.kernel.org/lkml/?q=Reinette+Chatre
How about:
https://lore.kernel.org/lkml/aab804b9-e8b5-40ad-a85b-af7033391243@intel.com/
>
> I eventually located it here:
> https://sashiko.dev/#/message/aab804b9-e8b5-40ad-a85b-af7033391243%40intel.com
>
> Thanks for sharing the patches. I’m still reviewing them.
>
> I was able to build and boot the kernel and can see the MIN and MAX controls. After moving your test code to __rdt_get_mem_config_amd().
Thank you very much for trying it out.
> On 5/29/26 13:06, Reinette Chatre wrote:
...
>> Primary resctrl fs data structure changes
>> =========================================
>>
>> Introduces a control represented by struct resctrl_ctrl that looks as below. To make
>> the changes easier to follow I kept some of the original names to help communicate
>> where familiar data structures land.
>>
>> What to notice about a control is that it has some common properties required
>> from all controls (scope, type, etc.) and then depending on the type of control
>> (RESCTRL_CTRL_BITMAP or RESCTRL_CTRL_SCALAR) there are type specific properties.
>>
>> /**
>> * struct resctrl_ctrl - A resource control
>> * @entry: List entry of rdt_resource::controls
>> * @scope: Scope of the resource that this control allocates
>> * @domains: RCU list of all control domains
>> * @type: The control type that determines the properties of the control,
>> * format string for displaying control values to user space, and
>> * parser of control values provided by user space.
>> * @name: Name of the control. Appended to final resource name
>> * (rdt_resource_final::name) to create final schema entry.
>> * Specifically, "rdt_resource_final::name"_"resctrl_ctrl::name".
>> * For example, with resource name "MB" and control name "MAX" the
>> * schema entry will be "MB_MAX".
>> * @cache: Cache allocation control properties.
>> * @membw: Bandwidth control properties.
>> */
>> struct resctrl_ctrl {
>> struct list_head entry;
>> enum resctrl_scope scope;
>> struct list_head domains;
>> enum resctrl_ctrl_type type;
>> enum resctrl_ctrl_name name;
>> union {
>> struct resctrl_cache cache;
>> struct resctrl_membw membw;
>> };
>> };
>>
>> Two members summarize how this new structure fits into the rest of resctrl:
>> a) resctrl_ctrl::entry
>> Since a resource can support multiple controls there is a new list
>> in struct rdt_resource named "controls" that contains the list of all
>> controls supported by the resource.
>> b) resctrl_ctrl::domains
>> Instead of the list of control domains belonging to a resource they
>> now belong to the control self. By doing so resctrl can support resource
>> controls at different scope for the same resource. This is intended to
>> support some upcoming MPAM and RISC-V usages.
>>
>
> I like the idea of supporting multiple controls for each resource.
>
> With these patches, now we have one list containing all the controls.
>
> However, in case of RDT_RESOURCE_L3, we have two lists "mon_domains" and "controls". mon_domains list deals with monitoring and control deals with control parts(multiple).
>
> Have you thought about making the list("control") generic so that the control can be monitoring also. It will just one list containing multiple controls or monitor.
The control list adds an additional layer of abstraction just for control management,
independent from monitoring. The mon_domains list is unchanged while each control now
has its own ctrl_domains list.
Here is an attempt to visualize how a resource with two monitoring domains, and two controls,
each with two control domains end up being managed:
+-------------------------+
| struct rdt_resource |
+-------------------------+
| ... |
| controls (list_head) |---------+
| mon_domains (list_head) |---+ |
| ... | | |
+-------------------------+ | |
| |
+---------------------------+ |
| |
v v
+-----------------------------+ +-------------------------+
| struct rdt_l3_mon_domain #1 | | struct resctrl_ctrl #A |
+-----------------------------+ +-------------------------+
| rdt_domain_hdr |-+ | entry (list_head) | +----------------------------+
| ... | | | domains (list_head) |------>| struct rdt_ctrl_domain #A1 |
+-----------------------------+ | | ... | +----------------------------+
| +-------------------------+ | rdt_domain_hdr |---+
+-----------------------------+ | | ... | |
| (next) | (next) +----------------------------+ |
v v |
+-----------------------------+ +-------------------------+ +----------------------------+<--+
| struct rdt_l3_mon_domain #2 | | struct resctrl_ctrl #B | | struct rdt_ctrl_domain #A2 |
+-----------------------------+ +-------------------------+ +----------------------------+
| rdt_domain_hdr | | entry (list_head) | | rdt_domain_hdr |
| ... | | domains (list_head) |----n | ... |
+-----------------------------+ | ... | | +----------------------------+
+-------------------------+ |
|
+----------------------------+
|
v
+----------------------------+
| struct rdt_ctrl_domain #B1 |
+----------------------------+
| rdt_domain_hdr |---+
| ... | |
+----------------------------+ |
|
+----------------------------+<--+
| struct rdt_ctrl_domain #B2 |
+----------------------------+
| rdt_domain_hdr |
| ... |
+----------------------------+
resctrl used to manage single domains that are capable of both monitoring and control
but this was split to support scenario where monitoring and control of a resource are
done at different scope. See
cd84f72b6a5c ("x86/resctrl: Prepare for different scope for control/monitor operations")
This feature further expands the difference between monitoring and control since now there
can be multiple instances of a control domain (one per control) associated with a resource
while monitoring still just supports one monitoring domain per resource.
I thus cannot see how this can be accomplished with a single list. Could you sketch out
what you have in mind?
...
>>
>> Patch 54:
>> Teach resctrl fs about "MIN" and "MAX" controls.
>>
>> Patch 55:
>> Sample of "MIN" and "MAX" memory bandwidth controls for x86.
>
> My assumption is that the MIN and MAX controls here are just examples, correct?
>
> You only mentioned patch 55 as "NOT_FOR_INCLUSION". I assume patch 54 should also be marked as "NOT_FOR_INCLUSION"?
While patch 55 is the first and only "user" of patch 54 I believe that patch 54 (or some variant
of it) will stay since we already know that both MPAM and Intel need to support min and max controls.
Reinette
next prev parent reply other threads:[~2026-06-02 22:56 UTC|newest]
Thread overview: 108+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-29 18:06 Reinette Chatre
2026-06-02 20:23 ` Babu Moger
2026-06-02 22:56 ` Reinette Chatre [this message]
2026-06-03 1:14 ` Moger, Babu
2026-06-03 3:55 ` Reinette Chatre
2026-06-03 14:40 ` Babu Moger
2026-06-02 23:32 ` Chen, Yu C
2026-06-03 3:45 ` Reinette Chatre
2026-06-03 11:53 ` Chen, Yu C
2026-06-04 16:37 ` Reinette Chatre
2026-06-05 15:43 ` Chen, Yu C
2026-06-05 16:20 ` Reinette Chatre
2026-06-03 15:15 ` Ben Horgan
2026-06-03 19:34 ` Drew Fustini
2026-06-04 11:24 ` Ben Horgan
2026-06-04 17:38 ` Drew Fustini
2026-06-12 1:30 ` Shaopeng Tan (Fujitsu)
2026-06-17 15:29 ` Reinette Chatre
2026-06-19 1:42 ` Shaopeng Tan (Fujitsu)
2026-06-22 16:10 ` Reinette Chatre
2026-06-23 5:04 ` Shaopeng Tan (Fujitsu)
2026-06-04 21:05 ` Reinette Chatre
2026-06-05 19:35 ` Drew Fustini
2026-06-06 5:10 ` Drew Fustini
2026-06-06 5:23 ` Drew Fustini
2026-06-04 17:43 ` Reinette Chatre
2026-06-05 14:53 ` Ben Horgan
2026-06-05 15:39 ` Reinette Chatre
2026-06-05 16:37 ` Ben Horgan
2026-06-08 16:16 ` Reinette Chatre
2026-06-09 10:10 ` Ben Horgan
2026-06-09 15:28 ` Reinette Chatre
2026-06-09 16:37 ` Ben Horgan
2026-06-09 17:41 ` Reinette Chatre
2026-06-10 7:09 ` Chen, Yu C
2026-06-10 14:27 ` Chen, Yu C
2026-06-10 16:13 ` Reinette Chatre
2026-06-10 17:57 ` Chen, Yu C
2026-06-10 18:10 ` Reinette Chatre
2026-06-10 15:59 ` Reinette Chatre
2026-06-10 18:05 ` Chen, Yu C
2026-06-11 3:26 ` Chen, Yu C
2026-06-11 15:45 ` Reinette Chatre
2026-06-26 15:46 ` Chen, Yu C
2026-07-02 14:27 ` Ben Horgan
2026-07-03 9:01 ` Chen, Yu C
2026-07-14 21:37 ` Reinette Chatre
2026-07-15 2:49 ` Chen, Yu C
2026-06-10 4:31 ` Drew Fustini
2026-06-10 15:14 ` Reinette Chatre
2026-06-03 18:46 ` Luck, Tony
2026-06-04 10:02 ` Ben Horgan
2026-06-04 21:42 ` Reinette Chatre
2026-07-08 12:56 ` Chen, Yu C
2026-07-14 21:39 ` Reinette Chatre
2026-06-03 22:14 ` Drew Fustini
2026-06-04 21:47 ` Reinette Chatre
2026-06-05 19:48 ` Drew Fustini
2026-06-15 21:05 ` Moger, Babu
2026-06-17 17:18 ` Reinette Chatre
2026-06-17 20:29 ` Babu Moger
2026-06-24 19:08 ` Fenghua Yu
2026-06-24 22:22 ` Reinette Chatre
2026-06-25 1:26 ` Fenghua Yu
2026-06-25 15:43 ` Reinette Chatre
2026-07-10 20:59 ` Fenghua Yu
2026-07-14 22:06 ` Reinette Chatre
2026-07-15 8:34 ` Ben Horgan
2026-07-15 15:41 ` Reinette Chatre
2026-07-16 14:59 ` Ben Horgan
2026-07-16 16:02 ` Luck, Tony
2026-07-16 16:22 ` Ben Horgan
2026-07-16 17:50 ` Reinette Chatre
2026-07-17 10:27 ` Ben Horgan
2026-07-16 16:04 ` Reinette Chatre
2026-07-16 16:44 ` Ben Horgan
2026-07-16 17:07 ` Reinette Chatre
2026-07-17 12:20 ` Ben Horgan
2026-07-17 16:00 ` Reinette Chatre
2026-07-20 13:30 ` Ben Horgan
2026-07-20 22:54 ` Reinette Chatre
2026-07-21 13:23 ` Ben Horgan
2026-07-21 17:30 ` Reinette Chatre
2026-07-21 20:02 ` Babu Moger
2026-07-22 10:47 ` Ben Horgan
2026-07-22 17:02 ` Babu Moger
2026-08-04 9:11 ` Ben Horgan
2026-08-04 14:09 ` Babu Moger
2026-08-04 15:11 ` Ben Horgan
2026-08-04 19:51 ` Babu Moger
2026-08-05 6:06 ` Reinette Chatre
2026-08-06 9:24 ` Ben Horgan
2026-08-07 22:53 ` Reinette Chatre
2026-07-22 10:03 ` Ben Horgan
2026-07-22 16:32 ` Reinette Chatre
2026-07-23 7:58 ` Ben Horgan
2026-07-23 15:52 ` Reinette Chatre
2026-07-23 22:08 ` Fenghua Yu
2026-07-27 9:13 ` Ben Horgan
2026-07-17 16:02 ` Chen, Yu C
2026-07-17 16:55 ` Reinette Chatre
2026-07-23 0:17 ` Fenghua Yu
2026-07-23 16:18 ` Reinette Chatre
2026-07-23 22:27 ` Fenghua Yu
2026-07-23 23:31 ` Reinette Chatre
2026-07-02 13:37 ` Ben Horgan
2026-07-02 15:16 ` Fenghua Yu
2026-07-03 13:42 ` Ben Horgan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=533f6b30-6d6d-4962-a7f5-b7b83d888f6b@intel.com \
--to=reinette.chatre@intel.com \
--cc=Dave.Martin@arm.com \
--cc=babu.moger@amd.com \
--cc=ben.horgan@arm.com \
--cc=bp@alien8.de \
--cc=dave.hansen@linux.intel.com \
--cc=fenghuay@nvidia.com \
--cc=fustini@kernel.org \
--cc=james.morse@arm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=peternewman@google.com \
--cc=tglx@linutronix.de \
--cc=tony.luck@intel.com \
--cc=x86@kernel.org \
--cc=yu.c.chen@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®