RFR: 8256265: G1: Improve parallelism in regions that failed evacuation [v8]
Thomas Schatzl
tschatzl at openjdk.java.net
Fri Feb 18 16:25:54 UTC 2022
On Fri, 18 Feb 2022 12:00:29 GMT, Hamlin Li <mli at openjdk.org> wrote:
>> Currently G1 assigns a thread per failed evacuated region. This can in effect serialize the whole process as often (particularly with region pinning) there is only one region to fix up.
>>
>> This patch tries to improve parallelism when walking over the regions in chunks
>>
>> Latest implementation scans regions in chunks to bring parallelism, it's based on JDK-8278917 which changes to uses prev bitmap to mark evacuation failure objs.
>>
>> Here's the summary of performance data based on latest implementation, basically, it brings better and stable performance than baseline at "Post Evacuate Cleanup 1/remove self forwardee" phase. (Although some regression is spotted when calculate the results in geomean, becuase one pause time from baseline is far too small than others.)
>>
>> The performance benefit trend is:
>> - pause time (Post Evacuate Cleanup 1) is decreased from 76.79% to 2.28% for average time, from 71.61% to 3.04% for geomean, when G1EvacuationFailureALotCSetPercent is changed from 2 to 90 (-XX:ParallelGCThreads=8)
>> - pause time (Post Evacuate Cleanup 1) is decreased from 63.84% to 15.16% for average time, from 55.41% to 12.45% for geomean, when G1EvacuationFailureALotCSetPercent is changed from 2 to 90 (-XX:ParallelGCThreads=<default=123>)
>> ( Other common Evacuation Failure configurations are:
>> -XX:+G1EvacuationFailureALot -XX:G1EvacuationFailureALotInterval=0 -XX:G1EvacuationFailureALotCount=0 )
>>
>> For more detailed performance data, please check the related bug.
>
> Hamlin Li has updated the pull request incrementally with one additional commit since the last revision:
>
> Thomas review
Changes requested by tschatzl (Reviewer).
src/hotspot/share/gc/g1/g1EvacFailure.cpp line 180:
> 178: _region_idx = current_region_idx;
> 179: _marked_words = rspc.marked_words();
> 180: }
It would be nice to move all that into a private method or a small inner class so that the code here is more readable.
src/hotspot/share/gc/g1/g1EvacFailure.cpp line 195:
> 193: _g1h(G1CollectedHeap::heap()),
> 194: _worker_id(worker_id),
> 195: _region_idx(),
region_idx should be initialized to `_g1h->max_regions()` here, at least I can't find an initialization.
src/hotspot/share/gc/g1/g1YoungGCPostEvacuateTasks.hpp line 60:
> 58: // - Reset Hot Card Cache (s)
> 59: // - Update Derived Pointers (s)
> 60: // - Verify Retained Regions
should add an `(on evacuation failure)` comment, and probably moved close to the comment on "Restore Preserved Marks"
-------------
PR: https://git.openjdk.java.net/jdk/pull/7047
More information about the hotspot-gc-dev
mailing list