On Fri, 9 Oct 2020 14:23:31 GMT, Lin Zang <lz...@openjdk.org> wrote:

>> Hi @kstefanj, Thanks a lot for your comments.
>> I think there can be a reclaimer that treat eden space, from space, to space 
>> and "blocks" in old space as parallel
>> iteration candidates, then every workers try to claim their ownership of the 
>> candidate that it is going to scan. So
>> there is no need to check worker numbers and Id for processing different 
>> spaces.  what do you think?
>> BTW, Paul (hohen...@amazon.com) also helped review this patch and send the 
>> comment in mail list, I will paste his
>> comments here and then try to polish a patch with all of your comments 
>> considered.
>
> Here is the review comments from Paul, copied from hotspot-gc-dev digest:
>> Message: 3
>> Date: Mon, 28 Sep 2020 22:39:38 +0000
>> From: "Hohensee, Paul" <hohen...@amazon.com>
>> To: Lin Zang <lz...@openjdk.java.net>,
>>                "hotspot-gc-...@openjdk.java.net" 
>> <hotspot-gc-...@openjdk.java.net>,
>>                "serviceability-dev@openjdk.java.net"
>>                 <serviceability-dev@openjdk.java.net>
>> Subject: RE: RFR: 8252103: Parallel heap inspection for
>>                 ParallelScavengeHeap
>> Message-ID: <25a4dc80-74a8-4c99-aef4-7e989317b...@amazon.com>
>> Content-Type: text/plain; charset="utf-8"
>> 
>> I'm not a GC specialist, but your approach looks reasonable to me.
>> 
>> parallelScavengeHeap.cpp:
>> 
>> "less that 1 workers" -> "less that 1 worker"
>> 
>> psOldGen.cpp:
>> 
>> ">=2" -> ">= 2"
>> 
>> "thread_num-2 worker" -> "(thread_num -2) workers"
>> 
>> "cross blocks" -> "crosses blocks"
>> 
>> "that the object start address locates in the related block" -> "that owns 
>> the block within which the object starts"
>> 
>> blocks_iterate_parallel() relies on BLOCK_SIZE being an integral multiple of 
>> a start_array() block (i.e.,
>> ObjectStartArray::block_size). I'd add an assert to that effect.
>> The comment on the definition of BLOCK_SIZE is "64 KB", but you're doing 
>> pointer arithmetic in terms of HeapWords,
>> which > means the actual byte value is either 256KB or 512KB for 32- and 
>> 64-bit respectively. You could use
>> const int BLOCK_SIZE = (64 * 1024 / HeapWordSize);
>> 
>> "// There is objects" -> "There are objects"
>> 
>> "reture" -> "return"
>> 
>> ", here only focus objects" -> ". Here only focus on objects"
>> 
>> It's a matter of taste, but imo the loop in blocks_iterate_parallel() would 
>> be more clear as
>> 
>> for (HeapWord* p = start; p < end; p += oop(p)->size()) {
>>     cl->do_object(oop(p));
>> }
>>  
>> psOldGen.hpp:
>> 
>> blocks_iterate_parallel() is pure implementation and I don't see a reference 
>> outside psOldGen.cpp. So, it should be
>> private, > not public.
>>  
>> psYoungGen.cpp:
>> 
>> "<=1" -> "<= 1"
>> 
>> Thanks,
>> Paul
> 
> Thanks for Paul's help and effort for reviewing, I will make a refined patch 
> based on your comments.

Dear @stefank,
I have update this PR that use a claimer to help worker thread do parallel 
iteration. would you like to help review
again? Thanks,
Lin

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

PR: https://git.openjdk.java.net/jdk/pull/25

Reply via email to