scripts: bench.py: Fixed issue where cumul results were mixed together
Whoops, looks like cumulative results were overlooked when multiple bench measurements per bench were added. We were just adding all cumulative results together! This led to some very confusing bench results. The solution here is to keep track of per-measurement cumulative results via a Python dict. Which adds some memory usage, but definitely not enough to be noticeable in the context of the bench-runner.
This commit is contained in:
+21
-21
@@ -1042,9 +1042,9 @@ def run_stage(name, runner, bench_ids, stdout_, trace_, output_, **args):
|
|||||||
last_defines = None # fetched on demand
|
last_defines = None # fetched on demand
|
||||||
last_stdout = co.deque(maxlen=args.get('context', 5) + 1)
|
last_stdout = co.deque(maxlen=args.get('context', 5) + 1)
|
||||||
last_assert = None
|
last_assert = None
|
||||||
readed_ = None
|
creaded = co.defaultdict(lambda: 0)
|
||||||
proged_ = None
|
cproged = co.defaultdict(lambda: 0)
|
||||||
erased_ = None
|
cerased = co.defaultdict(lambda: 0)
|
||||||
try:
|
try:
|
||||||
while True:
|
while True:
|
||||||
# parse a line for state changes
|
# parse a line for state changes
|
||||||
@@ -1075,9 +1075,9 @@ def run_stage(name, runner, bench_ids, stdout_, trace_, output_, **args):
|
|||||||
last_defines = None
|
last_defines = None
|
||||||
last_stdout.clear()
|
last_stdout.clear()
|
||||||
last_assert = None
|
last_assert = None
|
||||||
readed_ = 0
|
creaded.clear()
|
||||||
proged_ = 0
|
cproged.clear()
|
||||||
erased_ = 0
|
cerased.clear()
|
||||||
elif op == 'finished':
|
elif op == 'finished':
|
||||||
# force a failure
|
# force a failure
|
||||||
if args.get('fail'):
|
if args.get('fail'):
|
||||||
@@ -1110,13 +1110,13 @@ def run_stage(name, runner, bench_ids, stdout_, trace_, output_, **args):
|
|||||||
return float(v)
|
return float(v)
|
||||||
else:
|
else:
|
||||||
return int(v)
|
return int(v)
|
||||||
readed__ = dat(m.group('readed'))
|
readed_ = dat(m.group('readed'))
|
||||||
proged__ = dat(m.group('proged'))
|
proged_ = dat(m.group('proged'))
|
||||||
erased__ = dat(m.group('erased'))
|
erased_ = dat(m.group('erased'))
|
||||||
# keep track of cumulative measurements
|
# keep track of cumulative measurements
|
||||||
readed_ += readed__
|
creaded[m_] += readed_
|
||||||
proged_ += proged__
|
cproged[m_] += proged_
|
||||||
erased_ += erased__
|
cerased[m_] += erased_
|
||||||
if output_:
|
if output_:
|
||||||
# fetch defines if needed, only do this at most
|
# fetch defines if needed, only do this at most
|
||||||
# once per perm
|
# once per perm
|
||||||
@@ -1131,16 +1131,16 @@ def run_stage(name, runner, bench_ids, stdout_, trace_, output_, **args):
|
|||||||
**last_defines,
|
**last_defines,
|
||||||
'm': m_,
|
'm': m_,
|
||||||
'n': n_,
|
'n': n_,
|
||||||
'bench_readed': readed__,
|
'bench_readed': readed_,
|
||||||
'bench_proged': proged__,
|
'bench_proged': proged_,
|
||||||
'bench_erased': erased__,
|
'bench_erased': erased_,
|
||||||
'bench_creaded': readed_,
|
'bench_creaded': creaded[m_],
|
||||||
'bench_cproged': proged_,
|
'bench_cproged': cproged[m_],
|
||||||
'bench_cerased': erased_})
|
'bench_cerased': cerased[m_]})
|
||||||
# keep track of total for summary
|
# keep track of total for summary
|
||||||
readed += readed__
|
readed += readed_
|
||||||
proged += proged__
|
proged += proged_
|
||||||
erased += erased__
|
erased += erased_
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
proc.kill()
|
proc.kill()
|
||||||
raise BenchFailure(last_id, 0, list(last_stdout))
|
raise BenchFailure(last_id, 0, list(last_stdout))
|
||||||
|
|||||||
Reference in New Issue
Block a user