Re: [RFC PATCH 13/19] x86/resctrl: Add PLZA state tracking and context switch handling

From: Moger, Babu

Date: Wed Jan 28 2026 - 11:10:48 EST


Hi Tony,

Thanks for the comment.

On 1/27/2026 4:30 PM, Luck, Tony wrote:
On Wed, Jan 21, 2026 at 03:12:51PM -0600, Babu Moger wrote:
@@ -138,6 +143,20 @@ static inline void __resctrl_sched_in(struct task_struct *tsk)
state->cur_rmid = rmid;
wrmsr(MSR_IA32_PQR_ASSOC, rmid, closid);
}
+
+ if (static_branch_likely(&rdt_plza_enable_key)) {
+ tmp = READ_ONCE(tsk->plza);
+ if (tmp)
+ plza = tmp;
+
+ if (plza != state->cur_plza) {
+ state->cur_plza = plza;
+ wrmsr(MSR_IA32_PQR_PLZA_ASSOC,
+ RMID_EN | state->plza_rmid,
+ (plza ? PLZA_EN : 0) | CLOSID_EN | state->plza_closid);
+ }
+ }
+

Babu,

This addition to the context switch code surprised me. After your talk
at LPC I had imagined that PLZA would be a single global setting so that
every syscall/page-fault/interrupt would run with a different CLOSID
(presumably one configured with more cache and memory bandwidth).

But this patch series looks like things are more flexible with the
ability to set different values (of RMID as well as CLOSID) per group.

Yes. this similar what we have with MSR_IA32_PQR_ASSOC. The association can be done either thru CPUs (just one MSR write) or task based association(more MSR write as task moves around).

It looks like it is possible to have some resctrl group with very
limited resources just bump up a bit when in ring0, while other
groups may get some different amount.

The additions for plza to the Documentation aren't helping me
understand how users will apply this.

Do you have some more examples?

Group creation is similar to what we have currently.

1. create a regular group and setup the limits.
# mkdir /sys/fs/resctrl/group

2. Assign tasks or CPUs.
# echo 1234 > /sys/fs/resctrl/group/tasks

This is a regular group.

3. Now you figured that you need to change things in CPL0 for this task.

4. Now create a PLZA group now and tweek the limits,

# mkdir /sys/fs/resctrl/group1

# echo 1 > /sys/fs/resctrl/group1/plza

# echo "MB:0=100" > /sys/fs/resctrl/group1/schemata

5. Assign the same task to the plza group.

# echo 1234 > /sys/fs/resctrl/group1/tasks


Now the task 1234 will be using the limits from group1 when running in CPL0.

I will add few more details in my next revision.

Thanks
Babu