RFR(S): 7190666: G1: assert(_unused == 0) failed: Inconsistency in PLAB stats

Jesper Wilhelmsson jesper.wilhelmsson at oracle.com
Tue Aug 28 07:44:54 UTC 2012


Looks good!

I especially like that you added more information to the assert message. That 
will be helpful the next time the assert triggers.
/Jesper

On 2012-08-28 02:36, John Cuthbertson wrote:
> Hi Everyone,
>
> Can I have a couple of volunteers review the changes for this CR? The webrev 
> can be found at: http://cr.openjdk.java.net/~johnc/7190666/webrev.0/
>
> Summary:
> The value of PLABStats::_allocated was overflowing and the failed assertion 
> detected when it overflowed to 0. When we retired an individual allocation 
> buffer, we were flushing some accumulated values to the associated PLABStats 
> instance. This was artificially inflating the values in the PLABStats 
> instance since we were not reseting the accumulated values in the 
> ParGCAllocBuffer after we flushed. Ordinarily this would not cause an issue 
> (other than the values being too large) but with this particular test case we 
> obtained an evacuation failure. As a result we were executing the GC 
> allocation slow-path, and flushing the accumulated values, for every failed 
> attempted object allocation (even though we were unable to allocate a new 
> buffer), and we overflowed. Reseting the sensor values in the 
> ParGCAllocBuffer instance after flushing prevents the artificial inflation 
> and overflow.
>
> Additionally we should not be flushing the values to the PLABStats instance 
> on every buffer retirement (though it is not stated in the code). Flushing 
> the stats values on every retirement is unnecessary and, in the case of an 
> evacuation, adds a fair amount of additional work for each failed object 
> copy. Instead we should only be flushing the accumulated sensor values when 
> we retire the final buffers prior to disposing the G1ParScanThreadState object.
>
> Testing:
> The failing test case; the GC test suite with +PrintPLAB, and jprt.
>
> Note while testing this I ran into some assertion and guarantee failures from 
> G1's block offset table. I've only seen and been able (so far) to reproduce 
> these failures on a single machine in the jprt pool. I will be submitting a 
> new CR for these failures. I do not believe that the failures are related to 
> this fix (or the change that enabled resize-able PLABS) as I've been able to 
> reproduce the failures with disabling ResizePLAB and setting OldPLABSize=8k, 
> 16k, and 32k.
>
> Thanks,
>
> JohnC

-------------- next part --------------
A non-text attachment was scrubbed...
Name: jesper_wilhelmsson.vcf
Type: text/x-vcard
Size: 251 bytes
Desc: not available
URL: <https://mail.openjdk.org/pipermail/hotspot-gc-dev/attachments/20120828/627d9a86/jesper_wilhelmsson.vcf>


More information about the hotspot-gc-dev mailing list