RFR: Initial sizing refactor [v2]

Kelvin Nilsen kdnilsen at openjdk.org
Wed Dec 21 18:57:26 UTC 2022


On Wed, 21 Dec 2022 18:44:38 GMT, Kelvin Nilsen <kdnilsen at openjdk.org> wrote:

>> William Kemper has updated the pull request incrementally with one additional commit since the last revision:
>> 
>>   Improve assertions and comments
>
> src/hotspot/share/gc/shenandoah/shenandoahMmuTracker.cpp line 235:
> 
>> 233:   }
>> 234: }
>> 235: 
> 
> I still question whether this is the right trigger for when to enlarge old-gen.  A properly running generational GC will spend nearly all its time doing young-gen and very little time doing old-gen.
> 
> The trigger for enlarging old-gen should be that we experience promotion failures (and/or that we identify at the end of init mark that we have more live data in aged regions than will fit in the current old-gen).
> 
> Old-gen collection triggers need to be refined when we are auto-sizing.  We can't use "percent free in old" or even "time to collect old > time to exhaust old", because we are trying to auto-tune to maintain that the percent free in old is very small.  We need a new way to trigger old-gen GCs.
> 
> Maybe, we trigger old-gen GC (rather than enlarging old-gen) if an old-gen enlargement request would cause us to exceed a target max-size for old-gen?
> 
> This doesn't have to be addressed in current PR.  But I'm just thinking that refinements of these heuristics may be necessary eventually.

Maybe the target max-size for old-gen is auto-tuned to, e.g., 10% larger than the maximum old-gen live memory following old-gen concurrent mark with some bias given to more recently observed measurements of old-gen live-memory.

-------------

PR: https://git.openjdk.org/shenandoah/pull/185


More information about the shenandoah-dev mailing list