Author: Armin Rigo <[email protected]>
Branch:
Changeset: r80023:4f21ee6823f2
Date: 2015-10-07 17:12 +0100
http://bitbucket.org/pypy/pypy/changeset/4f21ee6823f2/
Log: Expose to app-level the stats (two numbers) maintained by
AsmMemoryManager
diff --git a/pypy/module/pypyjit/__init__.py b/pypy/module/pypyjit/__init__.py
--- a/pypy/module/pypyjit/__init__.py
+++ b/pypy/module/pypyjit/__init__.py
@@ -15,6 +15,7 @@
'set_compile_hook': 'interp_resop.set_compile_hook',
'set_abort_hook': 'interp_resop.set_abort_hook',
'get_stats_snapshot': 'interp_resop.get_stats_snapshot',
+ 'get_stats_asmmemmgr': 'interp_resop.get_stats_asmmemmgr',
# those things are disabled because they have bugs, but if
# they're found to be useful, fix test_ztranslation_jit_stats
# in the backend first. get_stats_snapshot still produces
diff --git a/pypy/module/pypyjit/interp_resop.py
b/pypy/module/pypyjit/interp_resop.py
--- a/pypy/module/pypyjit/interp_resop.py
+++ b/pypy/module/pypyjit/interp_resop.py
@@ -333,6 +333,13 @@
return space.wrap(W_JitInfoSnapshot(space, w_times, w_counters,
w_counter_times))
+def get_stats_asmmemmgr(space):
+ """Returns the raw memory currently used by the JIT backend,
+ as a pair (total_memory_allocated, memory_in_use)."""
+ m1 = jit_hooks.stats_asmmemmgr_allocated(None)
+ m2 = jit_hooks.stats_asmmemmgr_used(None)
+ return space.newtuple([space.wrap(m1), space.wrap(m2)])
+
def enable_debug(space):
""" Set the jit debugging - completely necessary for some stats to work,
most notably assembler counters.
diff --git a/rpython/jit/backend/llsupport/asmmemmgr.py
b/rpython/jit/backend/llsupport/asmmemmgr.py
--- a/rpython/jit/backend/llsupport/asmmemmgr.py
+++ b/rpython/jit/backend/llsupport/asmmemmgr.py
@@ -25,6 +25,10 @@
self.free_blocks_end = {} # map {stop: start}
self.blocks_by_size = [[] for i in range(self.num_indices)]
+ def get_stats(self):
+ """Returns stats for rlib.jit.jit_hooks.stats_asmmemmgr_*()."""
+ return (self.total_memory_allocated, self.total_mallocs)
+
def malloc(self, minsize, maxsize):
"""Allocate executable memory, between minsize and maxsize bytes,
and return a pair (start, stop). Does not perform any rounding
diff --git a/rpython/rlib/jit_hooks.py b/rpython/rlib/jit_hooks.py
--- a/rpython/rlib/jit_hooks.py
+++ b/rpython/rlib/jit_hooks.py
@@ -129,6 +129,14 @@
def stats_get_loop_run_times(warmrunnerdesc):
return warmrunnerdesc.metainterp_sd.cpu.get_all_loop_runs()
+@register_helper(annmodel.SomeInteger(unsigned=True))
+def stats_asmmemmgr_allocated(warmrunnerdesc):
+ return warmrunnerdesc.metainterp_sd.cpu.asmmemmgr.get_stats()[0]
+
+@register_helper(annmodel.SomeInteger(unsigned=True))
+def stats_asmmemmgr_used(warmrunnerdesc):
+ return warmrunnerdesc.metainterp_sd.cpu.asmmemmgr.get_stats()[1]
+
# ---------------------- jitcell interface ----------------------
def _new_hook(name, resulttype):
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit