Hi,

That would require more significant changes to NMT I think

I think two changes:

 1. Remove AllocateHeap(size_t, MEMFLAGS, AllocFailType) .
 2. Add "const NativeCallStack&" to argument of ReallocateHeap() .

I think that caller of AllocateHeap() and ReallocateHeap() should give PC to 
them.
However, it is significant changes.
Thus I proposed to add always_inline .


I don't see how it will help if you have to know a-priori whether inlining has 
occurred or not. ??

I think we can use SA.
In case of Linux, sun.jvm.hotspot.debugger.linux.LinuxDebuggerLocal#lookup()
can lookup symbol from target process - we can check whether the function has 
been
inlined (cannot lookup) or not (can lookup).
So I think that we can write jtreg testcase.

BTW, should I file it to JBS?


Thanks,

Yasumasa


On 2015/03/13 17:35, David Holmes wrote:
On 13/03/2015 6:13 PM, Thomas Stüfe wrote:
Hi Yasumasa, David,

Maybe it would make sense to make the number-of-frames-to-skip-parameter
configurable?

That would require more significant changes to NMT I think - plus I don't see 
how it will help if you have to know a-priori whether inlining has occurred or 
not. ??

Thanks,
David

Because the direct caller of AllocateHeap or os::malloc may also not be
interesting but still a generic wrapper. So, the user doing the
allocation trace could finetune this parameter to fit his needs.

Thomas



On Fri, Mar 13, 2015 at 6:40 AM, David Holmes <david.hol...@oracle.com
<mailto:david.hol...@oracle.com>> wrote:

    Hi Yasumasa,

    On 12/03/2015 9:58 PM, Yasumasa Suenaga wrote:

        Hi all,

        I tried to use NMT with details option on OpenJDK7 on RHEL6.6,
        but I got
        address at AllocateHeap() as malloc() caller.

        I checked symbol in libjvm.so <http://libjvm.so/> in
        OracleJDK8u40 Linux
        x64, it has AllocateHeap()
        symbol.

        AllocateHeap() is defined as inline function, and it gives
        CURRENT_PC to
        os::malloc(). I guess that implementation expects AllocateHeap()
        will be
        inlined.


    It seems so.

        It may occur with GCC (g++) optimization only, however I want to
        fix it to
        analyze native memory with NMT on Linux.


    According to the docs [1]:

    "GCC does not inline any functions when not optimizing unless you
    specify the ‘always_inline’ attribute for the function"

        I applied patch as below. This patch makes AllocateHeap() as inline
        function.
        --------------
        diff -r af3b0db91659 src/share/vm/memory/__allocation.inline.hpp
        --- a/src/share/vm/memory/__allocation.inline.hpp Mon Mar 09
        09:30:16 2015
        -0700
        +++ b/src/share/vm/memory/__allocation.inline.hpp Thu Mar 12
        20:45:57 2015
        +0900
        @@ -62,11 +62,18 @@
             }
             return p;
        }
        +
        +#ifdef __GNUC__
        +__attribute__((always_inline)__)
        +#endif


    I dislike seeing the gcc specific directives in common code. I'm
    wondering whether we should perhaps only use CURRENT_PC in product
    (and optimized?) builds and use CALLER_PC otherwise. That would be
    imperfect of course It also makes me wonder whether the inlining is
    occurring as expected on other platforms.

    I'd like to get other people's views on this.

    Thanks,
    David

    [1] https://gcc.gnu.org/__onlinedocs/gcc/Inline.html
    <https://gcc.gnu.org/onlinedocs/gcc/Inline.html>


        inline char* AllocateHeap(size_t size, MEMFLAGS flags,
               AllocFailType alloc_failmode = AllocFailStrategy::EXIT_OOM) {
             return AllocateHeap(size, flags, CURRENT_PC, alloc_failmode);
        }

        +#ifdef __GNUC__
        +__attribute__((always_inline)__)
        +#endif
        inline char* ReallocateHeap(char *old, size_t size, MEMFLAGS flag,
               AllocFailType alloc_failmode = AllocFailStrategy::EXIT_OOM) {
             char* p = (char*) os::realloc(old, size, flag, CURRENT_PC);
        --------------

        If this patch is accepted, I will file it to JBS and will upload
        webrev.

        Thanks,

        Yasumasa


Reply via email to