Re: [RFC] mpam,x86,fs/resctrl: Generic schema description Proof of Concept

From: Chen, Yu C

Date: Wed Jun 10 2026 - 14:00:19 EST


Hi Reinette,

On 6/11/2026 12:13 AM, Reinette Chatre wrote:
Hi Chenyu,


[ ... ]

Regarding the region-aware RDT case, I wonder if we actually need to emulate the
legacy MB control using MB_MAX. First, when we refer to the "legacy" for region-aware
RDT, I suppose it corresponds to "MSR access" plus "percentage-based control".

case 1:
If the platform does not support region-aware RDT (no ERDT table is detected),
the MB is naturally the "legacy" MB, and the info directory would look like:

info
└── MB
         └── resource_schemata
                 └── MB

case 2:If the platform supports region-aware RDT (i.e., ERDT parsing succeeds),
then the structure looks like below:

info
└── MB
         └── resource_schema
                 └── MB                  <=== legacy
                 └── MB_REGION0_OPT
                 └── MB_REGION1_OPT
                 └── MB_REGION0_MIN
                 └── MB_REGION1_MIX
                 └── MB_REGION0_MAX
                 └── MB_REGION1_MAX


This may be slightly off-topic from MAX emulation, but I have another
thought regarding multi-controllers for rdt_resource:
As we know, with N regions, an MB resource will have a total of N × 3
controllers. Given that the current PoC iterates through every controller
within the resource in resctrl_resource_ctrl_get(), could this increase
lookup latency?

resctrl_resource_ctrl_get() is only called when the user writes to the
schemata file and since user can modify any of the enabled controls with
a write to the schemata file it is necessary to iterate through all controls
to find a match.


Yes, I was thinking if we can speed up this write by not iterating the control
list.


I studied the cgroup code and found that each controller for a cgroup
resource uses a dedicated cftype. For example:
static struct cftype memory_files[] = {
    { .name = "min",  .write = memory_min_write,  .seq_show = memory_min_show },
    { .name = "max",  .write = memory_max_write,  .seq_show = memory_max_show },
    ...
};

The PoC currently has "static struct rftype ctrl_files[] " that associates an
rftype with every property of a control which enables all user space interactions
with the individual controls to be direct.


Yes we have dedicated rftype for the read-only info/properties.


The min/max memory controllers can be accessed in O(1) time using:
of_cft(of) -> kn->priv, and cft->write(of, buf, ...)

rftype is resctrl's equivalent of cftype, and schemata is currently implemented
as a single rftype. Would it make sense to define a separate rftype for each
resctrl controller(or maybe in the future consider that this is not in a critical path)

Your suggestion is not clear to me. The schemata file is associated with a control group,
a resource group that has multiple allocations each backed by a different controller.

I do not think I fully understand your suggestion so would appreciate if you could
provide more detail.


Sorry, I did not describe this precisely. My original thought is that when writing
schemata, we need to locate the control by iterating through the control list:
rdtgroup_schemata_write
for_each_resource_ctrl(ctrl, r)
if (!strncmp())
return ctrl;
parse_line("0=80;1=60", ctrl)

I just wonder if we can skip iterating the control list, by
giving each control a dedicated rftype(and rftype needs to introduce
a pointer struct resctrl_ctrl *ctrl)
rdtgroup_ctrl_schemata_write()
rft = of->kn->priv
parse_line("0=80;1=60", rft->ctrl)

thanks,
Chenyu