RFR(XXS): 8153176: ParOldGC's ParallelTaskTerminator peeks wrong TaskQueueSet
mikael.gerdin at oracle.com
Thu Mar 31 14:16:59 UTC 2016
On 2016-03-31 15:55, Reingruber, Richard wrote:
> I would like to contribute a fix for a bug in parallel old gc. The bug can cause long gc pauses, because work stealing while marking does not work as ParallelTaskTerminator peeks the wrong task queue set.
> A microbenchmark that produces an object graph with large linear parts consistently shows 3x shorter gc pauses with the fix (see bug report). In a similar synthetic test the bug sporadically caused pauses 10x longer than average.
> Webrev: http://www.sapjvm.com/rr/webrevs/8153176_paroldgc_wrong_taskqueueset_in_marking/webrev_01/
As I mentioned in the bug I think the same problem affects parallel
reference processing as well, see RefProcTaskExecutor::execute in
Another fun thing is that if there are only object arrays on any
thread's work stealing queue then work stealing also breaks down,
because the terminator doesn't check the _objarray_queues.
Perhaps as a future change ParallelTaskTerminator could be decoupled
from TaskQueueSetSuper and instead using either template based
polymorphism or virtual calls to do the "peek in queue set" callback.
> Bug: https://bugs.openjdk.java.net/browse/JDK-8153176
> The change needs to be sponsored as well, please.
> Thanks, Richard.
> Richard Reingruber | SAP JVM | CORE PLATFORM, SAP SE
> Pflichtangaben/Mandatory Disclosure Statements: http://www.sap.com/company/legal/impressum.epx
More information about the hotspot-gc-dev