From: Frederic Weisbecker <frederic@kernel.org>
To: LKML <linux-kernel@vger.kernel.org>
Cc: Frederic Weisbecker <frederic@kernel.org>,
Andrew Morton <akpm@linux-foundation.org>,
Peter Zijlstra <peterz@infradead.org>,
Thomas Gleixner <tglx@linutronix.de>,
Vlastimil Babka <vbabka@suse.cz>
Subject: [PATCH 00/21] kthread: Introduce preferred affinity v5
Date: Tue, 12 Nov 2024 15:22:24 +0100 [thread overview]
Message-ID: <20241112142248.20503-1-frederic@kernel.org> (raw)
Affining kthreads follow either of 4 existing different patterns:
1) Per-CPU kthreads must stay affine to a single CPU and never execute
relevant code on any other CPU. This is currently handled by smpboot
code which takes care of CPU-hotplug operations.
2) Kthreads that _have_ to be affine to a specific set of CPUs and can't
run anywhere else. The affinity is set through kthread_bind_mask()
and the subsystem takes care by itself to handle CPU-hotplug operations.
3) Kthreads that _prefer_ to be affine to a specific NUMA node.
4) Similar to the previous point but kthreads have a _preferred_ affinity
different than a node. It is set manually like any other task and
CPU-hotplug is supposed to be handled by the relevant subsystem so
that the task is properly reaffined whenever a given CPU from the
preferred affinity comes up or down. Also care must be taken so that
the preferred affinity doesn't cross housekeeping cpumask boundaries.
Currently the preferred affinity patterns (3 and 4) have at least 4
identified users, with more or less success when it comes to handle
CPU-hotplug operations and CPU isolation.
This is an infrastructure proposal to handle this (after cleanups from 01
to 10).
Changes since v4:
* Collect more tags
* Fix a title (Vishal Chourasia)
* Handle mismatched 32bits el0 support on arm64, see patches 11 and 12
(Will Deacon)
Frederic Weisbecker (21):
arm/bL_switcher: Use kthread_run_on_cpu()
x86/resctrl: Use kthread_run_on_cpu()
firmware: stratix10-svc: Use kthread_run_on_cpu()
scsi: bnx2fc: Use kthread_create_on_cpu()
scsi: bnx2i: Use kthread_create_on_cpu()
scsi: qedi: Use kthread_create_on_cpu()
soc/qman: test: Use kthread_run_on_cpu()
kallsyms: Use kthread_run_on_cpu()
lib: test_objpool: Use kthread_run_on_cpu()
net: pktgen: Use kthread_create_on_cpu()
arm64: Keep first mismatched 32bits el0 capable CPU online through its
callbacks
sched,arm64: Handle CPU isolation on last resort fallback rq selection
kthread: Make sure kthread hasn't started while binding it
kthread: Default affine kthread to its preferred NUMA node
mm: Create/affine kcompactd to its preferred node
mm: Create/affine kswapd to its preferred node
kthread: Implement preferred affinity
rcu: Use kthread preferred affinity for RCU boost
kthread: Unify kthread_create_on_cpu() and
kthread_create_worker_on_cpu() automatic format
treewide: Introduce kthread_run_worker[_on_cpu]()
rcu: Use kthread preferred affinity for RCU exp kworkers
arch/arm/common/bL_switcher.c | 10 +-
arch/arm64/include/asm/cpufeature.h | 1 +
arch/arm64/include/asm/mmu_context.h | 2 +
arch/arm64/kernel/cpufeature.c | 75 +++++--
arch/x86/kernel/cpu/resctrl/pseudo_lock.c | 28 +--
arch/x86/kvm/i8254.c | 2 +-
crypto/crypto_engine.c | 2 +-
drivers/cpufreq/cppc_cpufreq.c | 2 +-
drivers/firmware/stratix10-svc.c | 9 +-
drivers/gpu/drm/drm_vblank_work.c | 2 +-
.../drm/i915/gem/selftests/i915_gem_context.c | 2 +-
drivers/gpu/drm/i915/gt/selftest_execlists.c | 2 +-
drivers/gpu/drm/i915/gt/selftest_hangcheck.c | 2 +-
drivers/gpu/drm/i915/gt/selftest_slpc.c | 2 +-
drivers/gpu/drm/i915/selftests/i915_request.c | 8 +-
drivers/gpu/drm/msm/disp/msm_disp_snapshot.c | 2 +-
drivers/gpu/drm/msm/msm_atomic.c | 2 +-
drivers/gpu/drm/msm/msm_gpu.c | 2 +-
drivers/gpu/drm/msm/msm_kms.c | 2 +-
.../platform/chips-media/wave5/wave5-vpu.c | 2 +-
drivers/net/dsa/mv88e6xxx/chip.c | 2 +-
drivers/net/ethernet/intel/ice/ice_dpll.c | 2 +-
drivers/net/ethernet/intel/ice/ice_gnss.c | 2 +-
drivers/net/ethernet/intel/ice/ice_ptp.c | 2 +-
drivers/platform/chrome/cros_ec_spi.c | 2 +-
drivers/ptp/ptp_clock.c | 2 +-
drivers/scsi/bnx2fc/bnx2fc_fcoe.c | 7 +-
drivers/scsi/bnx2i/bnx2i_init.c | 7 +-
drivers/scsi/qedi/qedi_main.c | 6 +-
drivers/soc/fsl/qbman/qman_test_stash.c | 6 +-
drivers/spi/spi.c | 2 +-
drivers/usb/typec/tcpm/tcpm.c | 2 +-
drivers/vdpa/vdpa_sim/vdpa_sim.c | 2 +-
drivers/watchdog/watchdog_dev.c | 2 +-
fs/erofs/zdata.c | 2 +-
include/linux/cpuhotplug.h | 1 +
include/linux/kthread.h | 56 ++++-
include/linux/mmu_context.h | 1 +
kernel/kallsyms_selftest.c | 4 +-
kernel/kthread.c | 201 ++++++++++++++++--
kernel/rcu/tree.c | 94 ++------
kernel/rcu/tree_plugin.h | 11 +-
kernel/sched/core.c | 2 +-
kernel/sched/ext.c | 2 +-
kernel/workqueue.c | 2 +-
lib/test_objpool.c | 19 +-
mm/compaction.c | 43 +---
mm/vmscan.c | 8 +-
net/core/pktgen.c | 7 +-
net/dsa/tag_ksz.c | 2 +-
net/dsa/tag_ocelot_8021q.c | 2 +-
net/dsa/tag_sja1105.c | 2 +-
52 files changed, 384 insertions(+), 280 deletions(-)
--
2.46.0
next reply other threads:[~2024-11-12 14:22 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-11-12 14:22 Frederic Weisbecker [this message]
2024-11-12 14:22 ` [PATCH 01/21] arm/bL_switcher: Use kthread_run_on_cpu() Frederic Weisbecker
2024-11-12 14:22 ` [PATCH 02/21] x86/resctrl: " Frederic Weisbecker
2024-11-12 22:00 ` Fenghua Yu
2024-11-12 14:22 ` [PATCH 03/21] firmware: stratix10-svc: " Frederic Weisbecker
2024-11-12 14:22 ` [PATCH 04/21] scsi: bnx2fc: Use kthread_create_on_cpu() Frederic Weisbecker
2024-11-12 14:22 ` [PATCH 05/21] scsi: bnx2i: " Frederic Weisbecker
2024-11-12 14:22 ` [PATCH 06/21] scsi: qedi: " Frederic Weisbecker
2024-11-12 14:22 ` [PATCH 07/21] soc/qman: test: Use kthread_run_on_cpu() Frederic Weisbecker
2024-11-12 14:22 ` [PATCH 08/21] kallsyms: " Frederic Weisbecker
2024-11-12 14:22 ` [PATCH 09/21] lib: test_objpool: " Frederic Weisbecker
2024-11-12 14:22 ` [PATCH 10/21] net: pktgen: Use kthread_create_on_cpu() Frederic Weisbecker
2024-11-12 14:22 ` [PATCH 11/21] arm64: Keep first mismatched 32bits el0 capable CPU online through its callbacks Frederic Weisbecker
2024-11-28 16:26 ` Will Deacon
2024-11-29 22:15 ` Frederic Weisbecker
2024-12-09 16:23 ` Will Deacon
2024-11-12 14:22 ` [PATCH 12/21] sched,arm64: Handle CPU isolation on last resort fallback rq selection Frederic Weisbecker
2024-11-12 14:22 ` [PATCH 13/21] kthread: Make sure kthread hasn't started while binding it Frederic Weisbecker
2024-11-12 14:22 ` [PATCH 14/21] kthread: Default affine kthread to its preferred NUMA node Frederic Weisbecker
2024-11-12 14:22 ` [PATCH 15/21] mm: Create/affine kcompactd to its preferred node Frederic Weisbecker
2024-11-12 14:22 ` [PATCH 16/21] mm: Create/affine kswapd " Frederic Weisbecker
2024-11-12 14:22 ` [PATCH 17/21] kthread: Implement preferred affinity Frederic Weisbecker
2024-11-12 14:22 ` [PATCH 18/21] rcu: Use kthread preferred affinity for RCU boost Frederic Weisbecker
2024-11-12 14:22 ` [PATCH 19/21] kthread: Unify kthread_create_on_cpu() and kthread_create_worker_on_cpu() automatic format Frederic Weisbecker
2024-11-12 14:22 ` [PATCH 20/21] treewide: Introduce kthread_run_worker[_on_cpu]() Frederic Weisbecker
2024-11-12 14:22 ` [PATCH 21/21] rcu: Use kthread preferred affinity for RCU exp kworkers Frederic Weisbecker
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=20241112142248.20503-1-frederic@kernel.org \
--to=frederic@kernel.org \
--cc=akpm@linux-foundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=peterz@infradead.org \
--cc=tglx@linutronix.de \
--cc=vbabka@suse.cz \
/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