[pypy-svn] r58432 - pypy/build/benchmem
hpk at codespeak.net
hpk at codespeak.net
Thu Sep 25 15:45:46 CEST 2008
Author: hpk
Date: Thu Sep 25 15:45:44 2008
New Revision: 58432
Modified:
pypy/build/benchmem/report.py
pypy/build/benchmem/runbench.py
Log:
more specific reporting:
* incremental sizes of size benchmarks
* detailed base interpreter sizes
Modified: pypy/build/benchmem/report.py
==============================================================================
--- pypy/build/benchmem/report.py (original)
+++ pypy/build/benchmem/report.py Thu Sep 25 15:45:44 2008
@@ -12,6 +12,8 @@
parser = py.compat.optparse.OptionParser(usage=__doc__)
parser.add_option("-l", "--benchlog", action="store", dest="benchlog", default="bench.log",
help="logfile to read results from")
+parser.add_option("-g", "--gnuplot", action="store_true", dest="gnuplot", default=False,
+ help="generate gnuplot output")
def asciitable(table):
colmax = []
@@ -27,6 +29,7 @@
line.append("%%-%ds" %(width) %(col))
lines.append(" ".join(line))
return "\n".join(lines)
+
def maxtable_overview(reader):
tw = py.io.TerminalWriter()
@@ -103,6 +106,81 @@
)
os.system("gnuplot gnuplotcmd")
+class Sorter:
+ def __init__(self, name2results):
+ self.name2results = name2results
+
+ def filter(self, benchprefix=""):
+ d = {}
+ for name, results in self.name2results.iteritems():
+ if name.startswith(benchprefix):
+ d[name] = results
+ return Sorter(d)
+
+ def getsorted(self):
+ l = self.name2results.items()
+ l.sort()
+ return l
+
+ def getexecutables(self):
+ ret = None
+ for name, results in self.name2results.iteritems():
+ 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
+
+class IncrementalSizePerBench:
+ def __init__(self, reader):
+ self.reader = reader
+
+ def run(self):
+ tw = py.io.TerminalWriter()
+ tw.sep("=", "Incremental private RSS of size benchmarks")
+ sorter = Sorter(self.reader.name2results)
+ sorter = sorter.filter(benchprefix="sizes.")
+ executables = sorter.getexecutables()
+ row0 = ["name"] + [str(x) for x in executables]
+ rows = [row0]
+ for name, results in sorter.getsorted():
+ basesize = self.get_incremental_size(results[0])
+ row = [name]
+ for result in results:
+ incsize = self.get_incremental_size(result)
+ # colors work but messup table layout
+ #color = incsize <= basesize and "green" or "red"
+ #row.append(tw.markup(str(incsize), **{color:True}))
+ row.append(incsize)
+ rows.append(row)
+ tw.line(asciitable(rows))
+
+ def get_incremental_size(self, result):
+ # checkpoint 0: state before benchmark
+ # checkpoint 1: state at end of benchmark func
+ # checkpoint 2: state after benchmark func finished
+ basesize = result.snapshots[0].private
+ inbench = result.snapshots[1].private
+ return inbench - basesize
+
+class BaseSizeOfInterpreters:
+ def __init__(self, reader):
+ self.reader = reader
+ def run(self):
+ tw = py.io.TerminalWriter()
+ tw.sep("=", "Base Size of interpreters (using sizes.bench_list_of_None)")
+ sorter = Sorter(self.reader.name2results).filter(benchprefix="sizes.")
+ row0 = "executable rss shared_clean shared_dirty private_clean private_dirty".split()
+ rows = [row0]
+ for result in sorter.name2results['sizes.bench_list_of_None']:
+ row = [result.executable]
+ for name in row0[1:]:
+ row.append(getattr(result.snapshots[0], name))
+ rows.append(row)
+ tw.line(asciitable(rows))
+
if __name__ == "__main__":
options, args = parser.parse_args()
@@ -112,7 +190,11 @@
#maxtable_overview(reader)
CheckpointDetails(reader).run()
- Gnuplot(reader).run()
+ IncrementalSizePerBench(reader).run()
+ BaseSizeOfInterpreters(reader).run()
+
+ if options.gnuplot:
+ Gnuplot(reader).run()
#for name, results in reader.name2results.items():
# tw.sep("=", name)
@@ -122,3 +204,4 @@
# result.max("shared_dirty"),
# result.max("private_dirty")
### )
+
Modified: pypy/build/benchmem/runbench.py
==============================================================================
--- pypy/build/benchmem/runbench.py (original)
+++ pypy/build/benchmem/runbench.py Thu Sep 25 15:45:44 2008
@@ -145,7 +145,8 @@
# see write_benchheader
executable = eval(line.split("=", 1)[1])
benchbasename = eval(f.readline().split("=", 1)[1])
- benchname = eval(f.readline().split("=", 1)[1])
+ benchfuncname = eval(f.readline().split("=", 1)[1])
+ benchname = "%s.%s" % (benchbasename[:-3], benchfuncname)
benchargs = eval(f.readline().split("=", 1)[1])
snapshots = []
More information about the Pypy-commit
mailing list