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

Kyrylo Tkachov <[email protected]>
Newsgroups gmane.comp.gcc.patches
Message-ID <[email protected]>

> On 18 Aug 2026, at 15:59, Jakub Jelinek <[email protected]> wrote:
> 
> On Tue, Aug 18, 2026 at 01:38:32PM +0000, Kyrylo Tkachov wrote:
>>> On 18 Aug 2026, at 15:33, Richard Biener <[email protected]> wrote:
>>>> A bare -j and older make do not give a number, and there the floor is
>>>> retained as well.  An explicit GCC_TEST_PARALLEL_SLOTS still wins, and the per
>>>> language check_$lang_parallelize caps still apply.
> 
> I think those caps are just weird.
> 
> grep ^check.*parallelize M* */M*
> Makefile.in:check_p_count=$(check_$(check_p_tool)_parallelize)
> algol68/Make-lang.in:check_algol68_parallelize = 10
> c/Make-lang.in:check_gcc_parallelize=10000
> cp/Make-lang.in:check_g++_parallelize = 10000
> d/Make-lang.in:check_gdc_parallelize = 128
> fortran/Make-lang.in:check_gfortran_parallelize = 10000
> go/Make-lang.in:check_go_parallelize = 10
> jit/Make-lang.in:check_jit_parallelize = 10
> m2/Make-lang.in:check_gm2_parallelize = 10000
> objc/Make-lang.in:check_objc_parallelize = 6
> objcp/Make-lang.in:check_obj-c++_parallelize = 6
> rust/Make-lang.in:check_rust_parallelize = 10
> 
> I think ideally those caps (which need to be capped at 10000 anyway because
> we don't produce longer sequences) should be in some proportion to the
> number of test in each of the testsuites or how long they usually take.
> The point is to avoid spawning too many instances for really small
> testsuites.
> So, e.g. the gm2 number looks too big to me when it has less than 1/10 of C
> or C++ tests.
> $ find testsuite/gcc.dg testsuite/c-c++-common testsuite/gcc.c-torture -type f | wc -l
> 27223
> $ find testsuite/g++.dg testsuite/c-c++-common -type f | wc -l
> 23980
> $ find testsuite/gfortran.dg -type f | wc -l
> 8955
> $ find testsuite/gm2* -type f | wc -l
> 2192
> $ find testsuite/gdc.* -type f | wc -l
> 4469
> $ find testsuite/rust/ -type f | wc -l
> 1734
> So, I think 128 or so would be better value for gm2.  On the other side,
> rust 10 is too small and should be maybe 64?
> I've intentionally left gcc.target and g++.target from the above because how
> many tests exactly are there differs on each target, and stuff also depends on
> which testsuites cycle through options and which set of them (-O* options,
> or say -std=c++* options, etc.).

I did some runs with the help of an AI agent for orchestration and measurement:

Each testsuite run on its own at -j96, with its cap overridden to 9999 so
that nothing was throttled.  The last column is the cap the tree ships, for
reference: it was not in effect for these runs.

    lang         wall      tests  ms/test  cap
    --------  -------  ---------  -------  --------
    g++       330.7 s     283072      1.2     10000
    gm2       322.5 s      15418     20.9     10000
    gcc       290.0 s     233807      1.2     10000
    gfortran  183.2 s      77251      2.4     10000
    go         32.4 s       8933      3.6        10
    objc        8.1 s       2919      2.8         6
    obj-c++     5.4 s       1595      3.4         6

gm2 takes as long as g++ with 5% of the tests, because its tests cost about
18 times more each.  Sizing the caps from file or test counts would single
out gm2 as the one to cut, and it is one of the two heaviest testsuites in
the tree.

The small caps really do throttle
---------------------------------

    lang    cap           wall  instances
    ------  ---------  -------  ---------
    objc    6 (today)   14.1 s          6
    objc    96           7.9 s         95
    go      10 (today)  47.7 s         10
    go      96          32.4 s         95

So you are right that 6 and 10 are too small.  They bind exactly, and cost
1.8x on objc and 1.47x on go on a machine this size.

But it does not reach a full make check
---------------------------------------

make -j96 check, two runs, when each language's .sum lands:

    lang       run 1  run 2
    --------  ------  -----
    obj-c++     11 s   10 s
    objc        23 s   22 s
    go          83 s   82 s
    g++        313 s  253 s
    gfortran   320 s  408 s
    gcc        439 s  407 s
    gm2        509 s  525 s
    total      510 s  526 s

The three throttled languages are finished inside the first 16%.  Raising
their caps cannot shorten a full check, and in a concurrent run the extra
instances would come out of the job tokens gcc and gm2 need.  The tail is
gm2, and gm2 is the language that ignores its cap.
> 
> Jakub
>
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.