]> www.infradead.org Git - users/jedix/linux-maple.git/commit
kthread: Default affine kthread to its preferred NUMA node
authorFrederic Weisbecker <frederic@kernel.org>
Thu, 26 Sep 2024 22:49:01 +0000 (00:49 +0200)
committerFrederic Weisbecker <frederic@kernel.org>
Wed, 8 Jan 2025 17:15:03 +0000 (18:15 +0100)
commitd1a89197589c4a77468298ef2b14ff4084c4ea29
tree17592023a46c9fe7870087a60435236c3c53009f
parent5eacb68a358503cb350eaf68599a0d6caef569ab
kthread: Default affine kthread to its preferred NUMA node

Kthreads attached to a preferred NUMA node for their task structure
allocation can also be assumed to run preferrably within that same node.

A more precise affinity is usually notified by calling
kthread_create_on_cpu() or kthread_bind[_mask]() before the first wakeup.

For the others, a default affinity to the node is desired and sometimes
implemented with more or less success when it comes to deal with hotplug
events and nohz_full / CPU Isolation interactions:

- kcompactd is affine to its node and handles hotplug but not CPU Isolation
- kswapd is affine to its node and ignores hotplug and CPU Isolation
- A bunch of drivers create their kthreads on a specific node and
  don't take care about affining further.

Handle that default node affinity preference at the generic level
instead, provided a kthread is created on an actual node and doesn't
apply any specific affinity such as a given CPU or a custom cpumask to
bind to before its first wake-up.

This generic handling is aware of CPU hotplug events and CPU isolation
such that:

* When a housekeeping CPU goes up that is part of the node of a given
  kthread, the related task is re-affined to that own node if it was
  previously running on the default last resort online housekeeping set
  from other nodes.

* When a housekeeping CPU goes down while it was part of the node of a
  kthread, the running task is migrated (or the sleeping task is woken
  up) automatically by the scheduler to other housekeepers within the
  same node or, as a last resort, to all housekeepers from other nodes.

Acked-by: Vlastimil Babka <vbabka@suse.cz>
Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
include/linux/cpuhotplug.h
kernel/kthread.c