On Thu, 30 Nov 2023 00:26:25 GMT, Alex Menkov <amen...@openjdk.org> wrote:

>> The change impelements dumping of unmounted virtual threads data (stack 
>> traces and stack references).
>> Unmounted vthreads can be detected only by iterating over the heap, but 
>> hprof stack trace records (HPROF_FRAME/HPROF_TRACE) should be written before 
>> HPROF_HEAP_DUMP/HPROF_HEAP_DUMP_SEGMENT.
>> HeapDumper supports segment dump (parallel dump to separate files with 
>> subsequent file merge outside of safepoint), the fix switches HeapDumper  to 
>> always use segment dump: 1st segment contains only non-heap data, other 
>> segments are used for dumping heap objects. For serial dumping 
>> single-threaded dumping is performed, but 2 segments are created anyway.
>> When HeapObjectDumper detects unmounted virtual thread, it writes 
>> HPROF_FRAME/HPROF_TRACE records to the 1st segment ("global writer"), and 
>> writes thread object (HPROF_GC_ROOT_JAVA_FRAME) and stack references 
>> (HPROF_GC_ROOT_JAVA_FRAME/HPROF_GC_ROOT_JNI_LOCAL) to the HeapObjectDumper 
>> segment.
>> As parallel dumpers may write HPROF_FRAME/HPROF_TRACE concurrently and 
>> VMDumper needs to write non-heap data before heap object dumpers can write 
>> virtual threads data, writing to global writer is protected with 
>> DumperController::_global_writer_lock.
>> 
>> Testing: run tests which perform heap dump (in different scenarios):
>>  - test/hotspot/jtreg/serviceability
>>  - test/hotspot/jtreg/runtime/ErrorHandling
>>  - test/hotspot/jtreg/gc/epsilon
>>  - test/jdk/sun/tools/jhsdb
>
> Alex Menkov has updated the pull request incrementally with two additional 
> commits since the last revision:
> 
>  - feedback
>  - prepare_parallel_dum

This looks good. Nice piece of work!

src/hotspot/share/services/heapDumper.cpp line 2196:

> 2194:   // the 1st dumper calling get_next_dumper_id becomes VM dumper
> 2195:   int get_next_dumper_id() {
> 2196:     return Atomic::fetch_then_add(&_dump_seq, 1);

Nit: This can be used instead:
` 2196  return Atomic::inc(&_dump_seq);`

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

Marked as reviewed by sspitsyn (Reviewer).

PR Review: https://git.openjdk.org/jdk/pull/16665#pullrequestreview-1756467930
PR Review Comment: https://git.openjdk.org/jdk/pull/16665#discussion_r1410040807

Reply via email to