[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