RFR(s): 8204094: assert(worker_i < _length) failed: Worker 15 is greater than max: 11 at ReferenceProcessorPhaseTimes
sangheon.kim at oracle.com
sangheon.kim at oracle.com
Thu May 31 02:19:12 UTC 2018
Hi all,
Can I have reviews for this patch that fixes assertion failure at
ReferenceProcessorPhaseTimes?
This failure only happens when ParallelRefProcEnabled option is set on
CMS and Parallel GC.
The problem is that we are using more workers than we created a storage
for workers.
When we create ReferenceProcessorPhaseTimes, we set how many workers
will be monitored (i.e. prepare an array to save time information). And
currently we are setting it with ReferenceProcessor queue
size(ReferenceProcessor::_num_queues). But this is problematic because
the queue size is continuously updated by
ReferenceProcessor::set_active_mt_degree() with active workers every GC.
And the queue size is decided later than ReferenceProcessorPhaseTimes is
created. So if active workers repeats to increase/decrease,
ReferenceProcessorPhaseTimes would have smaller than active workers.
This patch is proposing to use maximum queue when create
ReferenceProcessorPhaseTimes.
CR: https://bugs.openjdk.java.net/browse/JDK-8204094
Webrev: http://cr.openjdk.java.net/~sangheki/8204094/webrev.0
Testing: hs-tier1-5 with/without ParallelRefProcEnabled
Thanks,
Sangheon
------------------------
For example:
1) Set 2 when create ReferenceProcessorPhaseTimes(xx, 2):
ReferenceProcessor::num_queues() = 2, because previously we had only 2
active workers.
2) Set 23 for ReferenceProcessor::set_active_mt_degree(23), current
active workers are increased.
3) Assertion failure as we are using more workers than set from #1.
More information about the hotspot-gc-dev
mailing list