linux/kernel/sched
Mathieu Desnoyers 02d954c0fd sched: Compact RSEQ concurrency IDs with reduced threads and affinity
When a process reduces its number of threads or clears bits in its CPU
affinity mask, the mm_cid allocation should eventually converge towards
smaller values.

However, the change introduced by:

commit 7e019dcc47 ("sched: Improve cache locality of RSEQ concurrency
IDs for intermittent workloads")

adds a per-mm/CPU recent_cid which is never unset unless a thread
migrates.

This is a tradeoff between:

A) Preserving cache locality after a transition from many threads to few
   threads, or after reducing the hamming weight of the allowed CPU mask.

B) Making the mm_cid upper bounds wrt nr threads and allowed CPU mask
   easy to document and understand.

C) Allowing applications to eventually react to mm_cid compaction after
   reduction of the nr threads or allowed CPU mask, making the tracking
   of mm_cid compaction easier by shrinking it back towards 0 or not.

D) Making sure applications that periodically reduce and then increase
   again the nr threads or allowed CPU mask still benefit from good
   cache locality with mm_cid.

Introduce the following changes:

* After shrinking the number of threads or reducing the number of
  allowed CPUs, reduce the value of max_nr_cid so expansion of CID
  allocation will preserve cache locality if the number of threads or
  allowed CPUs increase again.

* Only re-use a recent_cid if it is within the max_nr_cid upper bound,
  else find the first available CID.

Fixes: 7e019dcc47 ("sched: Improve cache locality of RSEQ concurrency IDs for intermittent workloads")
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Signed-off-by: Gabriele Monaco <gmonaco@redhat.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Tested-by: Gabriele Monaco <gmonaco@redhat.com>
Link: https://lkml.kernel.org/r/20250210153253.460471-2-gmonaco@redhat.com
2025-02-18 08:50:36 +01:00
..
Makefile
autogroup.c sched_ext: Fixes for v6.14-rc2 2025-02-14 11:14:24 -08:00
autogroup.h
build_policy.c
build_utility.c
clock.c
completion.c
core.c - Clarify what happens when a task is woken up from the wake queue and make 2025-02-16 10:38:24 -08:00
core_sched.c
cpuacct.c
cpudeadline.c
cpudeadline.h
cpufreq.c
cpufreq_schedutil.c cpufreq/schedutil: Only bind threads if needed 2025-01-23 21:09:25 +01:00
cpupri.c
cpupri.h
cputime.c sched: Define sched_clock_irqtime as static key 2025-01-13 14:10:25 +01:00
deadline.c treewide: const qualify ctl_tables where applicable 2025-01-28 13:48:37 +01:00
debug.c Fix a cfs_rq->h_nr_runnable accounting bug that trips up a 2025-02-08 11:16:22 -08:00
ext.c sched_ext: Use SCX_CALL_OP_TASK in task_tick_scx 2025-02-13 06:57:33 -10:00
ext.h sched_ext: Fix incorrect autogroup migration detection 2025-01-27 08:31:50 -10:00
fair.c Fix a cfs_rq->h_nr_runnable accounting bug that trips up a 2025-02-08 11:16:22 -08:00
features.h sched/fair: Untangle NEXT_BUDDY and pick_next_task() 2024-12-09 11:48:13 +01:00
idle.c sched_ext: idle: Refresh idle masks during idle-to-idle transitions 2025-01-10 12:40:42 -10:00
isolation.c sched/isolation: Consolidate housekeeping cpumasks that are always identical 2024-12-02 12:24:28 +01:00
loadavg.c
membarrier.c
pelt.c sched/fair: Use the new cfs_rq.h_nr_runnable 2024-12-09 11:48:11 +01:00
pelt.h
psi.c sched, psi: Don't account irq time if sched_clock_irqtime is disabled 2025-01-13 14:10:26 +01:00
rt.c treewide: const qualify ctl_tables where applicable 2025-01-28 13:48:37 +01:00
sched-pelt.h
sched.h sched: Compact RSEQ concurrency IDs with reduced threads and affinity 2025-02-18 08:50:36 +01:00
smp.h
stats.c docs: Update Schedstat version to 17 2024-12-20 15:31:18 +01:00
stats.h Mainly individually changelogged singleton patches. The patch series in 2025-01-26 17:50:53 -08:00
stop_task.c
swait.c
syscalls.c cpufreq/schedutil: Only bind threads if needed 2025-01-23 21:09:25 +01:00
topology.c treewide: const qualify ctl_tables where applicable 2025-01-28 13:48:37 +01:00
wait.c
wait_bit.c