Bug 1294109 - Print resource usage of task; r?ekyle
While we're here, let's print getrlimit() CPU data as observed by
run-task. I want to explicitly capture CPU usage of `run-task` so
we can ensure `run-task` doesn't introduce too much overhead.
MozReview-Commit-ID: 19hvOpDhsLS
--- a/testing/docker/recipes/run-task
+++ b/testing/docker/recipes/run-task
@@ -17,16 +17,17 @@ from __future__ import absolute_import,
import argparse
import datetime
import errno
import grp
import os
import pwd
import re
+import resource
import subprocess
import sys
RE_TIME_PREFIX = re.compile('^\d{2}:\d{2}:\d{2}\s+')
RE_MOZHARNESS_START_STEP = re.compile('\[mozharness:[^\]]+\] Running '
'(?P<step>[a-zA-Z0-9_-]+) step')
RE_MOZHARNESS_END_STEP = re.compile('\[mozharness:[^\]]+\] Finished '
@@ -210,17 +211,27 @@ def main(args):
# resolved by a checkout.
if checkout:
vcs_checkout(args)
elif not os.environ.get('GECKO_HEAD_REV') and \
os.environ.get('GECKO_HEAD_REF'):
print('task should be defined in terms of non-symbolic revision')
return 1
- return run_and_prefix_output(b'task', task_args)
+ try:
+ return run_and_prefix_output(b'task', task_args)
+ finally:
+ # Print resource usage of self and children for forensics
+ # purposes.
+ self_usage = resource.getrusage(resource.RUSAGE_SELF)
+ children_usage = resource.getrusage(resource.RUSAGE_CHILDREN)
+ print_line(b'resource', b'self CPU usage: %.2f user; %.2f sys\n' % (
+ self_usage.ru_utime, self_usage.ru_stime))
+ print_line(b'resource', b'children CPU usage: %.2f user; %.2f sys\n' % (
+ children_usage.ru_utime, children_usage.ru_stime))
if __name__ == '__main__':
# Unbuffer stdio.
sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)
sys.stderr = os.fdopen(sys.stderr.fileno(), 'w', 0)
sys.exit(main(sys.argv[1:]))