From: Babu Moger <babu.moger@amd.com>
To: <tony.luck@intel.com>, <reinette.chatre@intel.com>,
<Dave.Martin@arm.com>, <james.morse@arm.com>, <bp@alien8.de>,
<ben.horgan@arm.com>
Cc: <corbet@lwn.net>, <skhan@linuxfoundation.org>,
<rdunlap@infradead.org>, <babu.moger@amd.com>, <tglx@kernel.org>,
<mingo@redhat.com>, <dave.hansen@linux.intel.com>,
<hpa@zytor.com>, <fenghuay@nvidia.com>,
<akpm@linux-foundation.org>, <rppt@kernel.org>,
<dapeng1.mi@linux.intel.com>, <elver@google.com>,
<jlayton@kernel.org>, <enelsonmoore@gmail.com>, <kuba@kernel.org>,
<ebiggers@kernel.org>, <seanjc@google.com>,
<peterz@infradead.org>, <chao.gao@intel.com>,
<jmattson@google.com>, <naveen@kernel.org>,
<ricardo.neri-calderon@linux.intel.com>, <tiala@microsoft.com>,
<chang.seok.bae@intel.com>, <prathyushi.nangia@amd.com>,
<kim.phillips@amd.com>, <elena.reshetova@intel.com>,
<darwi@linutronix.de>, <linux-doc@vger.kernel.org>,
<linux-kernel@vger.kernel.org>, <x86@kernel.org>
Subject: [PATCH v5 00/16] x86/resctrl: Add kernel-mode (e.g., PLZA) support to the resctrl subsystem
Date: Wed, 26 Aug 2026 14:32:14 -0500 [thread overview]
Message-ID: <cover.1787772750.git.babu.moger@amd.com> (raw)
Hi All,
This series adds support for AMD's Privilege-Level Zero Association
(PLZA) so kernel work can use a separate resource allocation and/or
monitoring association from the user task, and wires it up through a
small generic "kernel mode" (kmode) layer in fs/resctrl so future
architectures can plug in without touching(hopefully) core resctrl.
The features are documented in:
AMD64 Zen6 Platform Quality of Service (PQOS) Extensions,
Publication # 69193 Revision 1.00, Issue Date March 2026
available at https://bugzilla.kernel.org/show_bug.cgi?id=206537
The patches are based on top of commit (tip/master v7.2):
e7bb1f1ccd17 Merge branch into tip/master: 'locking/urgent'
Any feedback is apprecated.
Background
==========
When memory bandwidth associated with a CLOSID is aggressively throttled,
and a task with that CLOSID moves into kernel mode, the kernel operations
are also aggressively throttled. This can stall forward progress and
eventually degrade overall system performance.
Privilege-Level Zero Association (PLZA) allows the user to specify a CLOSID
and/or RMID for execution at Privilege Level Zero. When PLZA is enabled on
a CPU, kernel work at PL0 uses the CLOSID and/or RMID from MSR
PQR_PLZA_ASSOC; otherwise, the CPU uses the CLOSID and RMID from PQR_ASSOC.
Design
======
A new sysfs file, info/kernel_mode, holds the global policy for resource
allocation and monitoring of kernel work and the resource group (when
applicable) associated with the policy. Reads list the supported modes
and the currently active association; writes change the policy or
associate a different group. Look at the thread below for design
discussion.
https://lore.kernel.org/lkml/14a8ad0a-e842-4268-871a-0762f1169e03@intel.com/
https://lore.kernel.org/lkml/e4c95002-ae8a-48d0-bedd-772db58b937e@intel.com/
Two kernel modes are exposed:
- inherit_user: kernel work inherits allocation and monitoring from the
user task.
- assign_global_enable_per_cpu: kernel work may use separate allocation
and/or monitoring associations. ctrl= and mon= select whether each
dimension is assigned or inherited, and group= identifies the
associated resource group using <CTRL_MON>/<MON>/ path syntax.
Per-rdtgroup files kmode_cpus and kmode_cpus_list scope the association
to a subset of online CPUs without deactivating and re-associating.
They are visible only on the group currently associated through
info/kernel_mode.
Groups associated through kernel mode cannot enter pseudo-lock setup,
change mode, or be renamed until the association is cleared.
The arch hook, resctrl_arch_configure_kmode(), keeps the fs/resctrl layer
arch-neutral.
resctrl_set_kmode_support() lets architecture code register supported
kernel-mode policies during resctrl initialization. On AMD, PLZA
registers assign_global_enable_per_cpu when the feature is available.
Only AMD PLZA is wired up here; Intel and ARM can add their own support
later by implementing the hooks.
Examples
========
(See Documentation/filesystems/resctrl.rst, "kernel_mode", "kmode_cpus",
and "Examples on working with kernel_mode", for the full UAPI.)
# Mount resctrl
# mount -t resctrl resctrl /sys/fs/resctrl
# cd /sys/fs/resctrl
# Read the supported modes. The active mode is bracketed for display
# only; do not include brackets when writing.
# cat info/kernel_mode
[inherit_user]
assign_global_enable_per_cpu:ctrl=assign;mon=assign;group=//
# Create a CTRL_MON group and associate kernel-mode allocation with it.
# mkdir ctrl1
# echo "assign_global_enable_per_cpu:ctrl=assign;mon=inherit;group=ctrl1//" \
> info/kernel_mode
# cat info/kernel_mode
inherit_user
[assign_global_enable_per_cpu:ctrl=assign;mon=inherit;group=ctrl1//]
# kmode_cpus and kmode_cpus_list are visible only on the associated group.
# ls ctrl1/kmode_cpus*
ctrl1/kmode_cpus ctrl1/kmode_cpus_list
# Restrict the association to a CPU subset; the write is incremental.
# echo 0-3 > ctrl1/kmode_cpus_list
# cat ctrl1/kmode_cpus
f
# cat ctrl1/kmode_cpus_list
0-3
# Return to the default inherit policy.
# echo "inherit_user" > info/kernel_mode
# cat info/kernel_mode
[inherit_user]
assign_global_enable_per_cpu:ctrl=assign;mon=assign;group=//
Tested on AMD with PLZA; builds on x86 without PLZA and does not expose
assign_global_enable_per_cpu unless the feature is available.
Layout
======
01-03 x86: PLZA CPU feature, command-line option, and MSR/data-structure
plumbing.
04-07 fs/resctrl + x86: kernel mode policy enum, arch hooks, kmode state,
and resctrl_set_kmode_support().
08 x86/resctrl: register assign_global_enable_per_cpu when PLZA is
available.
09 fs/resctrl: info/kernel_mode read-only introspection.
10 fs/resctrl: hidden rdtgroup files for kmode_cpus visibility control.
11 fs/resctrl: per-rdtgroup kmode_cpus/kmode_cpus_list read interface.
12 fs/resctrl: program kernel-mode association when a CPU comes online.
13 fs/resctrl: deactivate the association when a group is removed.
14 fs/resctrl: info/kernel_mode write interface.
15 fs/resctrl: incremental kmode_cpus/kmode_cpus_list writes.
16 fs/resctrl: documentation and end-to-end examples.
Changelog
=========
v5:
- Collapse the two v4 global-assign modes into a single
assign_global_enable_per_cpu policy with ctrl= and mon= options.
- Use "association" terminology consistently in code, errors, and
documentation.
- Register assign_global_enable_per_cpu once during x86 resource
discovery when PLZA is available.
- Reject mon=inherit when group= selects a monitor group.
- Split hidden-file support, deactivation-on-teardown, and PLZA mode
registration into separate patches for easier review.
- Fix msr_pqr_plza_assoc truncation on 32-bit systems by using u64.
- Refresh documentation and add a readable end-to-end example walkthrough.
- Block pseudo-lock setup on kernel-mode-associated groups.
- Reject mode changes and rename while a group backs the active
association.
v4:
- Reorder and split the series into 15 patches: separate read-only
info/kernel_mode display from the write path; add hotplug support
when a CPU comes online; add an end-to-end documentation/examples
patch.
- Introduced resctrl_set_kmode_support() so architecture code can
register supported kernel-mode policies during resctrl initialization.
- info/kernel_mode write: validate group type; run fail paths before
tearing down the active association so errors retain the old state.
- kmode_cpus / kmode_cpus_list: writable with incremental enable/disable
deltas; empty masks allowed; offline CPUs rejected.
- Hotplug: newly online CPUs are added to the associated group's
kmode_cpu_mask and programmed when assign_global_enable_per_cpu is
active.
v3:
- Generalise the layer beyond AMD: rename "PLZA mode" to "kernel mode"
(kmode) in code, sysfs, and Documentation.
- Reset the association when the associated rdtgroup is removed,
instead of leaving stale state.
v2:
- Similar to RFC with a new proposal; interface names were not final.
- Separated Global Bandwidth Enforcement (GLBE) from PLZA; this series
only adds PLZA support.
- Used "kmode" instead of "PLZA" in the generic layer.
Previous versions:
v4: https://lore.kernel.org/lkml/cover.1783461016.git.babu.moger@amd.com/
v3: https://lore.kernel.org/lkml/cover.1777591496.git.babu.moger@amd.com/
v2: https://lore.kernel.org/lkml/cover.1773347820.git.babu.moger@amd.com/
v1: https://lore.kernel.org/lkml/cover.1769029977.git.babu.moger@amd.com/
Babu Moger (16):
x86/cpufeatures: Support Privilege Level Zero Association (PLZA)
x86/resctrl: Add PLZA support to command-line options
x86/resctrl: Add PLZA configuration definitions and data structures
fs/resctrl: Introduce kernel mode policy enum
x86,fs/resctrl: Introduce architecture hooks to program kernel mode
fs/resctrl: Introduce kernel mode states for resctrl
fs/resctrl: Introduce resctrl_set_kmode_support() to register
supported modes
x86/resctrl: Expose assign_global_enable_per_cpu when PLZA is
available
fs/resctrl: Add interface to display supported and active kernel modes
fs/resctrl: Add support for hidden resource group files
fs/resctrl: Introduce kmode_cpus/kmode_cpus_list per rdtgroup
fs/resctrl: Program kernel mode assignments on CPU hotplug
fs/resctrl: Deactivate the kernel mode association when a group is
removed
fs/resctrl: Add interface to modify kernel mode via info/kernel_mode
fs/resctrl: Allow user space to write kmode_cpus/kmode_cpus_list
fs/resctrl: Add documentation on kernel_mode with example
.../admin-guide/kernel-parameters.txt | 2 +-
Documentation/filesystems/resctrl.rst | 193 +++++
arch/x86/include/asm/cpufeatures.h | 1 +
arch/x86/include/asm/msr-index.h | 1 +
arch/x86/kernel/cpu/resctrl/core.c | 6 +
arch/x86/kernel/cpu/resctrl/ctrlmondata.c | 38 +
arch/x86/kernel/cpu/resctrl/internal.h | 47 ++
arch/x86/kernel/cpu/scattered.c | 1 +
drivers/resctrl/mpam_resctrl.c | 6 +
fs/resctrl/internal.h | 60 ++
fs/resctrl/pseudo_lock.c | 5 +
fs/resctrl/rdtgroup.c | 795 ++++++++++++++++++
include/linux/resctrl.h | 75 ++
13 files changed, 1229 insertions(+), 1 deletion(-)
--
2.43.0
next reply other threads:[~2026-08-26 19:33 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-26 19:32 Babu Moger [this message]
2026-08-26 19:32 ` [PATCH v5 01/16] x86/cpufeatures: Support Privilege Level Zero Association (PLZA) Babu Moger
2026-08-26 19:32 ` [PATCH v5 02/16] x86/resctrl: Add PLZA support to command-line options Babu Moger
2026-08-26 19:32 ` [PATCH v5 03/16] x86/resctrl: Add PLZA configuration definitions and data structures Babu Moger
2026-08-26 19:32 ` [PATCH v5 04/16] fs/resctrl: Introduce kernel mode policy enum Babu Moger
2026-08-26 19:32 ` [PATCH v5 05/16] x86,fs/resctrl: Introduce architecture hooks to program kernel mode Babu Moger
2026-08-26 19:32 ` [PATCH v5 06/16] fs/resctrl: Introduce kernel mode states for resctrl Babu Moger
2026-08-26 19:32 ` [PATCH v5 07/16] fs/resctrl: Introduce resctrl_set_kmode_support() to register supported modes Babu Moger
2026-08-26 19:32 ` [PATCH v5 08/16] x86/resctrl: Expose assign_global_enable_per_cpu when PLZA is available Babu Moger
2026-08-26 19:32 ` [PATCH v5 09/16] fs/resctrl: Add interface to display supported and active kernel modes Babu Moger
2026-08-26 19:32 ` [PATCH v5 10/16] fs/resctrl: Add support for hidden resource group files Babu Moger
2026-08-26 19:32 ` [PATCH v5 11/16] fs/resctrl: Introduce kmode_cpus/kmode_cpus_list per rdtgroup Babu Moger
2026-08-26 19:32 ` [PATCH v5 12/16] fs/resctrl: Program kernel mode assignments on CPU hotplug Babu Moger
2026-08-26 19:32 ` [PATCH v5 13/16] fs/resctrl: Deactivate the kernel mode association when a group is removed Babu Moger
2026-08-26 19:32 ` [PATCH v5 14/16] fs/resctrl: Add interface to modify kernel mode via info/kernel_mode Babu Moger
2026-08-26 19:32 ` [PATCH v5 15/16] fs/resctrl: Allow user space to write kmode_cpus/kmode_cpus_list Babu Moger
2026-08-26 19:32 ` [PATCH v5 16/16] fs/resctrl: Add documentation on kernel_mode with example Babu Moger
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=cover.1787772750.git.babu.moger@amd.com \
--to=babu.moger@amd.com \
--cc=Dave.Martin@arm.com \
--cc=akpm@linux-foundation.org \
--cc=ben.horgan@arm.com \
--cc=bp@alien8.de \
--cc=chang.seok.bae@intel.com \
--cc=chao.gao@intel.com \
--cc=corbet@lwn.net \
--cc=dapeng1.mi@linux.intel.com \
--cc=darwi@linutronix.de \
--cc=dave.hansen@linux.intel.com \
--cc=ebiggers@kernel.org \
--cc=elena.reshetova@intel.com \
--cc=elver@google.com \
--cc=enelsonmoore@gmail.com \
--cc=fenghuay@nvidia.com \
--cc=hpa@zytor.com \
--cc=james.morse@arm.com \
--cc=jlayton@kernel.org \
--cc=jmattson@google.com \
--cc=kim.phillips@amd.com \
--cc=kuba@kernel.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=naveen@kernel.org \
--cc=peterz@infradead.org \
--cc=prathyushi.nangia@amd.com \
--cc=rdunlap@infradead.org \
--cc=reinette.chatre@intel.com \
--cc=ricardo.neri-calderon@linux.intel.com \
--cc=rppt@kernel.org \
--cc=seanjc@google.com \
--cc=skhan@linuxfoundation.org \
--cc=tglx@kernel.org \
--cc=tiala@microsoft.com \
--cc=tony.luck@intel.com \
--cc=x86@kernel.org \
/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