Author: Richard Plangger <[email protected]>
Branch: new-jit-log
Changeset: r83107:3c69b7ad777e
Date: 2016-03-17 12:41 +0100
http://bitbucket.org/pypy/pypy/changeset/3c69b7ad777e/
Log: revived this branch, writes all resoperations into the log (to be
independant from the pypy code base)
diff --git a/rpython/jit/metainterp/jitlog.py b/rpython/jit/metainterp/jitlog.py
--- a/rpython/jit/metainterp/jitlog.py
+++ b/rpython/jit/metainterp/jitlog.py
@@ -1,13 +1,17 @@
from rpython.rlib.rvmprof.rvmprof import cintf
+from rpython.jit.metainterp import resoperation as resoperations
+import struct
class VMProfJitLogger(object):
- MARK_BLOCK_ASM = 0x10
+ MARK_TRACED = 0x10
+ MARK_ASM = 0x11
- MARK_INPUT_ARGS = 0x11
- MARK_RESOP = 0x12
+ MARK_INPUT_ARGS = 0x12
+ MARK_RESOP = 0x13
- MARK_RESOP_META = 0x13
+ MARK_RESOP_META = 0x14
+ MARK_RESOP = 0x15
def __init__(self):
self.cintf = cintf.setup()
@@ -16,31 +20,31 @@
self.cintf.jitlog_try_init_using_env()
if self.cintf.jitlog_filter(0x0):
return
- self.cintf.jitlog_write_marker(MARK_RESOP_META);
- count = len(resoperation.opname)
- self.cintf.jitlog_write_int(count)
- for opnum, opname in resoperation.opname.items():
- self.cintf.write_marker(opnum)
- self.cintf.write_string(opname)
+ count = len(resoperations.opname)
+ mark = VMProfJitLogger.MARK_RESOP_META
+ for opnum, opname in resoperations.opname.items():
+ line = struct.pack(">h", opnum) + opname.lower()
+ self.write_marked(mark, line)
+
+ def teardown(self):
+ self.cintf.jitlog_teardown()
+
+ def write_marked(self, mark, line):
+ self.cintf.jitlog_write_marked(mark, line, len(line))
def log_trace(self, tag, args, ops,
faildescr=None, ops_offset={}):
if self.cintf.jitlog_filter(tag):
return
assert isinstance(tag, int)
- self.cintf.jitlog_write_marker(tag);
# input args
- self.cintf.jitlog_write_marker(MARK_INPUT_ARGS);
str_args = [arg.repr_short(arg._repr_memo) for arg in args]
- self.cintf.jitlog_write_string(','.join(str_args))
+ self.write_marked(self.MARK_INPUT_ARGS, ','.join(str_args))
- self.cintf.jitlog_write_int(len(ops))
for i,op in enumerate(ops):
- self.cintf.jitlog_write_marker(MARK_RESOP)
- self.cintf.jitlog_write_marker(op.getopnum())
str_args = [arg.repr_short(arg._repr_memo) for arg in
op.getarglist()]
descr = op.getdescr()
if descr:
str_args += ['descr='+descr]
- self.cintf.jitlog_write_string(','.join(str_args))
+ self.write_marked(self.MARK_RESOP, ','.join(args))
diff --git a/rpython/rlib/rvmprof/cintf.py b/rpython/rlib/rvmprof/cintf.py
--- a/rpython/rlib/rvmprof/cintf.py
+++ b/rpython/rlib/rvmprof/cintf.py
@@ -56,12 +56,18 @@
compilation_info=eci,
_nowrapper=True)
- jitlog_init = rffi.llexternal("jitlog_init", [rffi.INT, rffi.CHARP],
- rffi.CHARP, compilation_info=eci,
- save_err=rffi.RFFI_SAVE_ERRNO)
- jitlog_init = rffi.llexternal("jitlog_write_marker", [rffi.INT,
rffi.CHARP],
- rffi.CHARP, compilation_info=eci,
- save_err=rffi.RFFI_SAVE_ERRNO)
+ # jit log functions
+ jitlog_init = rffi.llexternal("jitlog_init", [rffi.INT, rffi.CCHARP],
+ rffi.CCHARP, compilation_info=eci)
+ jitlog_try_init_using_env = rffi.llexternal("jitlog_try_init_using_env",
+ [], lltype.Void, compilation_info=eci)
+ jitlog_write_marked = rffi.llexternal("jitlog_write_marked",
+ [rffi.INT, rffi.CCHARP, rffi.INT],
+ lltype.Void, compilation_info=eci)
+ jitlog_filter = rffi.llexternal("jitlog_filter", [rffi.INT], rffi.INT,
+ compilation_info=eci)
+ jitlog_teardown = rffi.llexternal("jitlog_teardown", [], lltype.Void,
+ compilation_info=eci)
return CInterface(locals())
diff --git a/rpython/rlib/rvmprof/src/jitlog_main.h
b/rpython/rlib/rvmprof/src/jitlog_main.h
--- a/rpython/rlib/rvmprof/src/jitlog_main.h
+++ b/rpython/rlib/rvmprof/src/jitlog_main.h
@@ -29,14 +29,13 @@
}
if (!colon) {
/* JITLOG=+filename (or just 'filename') --- profiling version */
- debug_profile = 1;
- pypy_setup_profiling();
+ //pypy_setup_profiling();
} else {
/* JITLOG=prefix:filename --- conditional logging */
int n = colon - filename;
jitlog_prefix = malloc(n + 1);
memcpy(jitlog_prefix, filename, n);
- debug_prefix[n] = '\0';
+ //debug_prefix[n] = '\0';
filename = colon + 1;
}
escape = strstr(filename, "%d");
@@ -55,7 +54,7 @@
if (strcmp(filename, "-") != 0) {
// mode is 775
mode_t mode = S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH;
- jitlog_fd = open(filename, O_WRONLY | O_CREATE, mode);
+ jitlog_fd = open(filename, O_WRONLY | O_CREAT, mode);
}
if (escape) {
@@ -70,7 +69,7 @@
}
}
if (!jitlog_fd) {
- jitlog_fd = stderr;
+ jitlog_fd = 2;
// TODO
//if (isatty(2))
// {
@@ -84,7 +83,7 @@
}
RPY_EXTERN
-char *jitlog_init(int fd, char * prefix)
+char *jitlog_init(int fd, const char * prefix)
{
jitlog_fd = fd;
jitlog_prefix = strdup(prefix);
@@ -92,15 +91,32 @@
}
RPY_EXTERN
-void jitlog_close(int close_fd)
+void jitlog_teardown()
{
+ jitlog_ready = 0;
if (jitlog_fd == -1) {
return;
}
- if (close_fd) {
- close(jitlog_fd);
+ // close the jitlog file descriptor
+ close(jitlog_fd);
+ jitlog_fd = -1;
+ // free the prefix
+ if (jitlog_prefix != NULL) {
+ free(jitlog_prefix);
}
- jitlog_fd = -1;
- free(jitlog_prefix);
}
+RPY_EXTERN
+void jitlog_write_marked(int tag, char * text, int length)
+{
+ if (!jitlog_ready) { return; }
+
+ char header[5];
+ header[0] = tag;
+ header[1] = (length >> 24) & 0xff;
+ header[2] = (length >> 16) & 0xff;
+ header[3] = (length >> 8) & 0xff;
+ header[4] = length & 0xff;
+ write(jitlog_fd, (const char*)&header, 5);
+ write(jitlog_fd, text, length);
+}
diff --git a/rpython/rlib/rvmprof/src/rvmprof.h
b/rpython/rlib/rvmprof/src/rvmprof.h
--- a/rpython/rlib/rvmprof/src/rvmprof.h
+++ b/rpython/rlib/rvmprof/src/rvmprof.h
@@ -9,6 +9,8 @@
RPY_EXTERN long vmprof_stack_pop(void*);
RPY_EXTERN void vmprof_stack_free(void*);
-RPY_EXTERN char * jitlog_init(int, char*);
+RPY_EXTERN char * jitlog_init(int, const char*);
RPY_EXTERN void jitlog_try_init_using_env(void);
-RPY_EXTERN int jitlog_filter(int tag);
+RPY_EXTERN int jitlog_filter(int);
+RPY_EXTERN void jitlog_write_marked(int, char*, int);
+RPY_EXTERN void jitlog_teardown();
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit