From 2aa4d6494735a4292df99241d7b768a62f94f03f Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Wed, 14 Jan 2015 15:59:44 -0800 Subject: Helgrind support for run_tests.py Also allow maxjobs to be tweaked based upon which configs are being run, to prevent memory starvation. --- tools/run_tests/run_tests.py | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) (limited to 'tools/run_tests') diff --git a/tools/run_tests/run_tests.py b/tools/run_tests/run_tests.py index 428f6c41b4..04be27bab0 100755 --- a/tools/run_tests/run_tests.py +++ b/tools/run_tests/run_tests.py @@ -15,6 +15,7 @@ import watch_dirs class SimpleConfig(object): def __init__(self, config): self.build_config = config + self.maxjobs = 32 * multiprocessing.cpu_count() def run_command(self, binary): return [binary] @@ -22,11 +23,13 @@ class SimpleConfig(object): # ValgrindConfig: compile with some CONFIG=config, but use valgrind to run class ValgrindConfig(object): - def __init__(self, config): + def __init__(self, config, tool): self.build_config = config + self.tool = tool + self.maxjobs = 4 * multiprocessing.cpu_count() def run_command(self, binary): - return ['valgrind', binary] + return ['valgrind', binary, '--tool=%s' % self.tool] # different configurations we can run under @@ -37,7 +40,8 @@ _CONFIGS = { 'msan': SimpleConfig('msan'), 'asan': SimpleConfig('asan'), 'gcov': SimpleConfig('gcov'), - 'valgrind': ValgrindConfig('dbg'), + 'memcheck': ValgrindConfig('dbg', 'memcheck'), + 'helgrind': ValgrindConfig('dbg', 'helgrind') } @@ -81,14 +85,18 @@ def _build_and_run(check_cancelled): return 1 # run all the tests - if not jobset.run(( - config.run_command(x) - for config in run_configs - for filt in filters - for x in itertools.chain.from_iterable(itertools.repeat( - glob.glob('bins/%s/%s_test' % ( - config.build_config, filt)), - runs_per_test))), check_cancelled): + if not jobset.run( + itertools.ifilter( + lambda x: x is not None, ( + config.run_command(x) + for config in run_configs + for filt in filters + for x in itertools.chain.from_iterable(itertools.repeat( + glob.glob('bins/%s/%s_test' % ( + config.build_config, filt)), + runs_per_test)))), + check_cancelled, + maxjobs=min(c.maxjobs for c in run_configs)): return 2 return 0 -- cgit v1.2.3