[pypy-svn] r60066 - pypy/build/benchmem
hpk at codespeak.net
hpk at codespeak.net
Sat Nov 22 14:42:36 CET 2008
Author: hpk
Date: Sat Nov 22 14:42:36 2008
New Revision: 60066
Modified:
pypy/build/benchmem/report.py
Log:
generate a different simpler table for pauses
Modified: pypy/build/benchmem/report.py
==============================================================================
--- pypy/build/benchmem/report.py (original)
+++ pypy/build/benchmem/report.py Sat Nov 22 14:42:36 2008
@@ -81,10 +81,21 @@
def __init__(self, resultset):
self.resultset = resultset.filter(benchtype=self.benchtype)
-class TableReporter(ReporterBase):
+ def getexecutables(self, unique=True, short=True):
+ executables = []
+ for result in self.resultset.results:
+ if short:
+ name = result.executable_short
+ else:
+ name = str(result.executable)
+ if not unique or name not in executables:
+ executables.append(name)
+ return executables
- begin = report = end = lambda x: None # hooks
+class CheckpointDetails(ReporterBase):
+ benchtype = "objsizes"
+ begin = report = end = lambda x: None # hooks
def run_text(self):
self.begin()
for name, results in self.resultset.getname2results():
@@ -97,32 +108,13 @@
for result in results:
row.append(result.snapshots[i].private)
rows.append(row)
- self.report(name, rows)
+ self.tw.sep("=", "private RSS at checkpoints: %s" %(name,))
+ self.tw.line(asciitable(rows))
self.end()
-class CheckpointDetails(TableReporter):
- benchtype = "objsizes"
- def begin(self):
- self.tw = py.io.TerminalWriter()
-
- def report(self, name, rows):
- self.tw.sep("=", "private RSS at checkpoints: %s" %(name,))
- self.tw.line(asciitable(rows))
-
class IncrementalSizePerBench(ReporterBase):
benchtype = "objsizes"
- def getexecutables(self):
- ret = None
- for name, results in self.resultset.getname2results():
- executables = [result.executable for result in results]
- if ret is None:
- ret = executables
- if ret != executables:
- raise ValueError("resultset has incompatible list of executables"
- "%s != %s" %(ret, executables))
- return ret
-
def run_text(self):
tw = py.io.TerminalWriter()
tw.sep("=", "Incremental private RSS of size benchmarks")
@@ -136,16 +128,19 @@
print "wrote", p
def gettable(self):
- executables = self.getexecutables()
+ executables = self.getexecutables(unique=True, short=True)
row0 = ["name"] + [str(x) for x in executables]
rows = [row0]
name2results = self.resultset.getname2results()
name2results.sort()
+ # we rely on result ordering below, i.e.
+ # each benchmark is run and recorded with the same interpreter ordering
for name, results in name2results:
basesize = self.get_incremental_size(results[0])
row = [name]
- for result in results:
+ for executable, result in zip(executables, results):
+ assert result.executable_short == executable, "ordering assumtion"
incsize = self.get_incremental_size(result)
# colors work but messup table layout
color = incsize <= basesize and "green" or "red"
@@ -389,6 +384,7 @@
snapshots = BaseSizeOfInterpreters(self.full_resultset).run_graphic()
name2result = self.resultset.getname2results()
plotter.plot_appprofiles(name2result, snapshots)
+ plotter.plot_appprofiles(name2result, totals)
def generate_table(self, rest_table=False):
executables = self.getexecutables()
@@ -450,53 +446,43 @@
class Pauses(ReporterBase):
benchtype = "pauses"
- def getexecutables(self):
- return [r.executable for r in self.resultset.results]
-
def run_rest(self, filename="table-pauses.txt"):
p = py.path.local(filename)
- rows = self.generate_table(True)
+ rows = self.generate_table()
p.write(str(ReSTtable(rows)))
print "wrote", p
-
def run_text(self):
tw = py.io.TerminalWriter()
tw.sep("=", "Pauses between every bytecode")
rows = self.generate_table()
tw.line(asciitable(rows))
- def generate_table(self, gist_only=False):
- if gist_only:
- row0 = ["interpreter", "benchmark", "no. samples", "median", "max"]
- else:
- row0 = ["interpreter", "benchmark", "#samples", "median", "max", "#large"]
-
+ def generate_table(self):
+ executables = self.getexecutables()
+ row0 = ["bench"] + executables
rows = [row0]
+
+ # order by benchname
+ benchname2executable2result = {}
for result in self.resultset.results:
- cell0 = [result.executable_short, result.benchname]
- samples = result.lst
- # get all samples that are larger than FACTOR * smallest_sample
- # base_sample = min(samples)
- # FACTOR = 100
- # threshold = FACTOR * base_sample
- # get all samples that are larger than threshold
- threshold = 0.050
- median = samples[len(samples) / 2]
- pauses = [sample for sample in samples if sample > threshold]
- pauses.sort()
- pauses.reverse()
- if gist_only:
- row = cell0 + [len(samples), "%.5f" % median, "%.2f" % max(samples)]
- else:
- row = cell0 + [threshold, len(samples), "%.5f" % median, "%.2f" % max(samples), len(pauses)] + [str(pause) for pause in pauses]
- rows.append(row)
- return rows
+ d = benchname2executable2result.setdefault(result.benchname, {})
+ assert result.executable_short not in d
+ d[result.executable_short] = result
+
+ benchnames = benchname2executable2result.keys()
+ benchnames.sort()
+ for benchname in benchnames:
+ row = [benchname]
+ for executable in row0[1:]:
+ result = benchname2executable2result[benchname][executable]
+ maxpause = max(result.lst)
+ row.append("%.2fs" %(maxpause,))
+ rows.append(row)
+ return rows
def run_graphic(self, plotter):
plotter.plot_pausehistogram(self.resultset)
- name2result = resultset.getname2results()
- plotter.plot_appprofiles(name2result, totals)
if __name__ == "__main__":
options, args = parser.parse_args()
@@ -527,7 +513,7 @@
if not reporter.resultset:
print "skipping %s reporting, no results found" %(cls.__name__, )
continue
- if options.text and hasattr(reporter, 'run'):
+ if options.text and hasattr(reporter, 'run_text'):
reporter.run_text()
if options.basepath or options.show:
if hasattr(reporter, 'run_graphic'):
More information about the Pypy-commit
mailing list