Merge bitcoin/bitcoin#33142: test: Run bench sanity checks in parallel with functional tests
fa65bc0e79test: Run bench sanity checks in parallel with functional tests (MarcoFalke)fa9fdbce79test: Pass bench exe into test framework utils (MarcoFalke) Pull request description: The ctest target `bench_sanity_check` has many issues: * With sanitizers enabled, it is one of the slowest targets, often taking several minutes. See https://github.com/bitcoin/bitcoin/issues/32770#issuecomment-2984264066. * There is no insight from ctest into how long each individual sanity check takes. * On a timeout, or OOM issue, there is no insight into which sub-bench failed. The failure will generally just look like `75/153 Test #9: bench_sanity_check ...................***Failed 770.84 sec out of memory` * Places that can't use ctest (like the Windows-cross CI task) have to explicitly run it, or risk forgetting to run it. * All benchmarks are run sequentially, when they could run in parallel instead. Both issues can lead to CI timeouts and leave CPU unused during testing. Fix all issues by running it as part of the functional tests instead. This is similar to the rpcauth tests (https://github.com/bitcoin/bitcoin/pull/32881) and util tests [bitcoin-tx, and bitcoin-util] (https://github.com/bitcoin/bitcoin/pull/32697). ACKs for top commit: achow101: ACKfa65bc0e79l0rinc: Tested ACKfa65bc0e79janb84: tACKfa65bc0e79willcl-ark: ACKfa65bc0e79Tree-SHA512: d27e363b7896a7543a4ee8df41a56e58b74f07d4f296e2e5ee293fc91817d0be310e26905755fb94d44417d94fa29ad4cc5d4aa19e78d25d41bc2d9e0948c034
This commit is contained in:
8 files changed
+79
-7
No files matched your search
@@ -29,6 +29,11 @@ import sys
|
||||
import tempfile
|
||||
import re
|
||||
import logging
|
||||
from test_framework.util import (
|
||||
Binaries,
|
||||
export_env_build_path,
|
||||
get_binary_paths,
|
||||
)
|
||||
|
||||
# Minimum amount of space to run the tests.
|
||||
MIN_FREE_SPACE = 1.1 * 1024 * 1024 * 1024
|
||||
@@ -87,7 +92,12 @@ EXTENDED_SCRIPTS = [
|
||||
'feature_index_prune.py',
|
||||
]
|
||||
|
||||
# Special script to run each bench sanity check
|
||||
TOOL_BENCH_SANITY_CHECK = "tool_bench_sanity_check.py"
|
||||
|
||||
BASE_SCRIPTS = [
|
||||
# Special scripts that are "expanded" later
|
||||
TOOL_BENCH_SANITY_CHECK,
|
||||
# Scripts that are run by default.
|
||||
# Longest test should go first, to favor running tests in parallel
|
||||
# vv Tests less than 5m vv
|
||||
@@ -458,6 +468,8 @@ def main():
|
||||
print("Re-compile with the -DBUILD_DAEMON=ON build option")
|
||||
sys.exit(1)
|
||||
|
||||
export_env_build_path(config)
|
||||
|
||||
# Build tests
|
||||
test_list = deque()
|
||||
if tests:
|
||||
@@ -512,6 +524,15 @@ def main():
|
||||
# Exclude all variants of a test
|
||||
remove_tests([test for test in test_list if test.split('.py')[0] == exclude_test.split('.py')[0]])
|
||||
|
||||
if config["components"].getboolean("BUILD_BENCH") and TOOL_BENCH_SANITY_CHECK in test_list:
|
||||
# Remove it, and expand it for each bench in the list
|
||||
test_list.remove(TOOL_BENCH_SANITY_CHECK)
|
||||
bench_cmd = Binaries(get_binary_paths(config), bin_dir=None).bench_argv() + ["-list"]
|
||||
bench_list = subprocess.check_output(bench_cmd, text=True).splitlines()
|
||||
bench_list = [f"{TOOL_BENCH_SANITY_CHECK} --bench={b}" for b in bench_list]
|
||||
# Start with special scripts (variable, unknown runtime)
|
||||
test_list.extendleft(reversed(bench_list))
|
||||
|
||||
if args.filter:
|
||||
test_list = deque(filter(re.compile(args.filter).search, test_list))
|
||||
|
||||
|
||||
Reference in new issue
Block a user