Re: [PATCH] kernel/fork: declare max_threads __read_mostly

From: Andrew Morton

Date: Tue Jul 07 2026 - 16:35:32 EST


On Tue, 7 Jul 2026 17:23:54 +0800 JianChunfu <jansef.jian@xxxxxxxxxxxx> wrote:

> 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:
> hachbench -g 100 500 1000 2000
> 1.094 4.651 13.305 36.322
>
> after patch:
> hachbench -g 100 500 1000 2000
> 0.823 4.487 11.107 32.987

(s/hach/hack/)

The change is sensible, thanks.

> Above data are the average values obtained from multiple tests, and
> there was indeed some fluctuation in the data during the tests.

I'm a little surprised at the results - max_threads is only used in
fork() and I don't think hackbench is fork-intensive?

> --- a/kernel/fork.c
> +++ b/kernel/fork.c
> @@ -142,7 +142,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)
>
> --
> 2.43.0