Skip to content

Commit 26d8262

Browse files
author
Harlan Haskins
authored
Merge pull request #21963 from harlanhaskins/throw-it-at-the-wall-and-see-what-sticks
[utils] Add wall time to rusage
2 parents 7281fef + 31f8859 commit 26d8262

File tree

1 file changed

+22
-3
lines changed

1 file changed

+22
-3
lines changed

utils/rusage.py

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import resource
3737
import subprocess
3838
import sys
39+
import time
3940

4041

4142
class MemAction(argparse.Action):
@@ -79,6 +80,9 @@ def __call__(self, parser, namespace, v, option_string=None):
7980
metavar="T",
8081
help="time (in secs, or ..'ms', 'us')",
8182
action=TimeAction)
83+
parser.add_argument("--wall-time",
84+
help="wall time (in secs, or ..'ms', 'us')",
85+
action='store_true')
8286
parser.add_argument("--enforce",
8387
action='store_true',
8488
default=False,
@@ -125,7 +129,13 @@ def __call__(self, parser, namespace, v, option_string=None):
125129
sys.stderr.write("rusage: setrlimit(RLIMIT_RSS, %d)\n"
126130
% mem)
127131
resource.setrlimit(resource.RLIMIT_RSS, (mem, mem))
132+
133+
start = time.time()
128134
ret = subprocess.call(args.remainder)
135+
end = time.time()
136+
137+
wall_time = end - start
138+
129139
used = resource.getrusage(resource.RUSAGE_CHILDREN)
130140

131141
if args.verbose:
@@ -144,18 +154,27 @@ def __call__(self, parser, namespace, v, option_string=None):
144154
if args.verbose or over_time:
145155
sys.stderr.write("rusage: subprocess time: %.6f secs\n"
146156
% used.ru_utime)
157+
if args.wall_time:
158+
sys.stderr.write("rusage: subprocess wall time: %.6f secs\n"
159+
% wall_time)
147160
if over_time:
148161
sys.stderr.write("rusage: exceeded limit: %.6f secs\n"
149162
% args.time)
150163

151164
if args.csv:
152165
fieldnames = ["time", "mem", "run"]
166+
row = {
167+
'time': used.ru_utime,
168+
'mem': used.ru_maxrss,
169+
'run': args.csv_name
170+
}
171+
if args.wall_time:
172+
row['wall'] = wall_time
173+
fieldnames.insert(1, 'wall')
153174
out = csv.DictWriter(args.csv_output, fieldnames, dialect='excel-tab')
154175
if args.csv_header:
155176
out.writeheader()
156-
out.writerow(dict(time=used.ru_utime,
157-
mem=used.ru_maxrss,
158-
run=args.csv_name))
177+
out.writerow(row)
159178

160179
if over_mem or over_time:
161180
sys.exit(-1)

0 commit comments

Comments
 (0)