summaryrefslogtreecommitdiff
path: root/Documentation/admin-guide
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2026-02-11 13:20:50 -0800
committerLinus Torvalds <torvalds@linux-foundation.org>2026-02-11 13:20:50 -0800
commitff661eeee26038f15ed9dd33c91809632e11d9eb (patch)
tree6ad1a8e8a47b929ac3e0c563a8b85e7a53363403 /Documentation/admin-guide
parent9bdc64892dcce732d55b2c07d80b36a6c3e1b5f4 (diff)
parent8b1f3c54f930c3aeda0b5bad97bc317fc80267fd (diff)
Merge tag 'cgroup-for-6.20' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup
Pull cgroup updates from Tejun Heo: - cpuset changes: - Continue separating v1 and v2 implementations by moving more v1-specific logic into cpuset-v1.c - Improve partition handling. Sibling partitions are no longer invalidated on cpuset.cpus conflict, cpuset.cpus changes no longer fail in v2, and effective_xcpus computation is made consistent - Fix partition effective CPUs overlap that caused a warning on cpuset removal when sibling partitions shared CPUs - Increase the maximum cgroup subsystem count from 16 to 32 to accommodate future subsystem additions - Misc cleanups and selftest improvements including switching to css_is_online() helper, removing dead code and stale documentation references, using lockdep_assert_cpuset_lock_held() consistently, and adding polling helpers for asynchronously updated cgroup statistics * tag 'cgroup-for-6.20' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup: (21 commits) cpuset: fix overlap of partition effective CPUs cgroup: increase maximum subsystem count from 16 to 32 cgroup: Remove stale cpu.rt.max reference from documentation cpuset: replace direct lockdep_assert_held() with lockdep_assert_cpuset_lock_held() cgroup/cpuset: Move the v1 empty cpus/mems check to cpuset1_validate_change() cgroup/cpuset: Don't invalidate sibling partitions on cpuset.cpus conflict cgroup/cpuset: Don't fail cpuset.cpus change in v2 cgroup/cpuset: Consistently compute effective_xcpus in update_cpumasks_hier() cgroup/cpuset: Streamline rm_siblings_excl_cpus() cpuset: remove dead code in cpuset-v1.c cpuset: remove v1-specific code from generate_sched_domains cpuset: separate generate_sched_domains for v1 and v2 cpuset: move update_domain_attr_tree to cpuset_v1.c cpuset: add cpuset1_init helper for v1 initialization cpuset: add cpuset1_online_css helper for v1-specific operations cpuset: add lockdep_assert_cpuset_lock_held helper cpuset: Remove unnecessary checks in rebuild_sched_domains_locked cgroup: switch to css_is_online() helper selftests: cgroup: Replace sleep with cg_read_key_long_poll() for waiting on nr_dying_descendants selftests: cgroup: make test_memcg_sock robust against delayed sock stats ...
Diffstat (limited to 'Documentation/admin-guide')
-rw-r--r--Documentation/admin-guide/cgroup-v2.rst44
1 files changed, 27 insertions, 17 deletions
diff --git a/Documentation/admin-guide/cgroup-v2.rst b/Documentation/admin-guide/cgroup-v2.rst
index 098d6831b3c0..91beaa6798ce 100644
--- a/Documentation/admin-guide/cgroup-v2.rst
+++ b/Documentation/admin-guide/cgroup-v2.rst
@@ -737,9 +737,6 @@ combinations are invalid and should be rejected. Also, if the
resource is mandatory for execution of processes, process migrations
may be rejected.
-"cpu.rt.max" hard-allocates realtime slices and is an example of this
-type.
-
Interface Files
===============
@@ -2561,10 +2558,10 @@ Cpuset Interface Files
Users can manually set it to a value that is different from
"cpuset.cpus". One constraint in setting it is that the list of
CPUs must be exclusive with respect to "cpuset.cpus.exclusive"
- of its sibling. If "cpuset.cpus.exclusive" of a sibling cgroup
- isn't set, its "cpuset.cpus" value, if set, cannot be a subset
- of it to leave at least one CPU available when the exclusive
- CPUs are taken away.
+ and "cpuset.cpus.exclusive.effective" of its siblings. Another
+ constraint is that it cannot be a superset of "cpuset.cpus"
+ of its sibling in order to leave at least one CPU available to
+ that sibling when the exclusive CPUs are taken away.
For a parent cgroup, any one of its exclusive CPUs can only
be distributed to at most one of its child cgroups. Having an
@@ -2584,9 +2581,9 @@ Cpuset Interface Files
of this file will always be a subset of its parent's
"cpuset.cpus.exclusive.effective" if its parent is not the root
cgroup. It will also be a subset of "cpuset.cpus.exclusive"
- if it is set. If "cpuset.cpus.exclusive" is not set, it is
- treated to have an implicit value of "cpuset.cpus" in the
- formation of local partition.
+ if it is set. This file should only be non-empty if either
+ "cpuset.cpus.exclusive" is set or when the current cpuset is
+ a valid partition root.
cpuset.cpus.isolated
A read-only and root cgroup only multiple values file.
@@ -2618,13 +2615,22 @@ Cpuset Interface Files
There are two types of partitions - local and remote. A local
partition is one whose parent cgroup is also a valid partition
root. A remote partition is one whose parent cgroup is not a
- valid partition root itself. Writing to "cpuset.cpus.exclusive"
- is optional for the creation of a local partition as its
- "cpuset.cpus.exclusive" file will assume an implicit value that
- is the same as "cpuset.cpus" if it is not set. Writing the
- proper "cpuset.cpus.exclusive" values down the cgroup hierarchy
- before the target partition root is mandatory for the creation
- of a remote partition.
+ valid partition root itself.
+
+ Writing to "cpuset.cpus.exclusive" is optional for the creation
+ of a local partition as its "cpuset.cpus.exclusive" file will
+ assume an implicit value that is the same as "cpuset.cpus" if it
+ is not set. Writing the proper "cpuset.cpus.exclusive" values
+ down the cgroup hierarchy before the target partition root is
+ mandatory for the creation of a remote partition.
+
+ Not all the CPUs requested in "cpuset.cpus.exclusive" can be
+ used to form a new partition. Only those that were present
+ in its parent's "cpuset.cpus.exclusive.effective" control
+ file can be used. For partitions created without setting
+ "cpuset.cpus.exclusive", exclusive CPUs specified in sibling's
+ "cpuset.cpus.exclusive" or "cpuset.cpus.exclusive.effective"
+ also cannot be used.
Currently, a remote partition cannot be created under a local
partition. All the ancestors of a remote partition root except
@@ -2632,6 +2638,10 @@ Cpuset Interface Files
The root cgroup is always a partition root and its state cannot
be changed. All other non-root cgroups start out as "member".
+ Even though the "cpuset.cpus.exclusive*" and "cpuset.cpus"
+ control files are not present in the root cgroup, they are
+ implicitly the same as the "/sys/devices/system/cpu/possible"
+ sysfs file.
When set to "root", the current cgroup is the root of a new
partition or scheduling domain. The set of exclusive CPUs is