RFR: Performance improvements for non-generational modes

William Kemper wkemper at openjdk.org
Mon Mar 6 17:55:31 UTC 2023


On Fri, 3 Mar 2023 19:09:18 GMT, William Kemper <wkemper at openjdk.org> wrote:

>> src/hotspot/share/gc/shenandoah/shenandoah_globals.hpp line 314:
>> 
>>> 312:           range(1.0,100.0)                                                  \
>>> 313:                                                                             \
>>> 314:   product(uintx, ShenandoahMaxEvacLABRatio, 0, EXPERIMENTAL,                \
>> 
>> Surprised this would have an effect on single-generation performance.   Have we measured the costs/benefits of setting this default differently?  If 0 works best, maybe we should remove this entirely?
>
> Yes, it was counter intuitive. This setting causes small chunks of memory to remain free in regions that have otherwise been consumed by gc lab allocations. When the evacuation reserve is exhausted, the collector will steal regions from the mutator. Because of the free memory in these regions, they are retained in the mutator's view of the freeset after the collection is complete. This in turn increases fragmentation in the mutator's view and reduces the amount of available memory to the mutators, causing the triggers to run more often.
> 
> I only tested the default setting (16) and turning it off completely. I will test additional values.

Additional tests with ShenandoahMaxEvacLABRatio=0, 8, 16, 32 shows the best performance with 0. All other values resulted in nearly full survivor regions being stuck in the mutator's free set.

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

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


More information about the shenandoah-dev mailing list