Request for Review (s) - 8149343: assert(rp->num_q() == no_of_gc_workers) failed: sanity
Thomas Schatzl
thomas.schatzl at oracle.com
Tue Mar 15 12:12:57 UTC 2016
Hi Jon,
On Thu, 2016-03-10 at 11:53 -0800, Jon Masamitsu wrote:
> https://bugs.openjdk.java.net/browse/JDK-8149343
>
> The error here was that the number of active workers was
> not always set correctly for parallel Reference processing.
> The first fix was to set the number of active workers in the
> ReferenceProcessor in the task constructor. Once thatDiff
> was fixed a subsequent assertion failure occurred.
>
> # Internal Error (/export/jmasa/java/jdk9-rt
> -8149343/src/share/vm/gc/shared/referenceProcessor.cpp:884),
> pid=18444, tid=18500
> # assert(id < _max_num_q) failed: Id is out-of-bounds id 23 and max
> id 23)
>
> This was fixed by the change
>
> - if (++_next_id == _num_q) {
> + assert(!_discovery_is_mt, "Round robin should only be used in
> serial discovery");
> + if (++_next_id >= _num_q) {
>
> See the CR for an example log which showed _num_q changing
> values between different phases of a collection and where the
> value of _next_id was greater than _num_q.
I assume that the cause for the _next_id being greater than _num_q is
that in a previous GC the number of threads has been larger than in the
current.
While this change seems to work, I would kind of prefer that _next_id
is simply reset in some initialization. The greater or equal seems
surprising here.
However I am fine with keeping that but maybe add a comment about why
we need >= here.
> The last change was to add a parameter to the logging function so
> that
> the logging only output the active lists (which made the reading of
> the
> logs simpler)
>
> - void log_reflist_counts(DiscoveredList ref_lists[], size_t
> total_count) PRODUCT_RETURN;
> + void log_reflist_counts(DiscoveredList ref_lists[], uint
> active_length, size_t total_count) PRODUCT_RETURN;
>
> This patch fixes UseG1GC for the failure where
> UseDynamicNumberOfGCThreads and ParallelRefProcEnabled
> are both turned on. There is still a failure with UseParallelGC
> that is being fixed under 8150994.
>
> http://cr.openjdk.java.net/~jmasa/8149343/webrev.00/
>
> Testing: gc_test_suite with UseDynamicNumberOfGCThreads on and
> ParallelRefProcEnabled on and off. rbt in progress
Could you also fix the indentation in referenceProcessor.cpp:717?
Looks good from what I understand of the ref processing code.
Thanks,
Thomas
More information about the hotspot-gc-dev
mailing list