[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openjdk-serviceability-dev
Subject:    Re: RFR: JDK-8316691: Heap dump: separate stack traces for mounted virtual threads [v3]
From:       Alex Menkov <amenkov () openjdk ! org>
Date:       2023-09-29 2:20:10
Message-ID: FTgwiXtBBGlU9SZQB79MpGGLijhd3k5D-0FEKlllS7g=.83418c13-e46b-483b-8958-eca33e876de0 () github ! com
[Download RAW message or body]

> This is subtask of JDK-8299426: Heap dump does not contain virtual Thread stack \
> references The change:
> - reorganize thread-related code/prepare it to use for unmounted vthreads:
> - new ThreadDumper class caches stack frames, thread serial num, frame serial \
> number (trace serial number is calculated from thread serial); ThreadDumper objects \
> for all platform/carrier and mounted virtual threads are cached instead of \
> ThreadStackTrace objects (they are created during HPROF_FRAME/HPROF_TRACE dumping, \
> used lated for writing \
> HPROF_GC_ROOT_THREAD_OBJ/HPROF_GC_ROOT_JAVA_FRAME/HPROF_GC_ROOT_JNI_LOCAL \
>                 subrecords);
> - new helper class JavaStackRefDumper to dump references from threadf stack;
> - separate track traces for mounted virtual threads:
> - separate HPROF_FRAME/HPROF_TRACE records for mounted vthreads and carrier \
>                 threads;
> - separate HPROF_GC_ROOT_THREAD_OBJ/HPROF_GC_ROOT_JAVA_FRAME/HPROF_GC_ROOT_JNI_LOCAL \
>                 subrecords;
> - updated hprof parser test lib to collect data about threads \
> (HPROF_GC_ROOT_THREAD_OBJ subrecords) and corresponding stack traces and stack \
> references. 
> Testing - tier1-tier3, new test
> 
> Output of the test for VtreadInHeapDumpTarg$VthreadMounted thread
> without the fix:
> `thread 0x8101be90, 16 frames
> - [0] VtreadInHeapDumpTarg$VthreadMounted.run()V (VtreadInHeapDump.java:127)
> Java Local Reference: VtreadInHeapDumpTarg$VthreadMounted
> Java Local Reference: VtreadInHeapDumpTarg$VThreadMountedReferenced
> - [1] java.lang.Thread.runWith(Ljava/lang/Object;Ljava/lang/Runnable;)V \
> (Thread.java:1583) Java Local Reference: java.lang.VirtualThread
> Java Local Reference: java.lang.Class
> Java Local Reference: VtreadInHeapDumpTarg$VthreadMounted
> - [2] java.lang.VirtualThread.run(Ljava/lang/Runnable;)V (VirtualThread.java:309)
> Java Local Reference: java.lang.VirtualThread
> Java Local Reference: VtreadInHeapDumpTarg$VthreadMounted
> Java Local Reference: java.lang.Class
> - [3] java.lang.VirtualThread$VThreadContinuation$1.run()V (VirtualThread.java:190)
> Java Local Reference: java.lang.VirtualThread$VThreadContinuation$1
> - [4] jdk.internal.vm.Continuation.enter0()V (Continuation.java:320)
> Java Local Reference: java.lang.VirtualThread$VThreadContinuation
> - [5] jdk.internal.vm.Continuation.enter(Ljdk/internal/vm/Continuation;Z)V \
> (Continuation.java:312) Java Local Reference: \
>                 java.lang.VirtualThread$VThreadContinuation
> - [6] jdk.internal.vm.Continuation.enterSpecial(Ljdk/internal/vm/Continuatio...

Alex Menkov has updated the pull request incrementally with one additional commit \
since the last revision:

  misspell getRefererId for consistency

-------------

Changes:
  - all: https://git.openjdk.org/jdk/pull/15869/files
  - new: https://git.openjdk.org/jdk/pull/15869/files/2de09397..e834551d

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=15869&range=02
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=15869&range=01-02

  Stats: 2 lines in 2 files changed: 0 ins; 0 del; 2 mod
  Patch: https://git.openjdk.org/jdk/pull/15869.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/15869/head:pull/15869

PR: https://git.openjdk.org/jdk/pull/15869


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic