RFR: 8256265 G1: Improve parallelism in regions that failed evacuation [v2]
Hamlin Li
mli at openjdk.java.net
Thu Dec 2 01:51:42 UTC 2021
> 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.
> Try to improve the parallelsim when walking over the regions by
>
> - first, split a region into tasks;
> - then, process these task in parallel and load balance among GC threads;
> - last, necessary cleanup
>
> The perf test based on lastest implementation + JDK-8277736 shows that:
>
> - when ParallelGCThreads=32, when G1EvacuationFailureALotCSetPercent <= 50, the parallelism bring more benefit than regression;
> - when ParallelGCThreads=128, whatever G1EvacuationFailureALotCSetPercent is, the parallelism bring more benefit than regression;
>
> For detailed perf test result, please check:
>
> - https://bugs.openjdk.java.net/secure/attachment/97227/parallel.evac.failure-threads.32.png
> - https://bugs.openjdk.java.net/secure/attachment/97228/parallel.evac.failure-threads.128.png
>
> NOTE: load balance part of code is almost same as G1ParScanThreadState, if necessary and feasible, consider to refactor this part into a shared code base.
Hamlin Li has updated the pull request with a new target base due to a merge or a rebase. The pull request now contains ten commits:
- Merge branch 'master' into parallelize-evac-failure
- Adjust worker cost by a factor; initialize task queues set and terminator threads by active workers
- Fix wrong merge
- Merge with master
- Remove and merge code of G1ParRemoveSelfForwardPtrsTask into RemoveSelfForwardPtrsTask
- Fix crashes in ~G1GCParPhaseTimesTracker(), G1PreRemoveSelfForwardClosure::do_heap_region, G1CollectedHeap::par_iterate_regions_array()=>~StubRoutines::atomic entry points; Refine comments
- Fix inconsistent length between task queues and terminator
- Fix crash when heap verification; Fix compilation error; Refine comments
- Initial commit
-------------
Changes: https://git.openjdk.java.net/jdk/pull/6627/files
Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=6627&range=01
Stats: 1055 lines in 22 files changed: 698 ins; 280 del; 77 mod
Patch: https://git.openjdk.java.net/jdk/pull/6627.diff
Fetch: git fetch https://git.openjdk.java.net/jdk pull/6627/head:pull/6627
PR: https://git.openjdk.java.net/jdk/pull/6627
More information about the hotspot-gc-dev
mailing list