diff options
author | Gabe Black <gabeblack@google.com> | 2018-07-26 16:06:01 -0700 |
---|---|---|
committer | Gabe Black <gabeblack@google.com> | 2018-09-11 21:50:04 +0000 |
commit | c1e24eda83ef1621842a24e810c8656dfe0fcbbc (patch) | |
tree | 4b03f984ccec0c8ee624aa451ab2813c8be4dc9f /src/systemc/tests | |
parent | a2ab1052c91ad82fa0bb564cb39a8be6dc496120 (diff) | |
download | gem5-c1e24eda83ef1621842a24e810c8656dfe0fcbbc.tar.xz |
systemc: Extend the execute phase of verify.py.
Add -j and --timeout options to the execute phase of verify.py.
The --timeout option is implemented using the timeout utility program
which is assumed to be available on the host system. Python 3.3 added
a timeout argument to the subprocess module which is an alternative
approach, but then we would be dependent on python 3.3.
-j is implemented using the standard multiprocess.pool.ThreadPool
class.
Change-Id: I15b92f2b14de6710e2027a6a19984b2644b2a8df
Reviewed-on: https://gem5-review.googlesource.com/12051
Reviewed-by: Gabe Black <gabeblack@google.com>
Maintainer: Gabe Black <gabeblack@google.com>
Diffstat (limited to 'src/systemc/tests')
-rwxr-xr-x | src/systemc/tests/verify.py | 36 |
1 files changed, 30 insertions, 6 deletions
diff --git a/src/systemc/tests/verify.py b/src/systemc/tests/verify.py index 34ae93110..cface4761 100755 --- a/src/systemc/tests/verify.py +++ b/src/systemc/tests/verify.py @@ -35,6 +35,7 @@ import inspect import itertools import json import logging +import multiprocessing.pool import os import subprocess import sys @@ -120,16 +121,39 @@ class RunPhase(TestPhaseBase): number = 2 def run(self, tests): - for test in tests: - if test.compile_only: - continue - args = [ + parser = argparse.ArgumentParser() + parser.add_argument('--timeout', type=int, metavar='SECONDS', + help='Time limit for each run in seconds.', + default=0) + parser.add_argument('-j', type=int, default=1, + help='How many tests to run in parallel.') + args = parser.parse_args(self.args) + + timeout_cmd = [ + 'timeout', + '--kill-after', str(args.timeout * 2), + str(args.timeout) + ] + def run_test(test): + cmd = [] + if args.timeout: + cmd.extend(timeout_cmd) + cmd.extend([ test.full_path(), '-red', test.m5out_dir(), '--listener-mode=off', config_path - ] - subprocess.check_call(args) + ]) + subprocess.check_call(cmd) + + runnable = filter(lambda t: not t.compile_only, tests) + if args.j == 1: + map(run_test, runnable) + else: + tp = multiprocessing.pool.ThreadPool(args.j) + map(lambda t: tp.apply_async(run_test, (t,)), runnable) + tp.close() + tp.join() class VerifyPhase(TestPhaseBase): name = 'verify' |