[pypy-commit] pypy stmgc-c8-gcc: make script for generating perf-maps "good-enough"
Raemi
noreply at buildbot.pypy.org
Fri Jul 31 15:08:42 CEST 2015
Author: Remi Meier <remi.meier at inf.ethz.ch>
Branch: stmgc-c8-gcc
Changeset: r78727:c63f782261ac
Date: 2015-07-31 15:10 +0200
http://bitbucket.org/pypy/pypy/changeset/c63f782261ac/
Log: make script for generating perf-maps "good-enough"
Remove some features to simplify the script a lot
diff --git a/pypy/stm/make_perf_map_from_pypylog.py b/pypy/stm/make_perf_map_from_pypylog.py
--- a/pypy/stm/make_perf_map_from_pypylog.py
+++ b/pypy/stm/make_perf_map_from_pypylog.py
@@ -1,33 +1,11 @@
#!/usr/bin/env pypy
from rpython.tool.logparser import extract_category
-from rpython.tool.jitlogparser.storage import LoopStorage
-from rpython.tool.jitlogparser.parser import import_log,\
- parse_log_counts, SimpleParser
+from rpython.tool.jitlogparser.parser import (
+ parse_log_file, parse_addresses)
-from collections import OrderedDict
import argparse
import os
-extended_ranges = {}
-
-class SymbolMapParser(SimpleParser):
- def postprocess(self, loop, backend_dump=None, backend_tp=None,
- dump_start=0, symbols=None):
- if backend_dump is not None:
- loop.backend_dump = backend_dump
- loop.dump_start = dump_start
-
- start_offset = loop.operations[0].offset
- last_offset = loop.operations[-1].offset
- loop.range = (start_offset, last_offset)
-
- prev = extended_ranges.get(backend_dump, loop.range)
- extended_ranges[backend_dump] = (min(start_offset, prev[0]),
- max(last_offset, prev[1]))
- return loop
-
-
-
def main():
parser = argparse.ArgumentParser(
@@ -47,45 +25,35 @@
return
filename = args.log
- extra_path = os.path.dirname(filename)
+ log = parse_log_file(filename)
- storage = LoopStorage(extra_path)
- log, loops = import_log(filename, SymbolMapParser)
- parse_log_counts(extract_category(log, 'jit-backend-count'), loops)
- storage.loops = loops
+ addrs = []
+ full_dumps = {}
+ def address_cb(addr, stop_addr, bootstrap_addr, name, code_name):
+ addrs.append((addr, stop_addr, bootstrap_addr, name, code_name))
+ min_start_addr = full_dumps.setdefault(bootstrap_addr, addr)
+ full_dumps[bootstrap_addr] = min(min_start_addr, addr)
- for loop in storage.loops:
- if hasattr(loop, 'force_asm'):
- loop.force_asm(loop=loop)
-
- comment = loop.comment
- start, stop = comment.find('('), comment.rfind(')')
- count = loop.count if hasattr(loop, 'count') else '?'
- loop.name = comment[start+1:stop] + " (ran %sx)" % count
+ parse_addresses(extract_category(log, 'jit-backend-addr'),
+ callback=address_cb)
with open('/tmp/perf-%s.map' % args.pid, 'w') as f:
- fmt = "%x %x %s\n"
+ fmt = "%x %x JIT: %s - %s\n"
+ for addr, stop_addr, bootstrap_addr, name, code_name in addrs:
+ line = fmt % (addr, stop_addr - addr,
+ name, code_name)
+ f.write(line)
+ os.write(1, line)
- for loop in storage.loops:
- if hasattr(loop, 'backend_dump'):
- lower, upper = loop.range
- min_offset, max_offset = extended_ranges[loop.backend_dump]
- if lower == min_offset:
- # include loop-setup
- lower = 0
- if upper == max_offset:
- # include loop-teardown
- upper = loop.last_offset
-
- line = fmt % (lower + loop.dump_start,
- upper - lower,
- "JIT: " + loop.name)
+ fmt = "%x %x JIT: loop bootstrapping %x\n"
+ for bootstrap_addr, min_start_addr in full_dumps.items():
+ if bootstrap_addr != min_start_addr:
+ line = fmt % (bootstrap_addr,
+ min_start_addr - bootstrap_addr,
+ bootstrap_addr)
f.write(line)
os.write(1, line)
-
-
-
if __name__ == '__main__':
main()
More information about the pypy-commit
mailing list