On 22 okt 2014, at 02:10, Brendan Gregg <brendan.d.gr...@gmail.com> wrote:

> G'Day,
> 
> I checked the JDK 9 early access releases, but didn't see anything for
> JDK-6276264.

That bug has been closed as a duplicate of 
https://bugs.openjdk.java.net/browse/JDK-6617153, which is still open.

> I've also since learned that Twitter has an OpenJDK fork
> with frame pointers disabled, for the same purpose: stack profiling
> (using Linux perf_events). Might this be worked on for JDK 9?

I would welcome that change - perhaps Twitter can contribute it?

Thanks,
/Staffan

> I can
> help test. thanks,
> 
> Brendan
> 
> On Mon, Jun 16, 2014 at 11:52 PM, Brendan Gregg
> <brendan.d.gr...@gmail.com> wrote:
>> G'Day Serguei,
>> 
>> On Mon, Jun 16, 2014 at 10:45 PM, serguei.spit...@oracle.com
>> <serguei.spit...@oracle.com> wrote:
>>> 
>>> Hi Brendan,
>>> 
>>> We are aware of these issues and work with the Solaris team to fix them in
>>> JDK 9.
>>> One is the frame pointer is used by the server compiler as a general
>>> purpose register on intel.
>>> Another is about the virtual (or inlined) frames.
>>> 
>>> There are a couple of related bugs:
>>>   https://bugs.openjdk.java.net/browse/JDK-6617153
>>>   https://bugs.openjdk.java.net/browse/JDK-6276264
>>> 
>>> There can be more issues filed on this.
>> 
>> 
>> Ah, thanks, it's JDK-6276264.
>> 
>> As Tom Rodriguez said at the time (2005): "The server VM uses the frame
>> pointer as an allocatable register and there's no way to turn that off." I
>> was really hoping there was a way to turn that off, like
>> -fno-omit-frame-pointer.
>> 
>> This also means DTrace jstack() has never worked fully. For the applications
>> I tried it on, 50% of stacks were incomplete. Perhaps it wasn't that bad in
>> 2005. I've been getting more mileage today from Java profilers.
>> 
>>> Please, note, that the jstack action is not implemented on Linux yet.
>> 
>> 
>> Linux doesn't have DTrace jstack(), no, but its perf_events does has support
>> for loading an auxiliary file of symbols, which can created via a Java agent
>> for that purpose (eg, https://github.com/jrudolph/perf-map-agent). But that
>> hasn't been working fully for the same reason - incomplete stacks.
>> 
>> Brendan
>> 
>>> 
>>> Thanks,
>>> Serguei
>>> 
>>> 
>>> 
>>> On 6/16/14 5:14 PM, Brendan Gregg wrote:
>>> 
>>> Thanks but no, I'm aware of that bug and workarounds (I'm using the
>>> LD_AUDIT_64=/usr/lib/dtrace/64/libdtrace_forceload.so workaround, which
>>> isn't mentioned in the bug comments, but probably should be). That bug is
>>> about missing symbols, but the stacks shown in that bug still go all the way
>>> to thread_start. My stacks often don't.
>>> 
>>> For simple programs, the stacks are complete. But something complex (eg,
>>> vert.x with event loops), and the stacks are often incomplete, one frame
>>> only. Very much like what I see with -fomit-frame-pointer, although this is
>>> hotspot, not gcc. Such incomplete stacks are seen using either DTrace or
>>> perf_events.
>>> 
>>> It was suggested to me to email the hotspot developers, because this may
>>> well be a hotspot optimization they are familiar with. It may also be
>>> something really obvious, like that the JVM breaks native stacks due to
>>> optimized frames / green threads / etc, and there is absolutely no way
>>> around it (no way to disable it). If that's true, it may also mean that the
>>> DTrace jstack() action has always had this issue. I'm still reading the
>>> source...
>>> 
>>> Brendan
>>> 
>>> 
>>> 
>>> On Mon, Jun 16, 2014 at 4:04 AM, Staffan Larsen
>>> <staffan.lar...@oracle.com> wrote:
>>>> 
>>>> I think this is the bug you are looking at:
>>>> https://bugs.openjdk.java.net/browse/JDK-7187999, but I’ll defer to someone
>>>> else to confirm.
>>>> 
>>>> /Staffan
>>>> 
>>>> 
>>>> On 16 jun 2014, at 12:47, Roland Westrelin <roland.westre...@oracle.com>
>>>> wrote:
>>>> 
>>>> Forwarding to serviceability alias where this question belongs I think.
>>>> 
>>>> Begin forwarded message:
>>>> 
>>>> From: Brendan Gregg <brendan.d.gr...@gmail.com>
>>>> Subject: system profilers and incomplete stacks
>>>> Date: June 12, 2014 at 7:15:54 PM GMT+2
>>>> To: hotspot-compiler-...@openjdk.java.net
>>>> 
>>>> G'Day,
>>>> 
>>>> Is there a way to run hotspot so that a system profiler (eg, DTrace, or
>>>> Linux perf_events) can measure complete stacks? I often get incomplete,
>>>> partial stacks, with one or a few frames only. I'm not worried about 
>>>> symbols
>>>> right now, what I'd like is to walk stacks all the way down to thread 
>>>> start.
>>>> 
>>>> I've been browsing the hotspot code, but haven't found out how yet. I
>>>> suspect it's related to Java optimized frames, and has ditched the frame
>>>> pointer. I was looking for an equivalent -fno-omit-frame-pointer option.
>>>> 
>>>> Here's an example:
>>>> 
>>>> # dtrace -n 'profile-99 /execname == "java"/ { @[jstack(100, 8000)] =
>>>> count(); }'
>>>> [...]
>>>>              org/mozilla/javascript/
>>>> 
>>>> ScriptableObject.createSlot(Ljava/lang/String;II)Lorg/mozilla/javascript/ScriptableObject$Slot;*
>>>>              0x884acce8200002da
>>>>                1
>>>> 
>>>>              sun/nio/ch/SocketChannelImpl.read(Ljava/nio/ByteBuffer;)I*
>>>>              0xffffffff20007f4b
>>>>                1
>>>> 
>>>> 
>>>> org/mozilla/javascript/ScriptRuntime.newObjectLiteral([Ljava/lang/Object;[Ljava/lang/Object;[ILorg/mozilla/javascript/Context;Lorg/mozilla/javascript/Scriptable;)Lorg/mozilla/javascript/Scriptable;*
>>>>              0xa20000041
>>>>                1
>>>> [...]
>>>> 
>>>> I see similar incomplete stacks with Linux perf_events. Oracle JDKs from
>>>> 6 to 8, and OpenJDK.
>>>> 
>>>> thanks,
>>>> 
>>>> Brendan
>>>> --
>>>> http://www.brendangregg.com
>>>> 
>>>> 
>>>> 
>>> 
>>> 
>>> 
>>> --
>>> http://www.brendangregg.com
>>> 
>>> 
>> 
>> 
>> 
>> --
>> http://www.brendangregg.com

Reply via email to