2
0
mirror of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git synced 2025-09-04 20:19:47 +08:00
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
..
autogroup.c sched_ext: Fixes for v6.14-rc2 2025-02-14 11:14:24 -08:00
autogroup.h
build_policy.c sched_ext: Disallow loading BPF scheduler if isolcpus= domain isolation is in effect 2024-07-08 09:30:13 -10:00
build_utility.c sched/headers: Remove duplicate header inclusions 2023-10-03 21:27:55 +02:00
clock.c sched: Fix spelling in comments 2024-05-27 17:00:21 +02:00
completion.c sched: add a few helpers to wake up tasks on the current cpu 2023-07-17 16:08:08 -07:00
core_sched.c sched: Fix spelling in comments 2024-05-27 17:00:21 +02:00
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
cpuacct.c
cpudeadline.c sched/topology: Consolidate and clean up access to a CPU's max compute capacity 2023-10-09 12:59:48 +02:00
cpudeadline.h
cpufreq_schedutil.c cpufreq/schedutil: Only bind threads if needed 2025-01-23 21:09:25 +01:00
cpufreq.c
cpupri.c sched/rt: Fix live lock between select_fallback_rq() and RT push 2023-09-28 22:58:13 +02:00
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 sched: Fix spelling in comments 2024-05-27 17:00:21 +02:00
Makefile
membarrier.c RISC-V Patches for the 6.9 Merge Window 2024-03-22 10:41:13 -07:00
pelt.c sched/fair: Use the new cfs_rq.h_nr_runnable 2024-12-09 11:48:11 +01:00
pelt.h sched: Move update_other_load_avgs() to kernel/sched/pelt.c 2024-09-11 20:00:21 -10:00
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 sched, smp: Trace smp callback causing an IPI 2023-03-24 11:01:29 +01:00
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 sched: Add put_prev_task(.next) 2024-09-03 15:26:32 +02:00
swait.c sched: add a few helpers to wake up tasks on the current cpu 2023-07-17 16:08:08 -07:00
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_bit.c sched/wait: Remove unused bit_wait_io_timeout 2024-10-07 09:28:41 +02:00
wait.c sched: remove wait bookmarks 2023-10-18 14:34:18 -07:00