Commit 8cbfdc24 authored by Waiman Long's avatar Waiman Long Committed by Tejun Heo

cgroup/cpuset: Update description of cpuset.cpus.partition in cgroup-v2.rst

Update Documentation/admin-guide/cgroup-v2.rst on the newly introduced
"isolated" cpuset partition type as well as other changes made in other
cpuset patches.
Signed-off-by: default avatarWaiman Long <longman@redhat.com>
Reported-by: default avatarkernel test robot <lkp@intel.com>
Signed-off-by: default avatarTejun Heo <tj@kernel.org>
parent d7c8142d
...@@ -2185,75 +2185,93 @@ Cpuset Interface Files ...@@ -2185,75 +2185,93 @@ Cpuset Interface Files
It accepts only the following input values when written to. It accepts only the following input values when written to.
======== ================================ ========== =====================================
"root" a partition root "member" Non-root member of a partition
"member" a non-root member of a partition "root" Partition root
======== ================================ "isolated" Partition root without load balancing
========== =====================================
When set to be a partition root, the current cgroup is the
root of a new partition or scheduling domain that comprises The root cgroup is always a partition root and its state
itself and all its descendants except those that are separate cannot be changed. All other non-root cgroups start out as
partition roots themselves and their descendants. The root "member".
cgroup is always a partition root.
When set to "root", the current cgroup is the root of a new
There are constraints on where a partition root can be set. partition or scheduling domain that comprises itself and all
It can only be set in a cgroup if all the following conditions its descendants except those that are separate partition roots
are true. themselves and their descendants.
1) The "cpuset.cpus" is not empty and the list of CPUs are When set to "isolated", the CPUs in that partition root will
exclusive, i.e. they are not shared by any of its siblings. be in an isolated state without any load balancing from the
2) The parent cgroup is a partition root. scheduler. Tasks placed in such a partition with multiple
3) The "cpuset.cpus" is also a proper subset of the parent's CPUs should be carefully distributed and bound to each of the
"cpuset.cpus.effective". individual CPUs for optimal performance.
4) There is no child cgroups with cpuset enabled. This is for
eliminating corner cases that have to be handled if such a The value shown in "cpuset.cpus.effective" of a partition root
condition is allowed. is the CPUs that the partition root can dedicate to a potential
new child partition root. The new child subtracts available
Setting it to partition root will take the CPUs away from the CPUs from its parent "cpuset.cpus.effective".
effective CPUs of the parent cgroup. Once it is set, this
file cannot be reverted back to "member" if there are any child A partition root ("root" or "isolated") can be in one of the
cgroups with cpuset enabled. two possible states - valid or invalid. An invalid partition
root is in a degraded state where some state information may
A parent partition cannot distribute all its CPUs to its be retained, but behaves more like a "member".
child partitions. There must be at least one cpu left in the
parent partition. All possible state transitions among "member", "root" and
"isolated" are allowed.
Once becoming a partition root, changes to "cpuset.cpus" is
generally allowed as long as the first condition above is true, On read, the "cpuset.cpus.partition" file can show the following
the change will not take away all the CPUs from the parent values.
partition and the new "cpuset.cpus" value is a superset of its
children's "cpuset.cpus" values. ============================= =====================================
"member" Non-root member of a partition
Sometimes, external factors like changes to ancestors' "root" Partition root
"cpuset.cpus" or cpu hotplug can cause the state of the partition "isolated" Partition root without load balancing
root to change. On read, the "cpuset.sched.partition" file "root invalid (<reason>)" Invalid partition root
can show the following values. "isolated invalid (<reason>)" Invalid isolated partition root
============================= =====================================
============== ==============================
"member" Non-root member of a partition In the case of an invalid partition root, a descriptive string on
"root" Partition root why the partition is invalid is included within parentheses.
"root invalid" Invalid partition root
============== ============================== For a partition root to become valid, the following conditions
must be met.
It is a partition root if the first 2 partition root conditions
above are true and at least one CPU from "cpuset.cpus" is 1) The "cpuset.cpus" is exclusive with its siblings , i.e. they
granted by the parent cgroup. are not shared by any of its siblings (exclusivity rule).
2) The parent cgroup is a valid partition root.
A partition root can become invalid if none of CPUs requested 3) The "cpuset.cpus" is not empty and must contain at least
in "cpuset.cpus" can be granted by the parent cgroup or the one of the CPUs from parent's "cpuset.cpus", i.e. they overlap.
parent cgroup is no longer a partition root itself. In this 4) The "cpuset.cpus.effective" cannot be empty unless there is
case, it is not a real partition even though the restriction no task associated with this partition.
of the first partition root condition above will still apply.
The cpu affinity of all the tasks in the cgroup will then be External events like hotplug or changes to "cpuset.cpus" can
associated with CPUs in the nearest ancestor partition. cause a valid partition root to become invalid and vice versa.
Note that a task cannot be moved to a cgroup with empty
An invalid partition root can be transitioned back to a "cpuset.cpus.effective".
real partition root if at least one of the requested CPUs
can now be granted by its parent. In this case, the cpu For a valid partition root with the sibling cpu exclusivity
affinity of all the tasks in the formerly invalid partition rule enabled, changes made to "cpuset.cpus" that violate the
will be associated to the CPUs of the newly formed partition. exclusivity rule will invalidate the partition as well as its
Changing the partition state of an invalid partition root to sibiling partitions with conflicting cpuset.cpus values. So
"member" is always allowed even if child cpusets are present. care must be taking in changing "cpuset.cpus".
A valid non-root parent partition may distribute out all its CPUs
to its child partitions when there is no task associated with it.
Care must be taken to change a valid partition root to
"member" as all its child partitions, if present, will become
invalid causing disruption to tasks running in those child
partitions. These inactivated partitions could be recovered if
their parent is switched back to a partition root with a proper
set of "cpuset.cpus".
Poll and inotify events are triggered whenever the state of
"cpuset.cpus.partition" changes. That includes changes caused
by write to "cpuset.cpus.partition", cpu hotplug or other
changes that modify the validity status of the partition.
This will allow user space agents to monitor unexpected changes
to "cpuset.cpus.partition" without the need to do continuous
polling.
Device controller Device controller
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment