Skip to content

Commit 11858e0

Browse files
committed
[process-stats-dir] Add --merge-by=(min|max|sum) for replicated runs.
1 parent 04af20b commit 11858e0

File tree

2 files changed

+20
-5
lines changed

2 files changed

+20
-5
lines changed

utils/jobstats/jobstats.py

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -61,11 +61,22 @@ def driver_jobs_total(self):
6161
assert(self.is_driver_job())
6262
return self.driver_jobs_ran() + self.driver_jobs_skipped()
6363

64-
def merged_with(self, other):
64+
def merged_with(self, other, merge_by="sum"):
6565
"""Return a new JobStats, holding the merger of self and other"""
6666
merged_stats = {}
67+
ops = {"sum": lambda a, b: a + b,
68+
# Because 0 is also a sentinel on counters we do a modified
69+
# "nonzero-min" here. Not ideal but best we can do.
70+
"min": lambda a, b: (min(a, b)
71+
if a != 0 and b != 0
72+
else max(a, b)),
73+
"max": lambda a, b: max(a, b)}
74+
op = ops[merge_by]
6775
for k, v in self.stats.items() + other.stats.items():
68-
merged_stats[k] = v + merged_stats.get(k, 0.0)
76+
if k in merged_stats:
77+
merged_stats[k] = op(v, merged_stats[k])
78+
else:
79+
merged_stats[k] = v
6980
merged_kind = self.jobkind
7081
if other.jobkind != merged_kind:
7182
merged_kind = "<merged>"
@@ -214,7 +225,7 @@ def load_stats_dir(path, select_module=[], select_stat=[],
214225

215226

216227
def merge_all_jobstats(jobstats, select_module=[], group_by_module=False,
217-
**kwargs):
228+
merge_by="sum", **kwargs):
218229
"""Does a pairwise merge of the elements of list of jobs"""
219230
m = None
220231
if len(select_module) > 0:
@@ -226,12 +237,12 @@ def keyfunc(j):
226237
jobstats.sort(key=keyfunc)
227238
prefixed = []
228239
for mod, group in itertools.groupby(jobstats, keyfunc):
229-
groupmerge = merge_all_jobstats(group)
240+
groupmerge = merge_all_jobstats(group, merge_by=merge_by)
230241
prefixed.append(groupmerge.prefixed_by(mod))
231242
jobstats = prefixed
232243
for j in jobstats:
233244
if m is None:
234245
m = j
235246
else:
236-
m = m.merged_with(j)
247+
m = m.merged_with(j, merge_by=merge_by)
237248
return m

utils/process-stats-dir.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -349,6 +349,10 @@ def main():
349349
default=False,
350350
action="store_true",
351351
help="Sort comparison results in descending order")
352+
parser.add_argument("--merge-by",
353+
default="sum",
354+
type=str,
355+
help="Merge identical metrics by (sum|min|max)")
352356
parser.add_argument("--markdown",
353357
default=False,
354358
action="store_true",

0 commit comments

Comments
 (0)