G'Day Will,

On Tue, Dec 2, 2014 at 1:08 PM, William Cohen <[email protected]> wrote:
> perf makes use of the debug information provided by the compilers to
> map the addresses observed in the instruction pointer and on the stack
> back to source code.  This works very well for traditional compiled
> programs written in c and c++.  However, the assumption that the
> instruction address maps back to something the user wrote is not true
> for code written in interpretered languages such as python, perl, and
> Ruby or for Just-In-Time (JIT) runtime environment commonly used for
> Java.  The addresses would either map back to the interpreter runtime
> or dynamically generated code.  It would be really nice if perf was
> enhanced to provide data about where in the interpreted and JIT'ed
> code the processor was spending time.

perf supports the /tmp/perf-PID.map files for JIT translations. It's
up to the runtimes to create these files.

I was enhancing the Java perf-map-agent today
(https://github.com/jrudolph/perf-map-agent), and using it with perf.
perf doesn't seem to handle map files that grow (and overwrite
symbols) very well, so I had to create an extra step that cleaned up
the map file. I should write up the Java instructions somewhere.

I did do a writeup for Node.js, whose v8 engine supports the perf map
files. See: 
http://www.brendangregg.com/blog/2014-09-17/node-flame-graphs-on-linux.html

Also see tools/perf/Documentation/jit-interface.txt

> OProfile provides the ability to map samples from Java Runtime
> Environment (JRE) JIT code using a shared library agent loaded when
> the program starts executing.  The shared library uses the JVMTI or
> JVMPI interface to note the method that each region of JIT'ed code
> maps to.  This is later used to map the instruction pointer back to
> the appropriate Java method.  There is some information on how this is
> implement at http://oprofile.sourceforge.net/doc/devel/index.html.

Yes, that's exactly what perf-map-agent does (JVMTI). I only just
created the pull request, but if you try perf-map-agent, you'll want
to use the fflush fix to avoid buffering lag
(https://github.com/jrudolph/perf-map-agent/pull/8).

Brendan

--
http://www.brendangregg.com
--
To unsubscribe from this list: send the line "unsubscribe linux-perf-users" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to