summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGabe Black <gabeblack@google.com>2018-07-26 16:06:01 -0700
committerGabe Black <gabeblack@google.com>2018-09-11 21:50:04 +0000
commitc1e24eda83ef1621842a24e810c8656dfe0fcbbc (patch)
tree4b03f984ccec0c8ee624aa451ab2813c8be4dc9f
parenta2ab1052c91ad82fa0bb564cb39a8be6dc496120 (diff)
downloadgem5-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>
-rwxr-xr-xsrc/systemc/tests/verify.py36
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'