Author: Richard Plangger <[email protected]>
Branch: vmprof-native
Changeset: r90032:1b6119b16048
Date: 2017-02-10 16:37 +0100
http://bitbucket.org/pypy/pypy/changeset/1b6119b16048/
Log: call dyn_register_jit_page when a loop or bridge is compiled
diff --git a/rpython/jit/metainterp/compile.py
b/rpython/jit/metainterp/compile.py
--- a/rpython/jit/metainterp/compile.py
+++ b/rpython/jit/metainterp/compile.py
@@ -501,11 +501,17 @@
'compiling', None, name, memo)
_log = metainterp_sd.jitlog.log_trace(jl.MARK_TRACE_OPT, metainterp_sd,
None)
_log.write(inputargs, operations)
- return metainterp_sd.cpu.compile_loop(inputargs,
+ asminfo = metainterp_sd.cpu.compile_loop(inputargs,
operations, looptoken,
jd_id=jd_id, unique_id=unique_id,
- log=log, name=name,
- logger=metainterp_sd.jitlog)
+ log=log, name=name,
logger=metainterp_sd.jitlog)
+
+ vmprof = metainterp_sd.vmprof
+ if vmprof:
+ vmprof.dyn_register_jit_page(asminfo.asmaddr,
+ asminfo.asmaddr+asminfo.asmlen, 1)
+
+ return asminfo
def do_compile_bridge(metainterp_sd, faildescr, inputargs, operations,
original_loop_token, log=True, memo=None):
@@ -515,9 +521,14 @@
_log = metainterp_sd.jitlog.log_trace(jl.MARK_TRACE_OPT, metainterp_sd,
None)
_log.write(inputargs, operations)
assert isinstance(faildescr, AbstractFailDescr)
- return metainterp_sd.cpu.compile_bridge(faildescr, inputargs, operations,
+ asminfo = metainterp_sd.cpu.compile_bridge(faildescr, inputargs,
operations,
original_loop_token, log=log,
logger=metainterp_sd.jitlog)
+ vmprof = metainterp_sd.vmprof
+ if vmprof:
+ vmprof.dyn_register_jit_page(asminfo.asmaddr,
+ asminfo.asmaddr+asminfo.asmlen, 0)
+ return asminfo
def forget_optimization_info(lst, reset_values=False):
for item in lst:
diff --git a/rpython/jit/metainterp/pyjitpl.py
b/rpython/jit/metainterp/pyjitpl.py
--- a/rpython/jit/metainterp/pyjitpl.py
+++ b/rpython/jit/metainterp/pyjitpl.py
@@ -1823,6 +1823,12 @@
self.jitlog.logger_noopt = self.logger_noopt
self.jitlog.logger_ops = self.logger_ops
+ from rpython.rlib.rvmprof import rvmprof, cintf
+ try:
+ self.vmprof = rvmprof._get_vmprof()
+ except cintf.VMProfPlatformUnsupported:
+ self.vmprof = None
+
self.profiler = ProfilerClass()
self.profiler.cpu = cpu
self.warmrunnerdesc = warmrunnerdesc
diff --git a/rpython/rlib/rvmprof/rvmprof.py b/rpython/rlib/rvmprof/rvmprof.py
--- a/rpython/rlib/rvmprof/rvmprof.py
+++ b/rpython/rlib/rvmprof/rvmprof.py
@@ -160,6 +160,17 @@
if res < 0:
raise VMProfError(os.strerror(rposix.get_saved_errno()))
+
+ def dyn_register_jit_page(self, addr, end_addr, loop, name=None):
+ if name is None:
+ cname = rffi.cast(rffi.CHARP, 0)
+ else:
+ cname = rffi.str2charp(name)
+ return self.cintf.vmp_dyn_register_jit_page(addr, end_addr, cname)
+
+ def dyn_cancel(self, ref):
+ self.cintf.vmp_dyn_cancel(ref)
+
def _write_code_registration(self, uid, name):
assert name.count(':') == 3 and len(name) <= MAX_FUNC_NAME, (
"the name must be 'class:func_name:func_line:filename' "
@@ -250,9 +261,6 @@
def _was_registered(CodeClass):
return hasattr(CodeClass, '_vmprof_unique_id')
-def register_jit_page(addr, end_addr, splits):
- pass
-
_vmprof_instance = None
@specialize.memo()
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit