[pypy-commit] pypy new-jit-log: modifying the jit log. length is not written as a header but always before a string
plan_rich
pypy.commits at gmail.com
Fri Mar 25 05:22:32 EDT 2016
Author: Richard Plangger <planrichi at gmail.com>
Branch: new-jit-log
Changeset: r83330:0dfb4f8b2119
Date: 2016-03-24 17:51 +0100
http://bitbucket.org/pypy/pypy/changeset/0dfb4f8b2119/
Log: modifying the jit log. length is not written as a header but always
before a string
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
@@ -287,11 +287,14 @@
targetindex -= self.SUBBLOCK_SIZE
assert not block
- def copy_core_dump(self, addr, offset=0):
+ def copy_core_dump(self, addr, offset=0, count=-1):
HEX = '0123456789ABCDEF'
dump = []
- src = rffi.cast(rffi.CCHARP, addr + offset)
- for p in range(self.get_relative_pos()):
+ src = rffi.cast(rffi.CCHARP, addr)
+ end = self.get_relative_pos()
+ if count != -1:
+ end = offset + count
+ for p in range(offset, end):
o = ord(src[p])
dump.append(HEX[o >> 4])
dump.append(HEX[o & 15])
diff --git a/rpython/jit/backend/x86/assembler.py b/rpython/jit/backend/x86/assembler.py
--- a/rpython/jit/backend/x86/assembler.py
+++ b/rpython/jit/backend/x86/assembler.py
@@ -534,7 +534,7 @@
looptoken._ll_function_addr = rawstart
if logger:
log = logger.log_trace(MARK_TRACE_ASM, None, self.mc)
- log.write(inputargs, operations, None, ops_offset)
+ log.write(inputargs, operations, None, ops_offset, unique_id=unique_id)
self.fixup_target_tokens(rawstart)
self.teardown()
# oprofile support
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
@@ -482,7 +482,7 @@
def do_compile_loop(jd_id, unique_id, metainterp_sd, inputargs, operations,
looptoken, log=True, name='', memo=None):
_log = metainterp_sd.jitlog.log_trace(MARK_TRACE_OPT, metainterp_sd, None)
- _log.write(inputargs, operations)
+ _log.write(inputargs, operations, name=name, unique_id=unique_id)
# TODO remove old
metainterp_sd.logger_ops.log_loop(inputargs, operations, -2,
'compiling', None, name, memo)
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
@@ -3,6 +3,7 @@
from rpython.jit.metainterp.history import ConstInt, ConstFloat
from rpython.rlib.objectmodel import we_are_translated
from rpython.rtyper.lltypesystem import lltype, llmemory, rffi
+from rpython.rlib.objectmodel import compute_unique_id
import sys
import weakref
@@ -31,21 +32,25 @@
def __init__(self):
self.cintf = cintf.setup()
self.memo = {}
+ self.is_setup = False
def setup_once(self):
+ self.is_setup = True
self.cintf.jitlog_try_init_using_env()
if self.cintf.jitlog_filter(0x0):
return
count = len(resoperations.opname)
mark = MARK_RESOP_META
for opnum, opname in resoperations.opname.items():
- line = self.encode_le_16bit(opnum) + opname.lower()
+ line = self.encode_le_16bit(opnum) + self.encode_str(opname.lower())
self.write_marked(mark, line)
def teardown(self):
self.cintf.jitlog_teardown()
def write_marked(self, mark, line):
+ if not self.is_setup:
+ self.setup_once()
self.cintf.jitlog_write_marked(mark, line, len(line))
def log_trace(self, tag, metainterp_sd, mc, memo=None):
@@ -65,6 +70,9 @@
lst = [le_addr, le_len, le_addr]
self.cintf.jitlog_filter(MARK_ASM_PATCH, ''.join(lst))
+ def encode_str(self, string):
+ return self.encode_le_32bit(len(string)) + string
+
def encode_le_16bit(self, val):
return chr((val >> 0) & 0xff) + chr((val >> 8) & 0xff)
@@ -92,24 +100,36 @@
def __init__(self, tag, memo, metainterp_sd, mc, logger):
self.memo = memo
self.metainterp_sd = metainterp_sd
+ self.ts = None
if self.metainterp_sd is not None:
self.ts = metainterp_sd.cpu.ts
self.tag = tag
self.mc = mc
self.logger = logger
- def write(self, args, ops, faildescr=None, ops_offset={}):
+ def write(self, args, ops, faildescr=None, ops_offset={},
+ name=None, unique_id=None):
log = self.logger
+ if not name:
+ name = ''
# write the initial tag
if faildescr is None:
- log.write_marked(self.tag, 'loop')
+ string = self.logger.encode_str('loop') + \
+ self.logger.encode_le_addr(unique_id or 0) + \
+ self.logger.encode_str(name or '')
+ log.write_marked(self.tag, string)
else:
- log.write_marked(self.tag, 'bridge')
+ unique_id = compute_unique_id(faildescr)
+ string = self.logger.encode_str('bridge') + \
+ self.logger.encode_le_addr(unique_id) + \
+ self.logger.encode_str(name or '')
+ log.write_marked(self.tag, string)
# input args
str_args = [self.var_to_str(arg) for arg in args]
- log.write_marked(MARK_INPUT_ARGS, ','.join(str_args))
+ string = self.logger.encode_str(','.join(str_args))
+ log.write_marked(MARK_INPUT_ARGS, string)
# assembler address (to not duplicate it in write_code_dump)
if self.mc is not None:
@@ -138,12 +158,15 @@
descr = op.getdescr()
le_opnum = self.logger.encode_le_16bit(op.getopnum())
str_res = self.var_to_str(op)
- line = le_opnum + ','.join([str_res] + str_args)
+ line = ','.join([str_res] + str_args)
if descr:
descr_str = descr.repr_of_descr()
- return MARK_RESOP_DESCR, line + ',' + descr_str
+ line = line + ',' + descr_str
+ string = self.logger.encode_str(line)
+ return MARK_RESOP_DESCR, le_opnum + string
else:
- return MARK_RESOP, line
+ string = self.logger.encode_str(line)
+ return MARK_RESOP, le_opnum + string
def write_core_dump(self, operations, i, op, ops_offset):
@@ -177,9 +200,11 @@
else:
end_offset = ops_offset[op2]
- dump = self.mc.copy_core_dump(self.mc.absolute_addr(), start_offset)
+ count = end_offset - start_offset
+ dump = self.mc.copy_core_dump(self.mc.absolute_addr(), start_offset, count)
offset = self.logger.encode_le_16bit(start_offset)
- self.logger.write_marked(MARK_ASM, offset + dump)
+ edump = self.logger.encode_str(dump)
+ self.logger.write_marked(MARK_ASM, offset + edump)
def var_to_str(self, arg):
try:
diff --git a/rpython/jit/metainterp/optimizeopt/__init__.py b/rpython/jit/metainterp/optimizeopt/__init__.py
--- a/rpython/jit/metainterp/optimizeopt/__init__.py
+++ b/rpython/jit/metainterp/optimizeopt/__init__.py
@@ -55,8 +55,9 @@
debug_start("jit-optimize")
inputargs = compile_data.start_label.getarglist()
try:
- log = metainterp_sd.jitlog.log_trace(MARK_TRACE, metainterp_sd, None)
- log.write(inputargs, compile_data.operations)
+ # TODO missing the unique id
+ # TODO log = metainterp_sd.jitlog.log_trace(MARK_TRACE, metainterp_sd, None)
+ # TODO log.write(inputargs, compile_data.operations)
#
metainterp_sd.logger_noopt.log_loop(inputargs,
compile_data.operations,
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
@@ -68,17 +68,6 @@
#endif
}
}
- if (!jitlog_fd) {
- jitlog_fd = 2;
- // TODO
- //if (isatty(2))
- // {
- // debug_start_colors_1 = "\033[1m\033[31m";
- // debug_start_colors_2 = "\033[31m";
- // debug_stop_colors = "\033[0m";
- // }
- }
-
jitlog_ready = 1;
}
@@ -87,6 +76,7 @@
{
jitlog_fd = fd;
jitlog_prefix = strdup(prefix);
+ jitlog_ready = 1;
return NULL;
}
@@ -111,13 +101,8 @@
{
if (!jitlog_ready) { return; }
- char header[5];
+ char header[1];
header[0] = tag;
- // little endian 32 bit singed int
- header[1] = length & 0xff;
- header[2] = (length >> 8) & 0xff;
- header[3] = (length >> 16) & 0xff;
- header[4] = (length >> 24) & 0xff;
- write(jitlog_fd, (const char*)&header, 5);
+ write(jitlog_fd, (const char*)&header, 1);
write(jitlog_fd, text, length);
}
More information about the pypy-commit
mailing list