RFR: 8307348 - Parallelize heap walk for ObjectCount(AfterGC) JFR event collection [v4]

olivergillespie duke at openjdk.org
Fri May 5 11:32:21 UTC 2023


On Wed, 3 May 2023 12:16:13 GMT, olivergillespie <duke at openjdk.org> wrote:

>> ObjectCount(AfterGC) event does a full single-threaded heap scan at a safepoint. After https://bugs.openjdk.org/browse/JDK-8215624, it is trivial to use the parallel version of the heap scan, reducing the time spent at the safepoint, and thus reducing the overhead of this event.
>> 
>> The performance improvement is obvious, but just for confirmation, on my 16-core host, at around 1GB occupancy:
>> 
>> 
>> Before: 770ms ( [3.059s][debug][gc,phases         ] GC(13) Report Object Count 770.317ms )
>>  After:  92ms ( [2.335s][debug][gc,phases         ] GC(13) Report Object Count  91.742ms )
>> 
>> 
>> Question 1: Should this be the default behaviour for populate_table (use the number active workers as the parallelism, if nothing else specified)?
>> 
>> Question 2: Is active_workers the correct value to use here? Or is max_workers more appropriate?
>
> olivergillespie has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Use ParallelGCThreads instead of active_workers

Thanks for the comments. Please check the updated version, it updates to have each caller pass the appropriate workers. The VMOp now grabs (and activates, as necessary) the safepoint workers instead of delegating that work, and populate can simply use the workers->active_workers as passed in (or run serially, as appropriate).

This is now a slightly more substantial change - not only are we parallelizing, but we're moving the GC-based ObjectCountAfterGC away from safepoint workers.

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

PR Comment: https://git.openjdk.org/jdk/pull/13774#issuecomment-1536120709


More information about the hotspot-gc-dev mailing list