Author: Remi Meier <remi.me...@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() _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit