RFR: Degenerated GC mode for Traversal

Roman Kennke rkennke at redhat.com
Tue Mar 27 11:38:35 UTC 2018


Am 27.03.2018 um 13:30 schrieb Roman Kennke:
> Am 27.03.2018 um 13:21 schrieb Aleksey Shipilev:
>> On 03/27/2018 01:18 PM, Roman Kennke wrote:
>>>>  *) In service_concurrent_traversal_cycle, why do we need this check? I thought that coming out with
>>>> cancellation from final_traversal means we have the failure during degen, and it should upgrade to
>>>> Full GC right away?
>>>>
>>>>  275   if (heap->is_concurrent_traversal_in_progress()) {
>>>>  276     if (check_cancellation_or_degen(ShenandoahHeap::_degenerated_traversal)) return;
>>>>  277   }
>>>
>>> We must not break out of the cycle between successful final-traversal
>>> and cleanup phases. This might happen because we're back into Java land
>>> by then, and allocations may fail before we managed to clean up. If this
>>> happens, we would get into degen with trashed regions. Do you have any
>>> suggestions how else to deal with that?
>>
>> Ok, that sounds fair. But by this logic, we should not even have the entire block predicated by
>> is_concurrent_traversal_in_progress, right? Instead, we should go to cleanup unconditionally after
>> final-traversal. It would be the same thing we do for final-mark -> cleanup pair in normal cycle.
> 
> If final-traversal *fails* (which happens before we trash regions) we
> actually want to dive into degen. Hence the check.
> 
> I just had the idea that we might want to have a special degen-point for
> this situation: if we fail after successful traversal GC, but before
> cleanup, we might just want to finish cleanup under STW/degen, and then
> carry on. Then the check would look like:
> 
> if (heap->is_concurrent_traversal_in_progress()) {
>   if
> (check_cancellation_or_degen(ShenandoahHeap::_degenerated_traversal))
> return;
> } else {
>   if
> (check_cancellation_or_degen(ShenandoahHeap::_degenerated_traversal_cleanup))
> return;
> }
> 
> or such?
> 
> WDYT?
> 

Like this:

Diff:
http://cr.openjdk.java.net/~rkennke/traversal-degen/webrev.03.diff/
Full:
http://cr.openjdk.java.net/~rkennke/traversal-degen/webrev.03/

?

Roman



More information about the shenandoah-dev mailing list