From 1db1573bc59f7c91fa2867e4cbea73494d5b623e Mon Sep 17 00:00:00 2001 From: JianChunfu Date: Tue, 7 Jul 2026 17:23:54 +0800 Subject: [PATCH] kernel/fork: declare max_threads __read_mostly max_threads is initialized once by fork_init()->set_max_threads(), and thereafter is mostly read in hot path, such as copy_process(). The fact that it is mostly read and not written to makes it candidates for __read_mostly declarations. I have already tested on my machine(arm64,256core,kernel-7.1.3) with 'hackbench -P -l 500 -g 100/500/1000/2000' and the results show that there is an average of 13% improvement in performance. before patch: hackbench -g 100 500 1000 2000 1.094 4.651 13.305 36.322 after patch: hackbench -g 100 500 1000 2000 0.823 4.487 11.107 32.987 Above data are the average values obtained from multiple tests, and there was indeed some fluctuation in the data during the tests. Link: https://lore.kernel.org/20260707092354.465847-1-jansef.jian@hj-micro.com Signed-off-by: JianChunfu Reviewed-by: Lorenzo Stoakes Cc: Dietmar Eggemann Cc: Ingo Molnar Cc: Kees Cook Cc: Liam R. Howlett Cc: Peter Zijlstra Cc: Steven Rostedt Signed-off-by: Andrew Morton --- kernel/fork.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel/fork.c b/kernel/fork.c index f0e2e131a9a5..516faec8efb8 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -143,7 +143,7 @@ unsigned long total_forks; /* Handle normal Linux uptimes. */ int nr_threads; /* The idle threads do not count.. */ -static int max_threads; /* tunable limit on nr_threads */ +static int max_threads __read_mostly; /* tunable limit on nr_threads */ #define NAMED_ARRAY_INDEX(x) [x] = __stringify(x)