This is a kernel enhancement to configure the cpu affinity of kernel
threads via kernel boot option isolcpus=no_kthreads,<isolcpus_params>,<cpulist>
When this option is specified, the cpumask is immediately applied upon
thread launch. This does not affect kernel threads that specify cpu
and node.
This allows CPU isolation (that is not allowing certain threads
to execute on certain CPUs) without using the isolcpus=domain parameter,
making it possible to enable load balancing on such CPUs
during runtime (see
Note-1: this is based off on Wind River's patch at
https://github.com/starlingx-staging/stx-integ/blob/master/kernel/kernel-std/centos/patches/affine-compute-kernel-threads.patch
Difference being that this patch is limited to modifying
kernel thread cpumask: Behaviour of other threads can
be controlled via cgroups or sched_setaffinity.
Note-2: MontaVista's patch was based off Christoph Lameter's patch at
https://lwn.net/Articles/565932/ with the only difference being
the kernel parameter changed from kthread to kthread_cpus.
Signed-off-by: Marcelo Tosatti <mtosatti@xxxxxxxxxx>
---
v2: use isolcpus= subcommand (Thomas Gleixner)
Documentation/admin-guide/kernel-parameters.txt | 8 ++++++++
include/linux/cpumask.h | 5 +++++
include/linux/sched/isolation.h | 1 +
init/main.c | 1 +
kernel/cpu.c | 13 +++++++++++++
kernel/kthread.c | 4 ++--
kernel/sched/isolation.c | 6 ++++++
7 files changed, 36 insertions(+), 2 deletions(-)
diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
index c07815d230bc..7318e3057383 100644
--- a/Documentation/admin-guide/kernel-parameters.txt
+++ b/Documentation/admin-guide/kernel-parameters.txt
@@ -1959,6 +1959,14 @@
the CPU affinity syscalls or cpuset.
<cpu number> begins at 0 and the maximum value is
"number of CPUs in system - 1".
+ When using cpusets, use the isolcpus option no_kthreads
+ to avoid creation of kernel threads on isolated CPUs.
+
+ no_kthreads
+ Adjust the CPU affinity mask of unbound kernel threads to
+ not contain CPUs on the isolated list. This complements
+ the isolation provided by the cpusets mechanism described
+ above.