test: Remove polling loop from test_runner (take 2) #33141

pull maflcko wants to merge 1 commits into bitcoin:master from maflcko:2508-ci changing 1 files +21 −12
  1. maflcko commented at 7:56 am on August 6, 2025: member

    (This picks up my prior attempt from #13384)

    Currently, the test_runner is using a time.sleep before polling to check if any tests have completed. This is largely fine when running a few tests, or when the tests take a long time.

    However, when running many fast tests, this can accumulate and leave the CPU idle for no reason.

    A trivial improvement would be to only sleep when really needed:

     0diff --git a/test/functional/test_runner.py b/test/functional/test_runner.py
     1index 7c8c15f391..1d9f28cee4 100755
     2--- a/test/functional/test_runner.py
     3+++ b/test/functional/test_runner.py
     4@@ -747,7 +747,6 @@ class TestHandler:
     5         dot_count = 0
     6         while True:
     7             # Return all procs that have finished, if any. Otherwise sleep until there is one.
     8-            time.sleep(.5)
     9             ret = []
    10             for job in self.jobs:
    11                 (name, start_time, proc, testdir, log_out, log_err) = job
    12@@ -771,6 +770,7 @@ class TestHandler:
    13                     ret.append((TestResult(name, status, int(time.time() - start_time)), testdir, stdout, stderr, skip_reason))
    14             if ret:
    15                 return ret
    16+            time.sleep(.5)
    17             if self.use_term_control:
    18                 print('.', end='', flush=True)
    19             dot_count += 1
    

    However, ideally there is no sleep at all. So do that by using a ThreadPoolExecutor.

    This can be tested via something like:

    0time ./bld-cmake/test/functional/test_runner.py $(for i in {1..200}; do echo -n "tool_rpcauth "; done) -j 200
    

    The result should show:

    • Current master is the slowest
    • The “sleep patch” from above is a bit faster (1.5x improvement)
    • This pull request is the fastest (2x improvement)
  2. test: Remove polling loop from test_runner faaab70684
  3. DrahtBot added the label Tests on Aug 6, 2025
  4. DrahtBot commented at 7:56 am on August 6, 2025: contributor

    The following sections might be updated with supplementary metadata relevant to reviewers and maintainers.

    Code Coverage & Benchmarks

    For details see: https://corecheck.dev/bitcoin/bitcoin/pulls/33141.

    Reviews

    See the guideline for information on the review process.

    Type Reviewers
    Concept ACK l0rinc

    If your review is incorrectly listed, please react with 👎 to this comment and the bot will ignore it on the next update.

  5. l0rinc commented at 3:59 am on August 7, 2025: contributor

    I ran the 3 versions you mentioned with hyperfine, 10 runs each:

     0COMMITS="d767503b6a2618e0c99407acf98f3bd19fb7defd 5bb380ec87af93ed5543ba10e1f8465aca7bcfe7 35e91b899dac689b24a8a95fcef083affc695d1e"; \
     1PARALLEL=200; RUNS=10; \
     2CC=gcc; CXX=g++; \
     3BUILD='Release'; \
     4TEST_LIST=$(python3 -c "print('tool_rpcauth ' * $PARALLEL)"); \
     5(echo ""; for c in $COMMITS; do git fetch -q origin $c && git log -1 --pretty='%h %s' $c || exit 1; done; echo "") && \
     6hyperfine \
     7  --sort command \
     8  --runs $RUNS \
     9  --parameter-list COMMIT ${COMMITS// /,} \
    10  --prepare "git checkout {COMMIT}; git clean -fxd; git reset --hard && cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=${BUILD} && ninja -C build" \
    11  "build/test/functional/test_runner.py $TEST_LIST -j$PARALLEL"
    

    d767503b6a Merge bitcoin/bitcoin#33039: refactor,test: follow-ups to multi-byte block obfuscation 5bb380ec87 test: sleep patch 35e91b899d test: Remove polling loop from test_runner

     0Benchmark 1: ./build/test/functional/test_runner.py tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth too
     1l_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_r
     2pcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpca
     3uth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth  -j200 (COMMIT = d767503b6a2618e0c99407acf98f3bd19fb7defd)
     4  Time (mean ± σ):      7.233 s ±  0.057 s    [User: 41.885 s, System: 4.270 s]
     5  Range (min … max):    7.085 s …  7.286 s    10 runs
     6
     7Benchmark 2: ./build/test/functional/test_runner.py tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth too
     8l_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_r
     9pcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpca
    10uth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth  -j200 (COMMIT = 5bb380ec87af93ed5543ba10e1f8465aca7bcfe7)
    11  Time (mean ± σ):      3.827 s ±  0.127 s    [User: 41.717 s, System: 4.300 s]
    12  Range (min … max):    3.726 s …  4.174 s    10 runs
    13
    14Benchmark 3: ./build/test/functional/test_runner.py tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth too
    15l_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_r
    16pcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpca
    17uth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth  -j200 (COMMIT = 35e91b899dac689b24a8a95fcef083affc695d1e)
    18  Time (mean ± σ):      3.696 s ±  0.026 s    [User: 41.489 s, System: 4.324 s]
    19  Range (min … max):    3.681 s …  3.768 s    10 runs
    

    And I’m getting slightly different results than you:

    0Relative speed comparison
    1    1.96 ±  0.02  ./build/test/functional/test_runner.py tool_rpcauth [...] tool_rpcauth -j200 (COMMIT = d767503b6a2618e0c99407acf98f3bd19fb7defd)
    2    1.04 ±  0.04  ./build/test/functional/test_runner.py tool_rpcauth [...] tool_rpcauth -j200 (COMMIT = 5bb380ec87af93ed5543ba10e1f8465aca7bcfe7)
    3    1.00          ./build/test/functional/test_runner.py tool_rpcauth [...] tool_rpcauth -j200 (COMMIT = 35e91b899dac689b24a8a95fcef083affc695d1e)
    

    Tried a few different combinations:

     0COMMITS="d767503b6a2618e0c99407acf98f3bd19fb7defd 5bb380ec87af93ed5543ba10e1f8465aca7bcfe7 35e91b899dac689b24a8a95fcef083affc695d1e"; \
     1PARALLEL=200; RUNS=3; \
     2CC=gcc; CXX=g++; \
     3BUILD='Debug'; \
     4TEST_LIST=$(python3 -c "print('tool_rpcauth ' * $PARALLEL)"); \
     5(echo ""; for c in $COMMITS; do git fetch -q origin $c && git log -1 --pretty='%h %s' $c || exit 1; done; echo "") && \
     6hyperfine \
     7  --sort command \
     8  --runs $RUNS \
     9  --parameter-list COMMIT ${COMMITS// /,} \
    10  --prepare "git checkout {COMMIT}; git clean -fxd; git reset --hard && cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=${BUILD} && ninja -C build" \
    11  "./build/test/functional/test_runner.py $TEST_LIST -j$PARALLEL"
    12
    13d767503b6a Merge bitcoin/bitcoin#33039: refactor,test: follow-ups to multi-byte block obfuscation
    145bb380ec87 test: sleep patch
    1535e91b899d test: Remove polling loop from test_runner
    16
    17Benchmark 1: ./build/test/functional/test_runner.py tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth  -j200 (COMMIT = d767503b6a2618e0c99407acf98f3bd19fb7defd)
    18  Time (mean ± σ):      7.716 s ±  0.013 s    [User: 42.081 s, System: 4.335 s]
    19  Range (min  max):    7.704 s   7.731 s    3 runs
    20
    21Benchmark 2: ./build/test/functional/test_runner.py tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth  -j200 (COMMIT = 5bb380ec87af93ed5543ba10e1f8465aca7bcfe7)
    22  Time (mean ± σ):      4.301 s ±  0.034 s    [User: 42.486 s, System: 4.310 s]
    23  Range (min  max):    4.263 s   4.328 s    3 runs
    24
    25Benchmark 3: ./build/test/functional/test_runner.py tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth  -j200 (COMMIT = 35e91b899dac689b24a8a95fcef083affc695d1e)
    26  Time (mean ± σ):      4.169 s ±  0.028 s    [User: 41.859 s, System: 4.345 s]
    27  Range (min  max):    4.140 s   4.195 s    3 runs
    28
    29Relative speed comparison
    30        1.85 ±  0.01  ./build/test/functional/test_runner.py tool_rpcauth [...] tool_rpcauth  -j200 (COMMIT = d767503b6a2618e0c99407acf98f3bd19fb7defd)
    31        1.03 ±  0.01  ./build/test/functional/test_runner.py tool_rpcauth [...] tool_rpcauth  -j200 (COMMIT = 5bb380ec87af93ed5543ba10e1f8465aca7bcfe7)
    32        1.00          ./build/test/functional/test_runner.py tool_rpcauth [...] tool_rpcauth  -j200 (COMMIT = 35e91b899dac689b24a8a95fcef083affc695d1e)
    
     0COMMITS="d767503b6a2618e0c99407acf98f3bd19fb7defd 5bb380ec87af93ed5543ba10e1f8465aca7bcfe7 35e91b899dac689b24a8a95fcef083affc695d1e"; \
     1PARALLEL=200; RUNS=10; \
     2CC=clang; CXX=clang++;
     3BUILD='Release'; \
     4TEST_LIST=$(python3 -c "print('tool_rpcauth ' * $PARALLEL)"); \
     5(echo ""; for c in $COMMITS; do git fetch -q origin $c && git log -1 --pretty='%h %s' $c || exit 1; done; echo "") && \
     6hyperfine \
     7  --sort command \
     8  --runs $RUNS \
     9  --parameter-list COMMIT ${COMMITS// /,} \
    10  --prepare "git checkout {COMMIT}; git clean -fxd; git reset --hard && cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=${BUILD} && ninja -C build" \
    11  "build/test/functional/test_runner.py $TEST_LIST -j$PARALLEL"
    12
    13d767503b6a Merge bitcoin/bitcoin#33039: refactor,test: follow-ups to multi-byte block obfuscation
    145bb380ec87 test: sleep patch
    1535e91b899d test: Remove polling loop from test_runner
    16
    17Benchmark 1: ./build/test/functional/test_runner.py tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth  -j200 (COMMIT = d767503b6a2618e0c99407acf98f3bd19fb7defd)
    18  Time (mean ± σ):      9.829 s ±  0.183 s    [User: 38.943 s, System: 4.407 s]
    19  Range (min  max):    9.694 s  10.320 s    10 runs
    20
    21Benchmark 2: ./build/test/functional/test_runner.py tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth  -j200 (COMMIT = 5bb380ec87af93ed5543ba10e1f8465aca7bcfe7)
    22  Time (mean ± σ):      7.063 s ±  0.193 s    [User: 38.883 s, System: 4.408 s]
    23  Range (min  max):    6.796 s   7.267 s    10 runs
    24
    25Benchmark 3: ./build/test/functional/test_runner.py tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth tool_rpcauth  -j200 (COMMIT = 35e91b899dac689b24a8a95fcef083affc695d1e)
    26  Time (mean ± σ):      6.904 s ±  0.213 s    [User: 38.949 s, System: 4.386 s]
    27  Range (min  max):    6.649 s   7.267 s    10 runs
    28
    29Relative speed comparison
    30        1.42 ±  0.05  ./build/test/functional/test_runner.py [...] tool_rpcauth  -j200 (COMMIT = d767503b6a2618e0c99407acf98f3bd19fb7defd)
    31        1.02 ±  0.04  ./build/test/functional/test_runner.py [...] tool_rpcauth tool_rpcauth  -j200 (COMMIT = 5bb380ec87af93ed5543ba10e1f8465aca7bcfe7)
    32        1.00          ./build/test/functional/test_runner.py [...] tool_rpcauth tool_rpcauth  -j200 (COMMIT = 35e91b899dac689b24a8a95fcef083affc695d1e)
    

    So this is obviously faster for many tiny tests, will run the same for the full test suite and do a full code review later. Concept ACK

  6. maflcko commented at 6:29 am on August 7, 2025: member

    So this is obviously faster for many tiny tests, will run the same for the full test suite and do a full code review later.

    Nice. Thanks for testing and confirming that the code without any sleep is the fastest of the 3 versions. I think benchmarking the full test suite may be difficult, because it has internal noise higher than the savings here. At least back in #13384 (comment), it was hard to measure, but maybe there is less noise now and this can be measured now.

  7. l0rinc commented at 4:56 pm on August 7, 2025: contributor

    it has internal noise higher than the savings here

    Sure, but I’m just running them a lot of times, the trends are obvious this way.

    will run the same for the full test suite

    I have measured running the tests with the 3 setups with 1-6x the nproc for parallelism. The 3 solutions all scale well beyond the number of cpus (I’m now running the same until 8x on a different platform to confirm the findings).

      0COMMITS="d767503b6a2618e0c99407acf98f3bd19fb7defd 5bb380ec87af93ed5543ba10e1f8465aca7bcfe7 35e91b899dac689b24a8a95fcef083affc695d1e"; \
      1RUNS=3; \
      2CC=gcc; CXX=g++; \
      3BUILD='Release'; \
      4(echo ""; for c in $COMMITS; do git fetch -q origin $c && git log -1 --pretty='%h %s' $c || exit 1; done; echo "") && \
      5hyperfine \
      6  --sort command \
      7  --runs $RUNS \
      8  --parameter-list COMMIT ${COMMITS// /,} \
      9  --parameter-list FACTOR $(seq -s, 1 6) \
     10  --prepare "git checkout {COMMIT}; git clean -fxd; git reset --hard &&  cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=${BUILD} && ninja -C build " \
     11  "build/test/functional/test_runner.py -j\$(({FACTOR} * $(nproc))) || true"
     12
     13d767503b6a Merge bitcoin/bitcoin#33039: refactor,test: follow-ups to multi-byte block obfuscation
     145bb380ec87 test: sleep patch
     1535e91b899d test: Remove polling loop from test_runner
     16
     17Benchmark 1: build/test/functional/test_runner.py -j$((1 * 16)) || true (COMMIT = d767503b6a2618e0c99407acf98f3bd19fb7defd)
     18  Time (mean ± σ):     161.044 s ± 14.549 s    [User: 727.494 s, System: 95.580 s]
     19  Range (min … max):   151.727 s … 177.809 s    3 runs
     20 
     21Benchmark 2: build/test/functional/test_runner.py -j$((1 * 16)) || true (COMMIT = 5bb380ec87af93ed5543ba10e1f8465aca7bcfe7)
     22  Time (mean ± σ):     162.738 s ±  4.422 s    [User: 745.107 s, System: 95.168 s]
     23  Range (min … max):   157.762 s … 166.217 s    3 runs
     24 
     25Benchmark 3: build/test/functional/test_runner.py -j$((1 * 16)) || true (COMMIT = 35e91b899dac689b24a8a95fcef083affc695d1e)
     26  Time (mean ± σ):     164.559 s ±  2.955 s    [User: 740.193 s, System: 96.168 s]
     27  Range (min … max):   161.401 s … 167.256 s    3 runs
     28 
     29Benchmark 4: build/test/functional/test_runner.py -j$((2 * 16)) || true (COMMIT = d767503b6a2618e0c99407acf98f3bd19fb7defd)
     30  Time (mean ± σ):     123.475 s ±  0.815 s    [User: 881.995 s, System: 112.519 s]
     31  Range (min … max):   122.815 s … 124.385 s    3 runs
     32 
     33Benchmark 5: build/test/functional/test_runner.py -j$((2 * 16)) || true (COMMIT = 5bb380ec87af93ed5543ba10e1f8465aca7bcfe7)
     34  Time (mean ± σ):     123.129 s ±  2.608 s    [User: 881.362 s, System: 112.607 s]
     35  Range (min … max):   121.520 s … 126.137 s    3 runs
     36 
     37  Warning: Statistical outliers were detected. Consider re-running this benchmark on a quiet system without any interferences from other programs. It might help to use the '--warmup' or '--prepare' options.
     38 
     39Benchmark 6: build/test/functional/test_runner.py -j$((2 * 16)) || true (COMMIT = 35e91b899dac689b24a8a95fcef083affc695d1e)
     40  Time (mean ± σ):     122.078 s ±  0.827 s    [User: 857.404 s, System: 113.242 s]
     41  Range (min … max):   121.211 s … 122.858 s    3 runs
     42 
     43Benchmark 7: build/test/functional/test_runner.py -j$((3 * 16)) || true (COMMIT = d767503b6a2618e0c99407acf98f3bd19fb7defd)
     44  Time (mean ± σ):     111.159 s ±  1.883 s    [User: 900.148 s, System: 123.057 s]
     45  Range (min … max):   109.349 s … 113.108 s    3 runs
     46 
     47Benchmark 8: build/test/functional/test_runner.py -j$((3 * 16)) || true (COMMIT = 5bb380ec87af93ed5543ba10e1f8465aca7bcfe7)
     48  Time (mean ± σ):     110.060 s ±  0.637 s    [User: 909.104 s, System: 123.203 s]
     49  Range (min … max):   109.374 s … 110.634 s    3 runs
     50 
     51Benchmark 9: build/test/functional/test_runner.py -j$((3 * 16)) || true (COMMIT = 35e91b899dac689b24a8a95fcef083affc695d1e)
     52  Time (mean ± σ):     107.698 s ±  0.202 s    [User: 908.138 s, System: 123.326 s]
     53  Range (min … max):   107.530 s … 107.922 s    3 runs
     54 
     55Benchmark 10: build/test/functional/test_runner.py -j$((4 * 16)) || true (COMMIT = d767503b6a2618e0c99407acf98f3bd19fb7defd)
     56  Time (mean ± σ):     99.439 s ±  0.353 s    [User: 876.245 s, System: 123.568 s]
     57  Range (min … max):   99.055 s … 99.750 s    3 runs
     58 
     59Benchmark 11: build/test/functional/test_runner.py -j$((4 * 16)) || true (COMMIT = 5bb380ec87af93ed5543ba10e1f8465aca7bcfe7)
     60  Time (mean ± σ):     100.665 s ±  0.930 s    [User: 878.436 s, System: 123.433 s]
     61  Range (min … max):   99.654 s … 101.483 s    3 runs
     62 
     63Benchmark 12: build/test/functional/test_runner.py -j$((4 * 16)) || true (COMMIT = 35e91b899dac689b24a8a95fcef083affc695d1e)
     64  Time (mean ± σ):     98.818 s ±  0.490 s    [User: 891.573 s, System: 122.992 s]
     65  Range (min … max):   98.278 s … 99.234 s    3 runs
     66 
     67Benchmark 13: build/test/functional/test_runner.py -j$((5 * 16)) || true (COMMIT = d767503b6a2618e0c99407acf98f3bd19fb7defd)
     68  Time (mean ± σ):     96.018 s ±  1.705 s    [User: 847.227 s, System: 123.800 s]
     69  Range (min … max):   95.008 s … 97.986 s    3 runs
     70 
     71  Warning: The first benchmarking run for this command was significantly slower than the rest (97.986 s). This could be caused by (filesystem) caches that were not filled until after the first run. You are already using the '--prepare' option which can be used to clear caches. If you did not use a cache-clearing command with '--prepare', you can either try that or consider using the '--warmup' option to fill those caches before the actual benchmark.
     72 
     73Benchmark 14: build/test/functional/test_runner.py -j$((5 * 16)) || true (COMMIT = 5bb380ec87af93ed5543ba10e1f8465aca7bcfe7)
     74  Time (mean ± σ):     97.786 s ±  1.161 s    [User: 854.971 s, System: 123.509 s]
     75  Range (min … max):   96.573 s … 98.888 s    3 runs
     76 
     77Benchmark 15: build/test/functional/test_runner.py -j$((5 * 16)) || true (COMMIT = 35e91b899dac689b24a8a95fcef083affc695d1e)
     78  Time (mean ± σ):     97.968 s ±  1.246 s    [User: 876.036 s, System: 123.396 s]
     79  Range (min … max):   96.862 s … 99.317 s    3 runs
     80 
     81Benchmark 16: build/test/functional/test_runner.py -j$((6 * 16)) || true (COMMIT = d767503b6a2618e0c99407acf98f3bd19fb7defd)
     82  Time (mean ± σ):     97.557 s ±  0.795 s    [User: 864.526 s, System: 124.178 s]
     83  Range (min … max):   96.685 s … 98.242 s    3 runs
     84 
     85Benchmark 17: build/test/functional/test_runner.py -j$((6 * 16)) || true (COMMIT = 5bb380ec87af93ed5543ba10e1f8465aca7bcfe7)
     86  Time (mean ± σ):     98.179 s ±  1.145 s    [User: 863.995 s, System: 124.434 s]
     87  Range (min … max):   97.295 s … 99.473 s    3 runs
     88 
     89Benchmark 18: build/test/functional/test_runner.py -j$((6 * 16)) || true (COMMIT = 35e91b899dac689b24a8a95fcef083affc695d1e)
     90  Time (mean ± σ):     96.079 s ±  0.906 s    [User: 857.862 s, System: 124.003 s]
     91  Range (min … max):   95.159 s … 96.970 s    3 runs
     92 
     93Relative speed comparison
     94        1.68 ±  0.15  build/test/functional/test_runner.py -j$((1 * 16)) || true (COMMIT = d767503b6a2618e0c99407acf98f3bd19fb7defd)
     95        1.69 ±  0.06  build/test/functional/test_runner.py -j$((1 * 16)) || true (COMMIT = 5bb380ec87af93ed5543ba10e1f8465aca7bcfe7)
     96        1.71 ±  0.04  build/test/functional/test_runner.py -j$((1 * 16)) || true (COMMIT = 35e91b899dac689b24a8a95fcef083affc695d1e)
     97        1.29 ±  0.02  build/test/functional/test_runner.py -j$((2 * 16)) || true (COMMIT = d767503b6a2618e0c99407acf98f3bd19fb7defd)
     98        1.28 ±  0.04  build/test/functional/test_runner.py -j$((2 * 16)) || true (COMMIT = 5bb380ec87af93ed5543ba10e1f8465aca7bcfe7)
     99        1.27 ±  0.02  build/test/functional/test_runner.py -j$((2 * 16)) || true (COMMIT = 35e91b899dac689b24a8a95fcef083affc695d1e)
    100        1.16 ±  0.03  build/test/functional/test_runner.py -j$((3 * 16)) || true (COMMIT = d767503b6a2618e0c99407acf98f3bd19fb7defd)
    101        1.15 ±  0.02  build/test/functional/test_runner.py -j$((3 * 16)) || true (COMMIT = 5bb380ec87af93ed5543ba10e1f8465aca7bcfe7)
    102        1.12 ±  0.02  build/test/functional/test_runner.py -j$((3 * 16)) || true (COMMIT = 35e91b899dac689b24a8a95fcef083affc695d1e)
    103        1.04 ±  0.02  build/test/functional/test_runner.py -j$((4 * 16)) || true (COMMIT = d767503b6a2618e0c99407acf98f3bd19fb7defd)
    104        1.05 ±  0.02  build/test/functional/test_runner.py -j$((4 * 16)) || true (COMMIT = 5bb380ec87af93ed5543ba10e1f8465aca7bcfe7)
    105        1.03 ±  0.02  build/test/functional/test_runner.py -j$((4 * 16)) || true (COMMIT = 35e91b899dac689b24a8a95fcef083affc695d1e)
    106        1.00          build/test/functional/test_runner.py -j$((5 * 16)) || true (COMMIT = d767503b6a2618e0c99407acf98f3bd19fb7defd)
    107        1.02 ±  0.02  build/test/functional/test_runner.py -j$((5 * 16)) || true (COMMIT = 5bb380ec87af93ed5543ba10e1f8465aca7bcfe7)
    108        1.02 ±  0.02  build/test/functional/test_runner.py -j$((5 * 16)) || true (COMMIT = 35e91b899dac689b24a8a95fcef083affc695d1e)
    109        1.02 ±  0.02  build/test/functional/test_runner.py -j$((6 * 16)) || true (COMMIT = d767503b6a2618e0c99407acf98f3bd19fb7defd)
    110        1.02 ±  0.02  build/test/functional/test_runner.py -j$((6 * 16)) || true (COMMIT = 5bb380ec87af93ed5543ba10e1f8465aca7bcfe7)
    111        1.00 ±  0.02  build/test/functional/test_runner.py -j$((6 * 16)) || true (COMMIT = 35e91b899dac689b24a8a95fcef083affc695d1e)
    

    Which indicates to me that the new solution scales a bit better - but since we haven’t even hit the bottom yet (surprisingly), I’ll post those in a follow-up.

  8. maflcko commented at 5:09 pm on August 7, 2025: member

    Which indicates to me that the new solution scales a bit better - but since we haven’t even hit the bottom yet (surprisingly), I’ll post those in a follow-up.

    Thanks for the benchmarks, but honestly, I can’t see that the new solution scales better. You only did 3 runs for each point, and the error bars overlap with the other points each time. Also the hyperfine output has warnings about outliers. I guess you’d have to run at least 100 times for each data point (not saying you should :sweat_smile:, I am happy with the previous benchmarks already).

    Also, I am thinking you are already saturated at 100 seconds, because the slowest test likely takes this amount of time. No amount of parallelism can make it faster.


github-metadata-mirror

This is a metadata mirror of the GitHub repository bitcoin/bitcoin. This site is not affiliated with GitHub. Content is generated from a GitHub metadata backup.
generated: 2025-08-12 09:13 UTC

This site is hosted by @0xB10C
More mirrored repositories can be found on mirror.b10c.me