Re: [PATCH 2/2] testsuite: start as many runtest instances as there are job slots

Richard Biener <[email protected]>
Newsgroups gmane.comp.gcc.patches
Message-ID <CAFiYyc1pqnmoKKoBJ+H727ExDR6sOUJgLVME_o1N9SFsYgqAvg@mail.gmail.com>
On Mon, Aug 17, 2026 at 6:19 PM <[email protected]> wrote:
>
> From: Kyrylo Tkachov <[email protected]>
>
> The parallel check targets start 128 runtest instances, or as many as
> GCC_TEST_PARALLEL_SLOTS says.  The -j level make was given is looked at only
> to decide whether to go parallel at all, never for how parallel to be.
>
> That constant predates machines with more cores than it, and it is now what
> limits the testsuite on them.  The instances claim work from one shared queue,
> so the number worth starting is the number of job tokens.  On a 352 core
> machine the testsuite runs 128 wide whatever -j says, and the rest of the
> machine is idle.  In the other direction, make -j4 check still starts 128
> instances, and each one reads the whole testsuite and repeats every
> effective-target probe before it can claim any work.
>
> Take the number from MFLAGS, which GNU make 4.0 and later set.  A bare -j and
> older make do not give a number, and there the old default stands.  An
> explicit GCC_TEST_PARALLEL_SLOTS still wins, and the per language
> check_$lang_parallelize caps still apply.
>
> On aarch64 at -j352, check-gcc falls by 24%, from a median of 118.1 s to
> 89.3 s over four interleaved rounds, with identical results in every round.
> It also runs more repeatably: the spread across rounds falls from 10.6%
> to 4.5%, and the slowest patched round is still 22% faster than the median
> unpatched one.
>
> Bootstrapped on aarch64-none-linux-gnu.  Ok for trunk?

But with low N, like -j12 my experience is that a larger GCC_TEST_PARALLEL_SLOTS
helps because the actual time needed for the slots is not even.  So
I'd rather _not_
have this taken literally but kept at a minimum number of slots (for
example 128, but
I guess 64 might work as well).  Some actual numbers might help?

Richard.

>
> gcc/ChangeLog:
>
>         * Makefile.in (check_p_jobs, check_p_slots): New variables.
>         (check_p_subdirs): Use check_p_slots.
>
> Signed-off-by: Kyrylo Tkachov <[email protected]>
> ---
>  gcc/Makefile.in | 12 +++++++++++-
>  1 file changed, 11 insertions(+), 1 deletion(-)
>
> diff --git a/gcc/Makefile.in b/gcc/Makefile.in
> index 5c7cb98d22b..ac42f54e53d 100644
> --- a/gcc/Makefile.in
> +++ b/gcc/Makefile.in
> @@ -4760,8 +4760,18 @@ check_p_tool=$(firstword $(subst _, ,$*))
>  check_p_count=$(check_$(check_p_tool)_parallelize)
>  check_p_subno=$(word 2,$(subst _, ,$*))
>  check_p_subdir=$(subst _,,$*)
> +# Number of runtest instances to start.  An explicit GCC_TEST_PARALLEL_SLOTS
> +# wins.  Otherwise follow the -j level make was given.  The instances share one
> +# work queue, so the useful number of them is the number of job tokens, not a
> +# constant: fewer leaves the machine idle, more only adds start-up, since every
> +# instance reads the whole testsuite and repeats the effective-target probes
> +# before it can claim any work.  GNU make 4.0 and later put the number in
> +# MFLAGS.  A bare -j, and older make, do not, and there the historical default
> +# of 128 is kept.
> +check_p_jobs=$(patsubst -j%,%,$(filter -j%,$(MFLAGS)))
> +check_p_slots=$(if $(GCC_TEST_PARALLEL_SLOTS),$(GCC_TEST_PARALLEL_SLOTS),$(if $(check_p_jobs),$(check_p_jobs),128))
>  check_p_subdirs=$(wordlist 1,$(check_p_count),$(wordlist 1, \
> -               $(if $(GCC_TEST_PARALLEL_SLOTS),$(GCC_TEST_PARALLEL_SLOTS),128), \
> +               $(check_p_slots), \
>                 $(one_to_9999)))
>
>  # For parallelized check-% targets, this decides whether parallelization
> --
> 2.50.1 (Apple Git-155)
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.