RFR: 8298647: GenShen require heap size 2MB granularity
Stuart Monteith
smonteith at openjdk.org
Wed Jan 18 09:22:35 UTC 2023
On Tue, 17 Jan 2023 20:11:42 GMT, William Kemper <wkemper at openjdk.org> wrote:
>> Generational Shenandoah requires 2MB granularity in order for card tables to cover the allocated heap. Each byte in a page of card table represents 512 heap bytes. As card tables are allocated 4KB at a time, 4KB * 512 = 2MB.
>>
>> There is a circular dependency between the region calculations and the heap size calculations. This unconditionally rounds up the heap size to 2MB. It might be preferable to do this only when generational mode is enabled.
>>
>> Running with:
>> java -Xlog:gc*=trace -XX:+UseShenandoahGC -mx495m \
>> -XX:ShenandoahGCMode=generational -version
>>
>> on a debug build is sufficient to reproduce this problem.
>
> src/hotspot/share/gc/shenandoah/shenandoahHeapRegion.cpp line 728:
>
>> 726: }
>> 727:
>> 728: // Generational Shenandoah needs this alignment for card tables.
>
> Thank you for this fix! It would be nice if this constraint were only applied for generation mode, but these sizes are computed quite earlier during startup. You'd need to factor the code out of `ShenandoahHeap::initialize_heuristics` to know whether the constraint is required at this point.
Yes, I thought I'd start with a simple fix to highlight the problem first. I experimented with exactly what you suggested, parsing ShenandoahGCMode. I can update this the 2MB alignment isn't desired unconditionally.
-------------
PR: https://git.openjdk.org/shenandoah/pull/202
More information about the shenandoah-dev
mailing list