Add CPU cost measurement, tune parameters, decrease default maxjobs
diff --git a/tools/run_tests/jobset.py b/tools/run_tests/jobset.py
index b012686..4c2080f 100755
--- a/tools/run_tests/jobset.py
+++ b/tools/run_tests/jobset.py
@@ -33,6 +33,7 @@
import multiprocessing
import os
import platform
+import re
import signal
import subprocess
import sys
@@ -40,6 +41,10 @@
import time
+# cpu cost measurement
+measure_cpu_costs = False
+
+
_DEFAULT_MAX_JOBS = 16 * multiprocessing.cpu_count()
_MAX_RESULT_SIZE = 8192
@@ -220,7 +225,10 @@
env.update(self._spec.environ)
env.update(self._add_env)
self._start = time.time()
- try_start = lambda: subprocess.Popen(args=self._spec.cmdline,
+ cmdline = self._spec.cmdline
+ if measure_cpu_costs:
+ cmdline = ['time', '--portability'] + cmdline
+ try_start = lambda: subprocess.Popen(args=cmdline,
stderr=subprocess.STDOUT,
stdout=self._tempfile,
cwd=self._spec.cwd,
@@ -269,14 +277,23 @@
self.result.returncode = self._process.returncode
else:
self._state = _SUCCESS
- message('PASSED', '%s [time=%.1fsec; retries=%d;%d]' % (
- self._spec.shortname, elapsed, self._retries, self._timeout_retries),
+ measurement = ''
+ if measure_cpu_costs:
+ m = re.search(r'real ([0-9.]+)\nuser ([0-9.]+)\nsys ([0-9.]+)', stdout())
+ real = float(m.group(1))
+ user = float(m.group(2))
+ sys = float(m.group(3))
+ if real > 0.5:
+ cores = (user + sys) / real
+ measurement = '; cpu_cost=%.01f' % cores
+ message('PASSED', '%s [time=%.1fsec; retries=%d:%d%s]' % (
+ self._spec.shortname, elapsed, self._retries, self._timeout_retries, measurement),
do_newline=self._newline_on_success or self._travis)
self.result.state = 'PASSED'
if self._bin_hash:
update_cache.finished(self._spec.identity(), self._bin_hash)
- elif (self._state == _RUNNING and
- self._spec.timeout_seconds is not None and
+ elif (self._state == _RUNNING and
+ self._spec.timeout_seconds is not None and
time.time() - self._start > self._spec.timeout_seconds):
if self._timeout_retries < self._spec.timeout_retries:
message('TIMEOUT_FLAKE', '%s [pid=%d]' % (self._spec.shortname, self._process.pid), stdout(), do_newline=True)