RFR: 8327097: GenShen: Align PLAB sizes down rather than up
Y. Srinivas Ramakrishna
ysr at openjdk.org
Fri Mar 8 00:53:14 UTC 2024
On Wed, 6 Mar 2024 20:43:03 GMT, Y. Srinivas Ramakrishna <ysr at openjdk.org> wrote:
>> When adjusting LAB sizes, round down rather than rounding up. Otherwise, we may violate the ShenandoahHumongousThreshold bound.
>
> src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp line 1114:
>
>> 1112: future_size = MIN2(future_size, PLAB::max_size());
>> 1113: future_size = MAX2(future_size, PLAB::min_size());
>> 1114: future_size = align_down(future_size, CardTable::card_size_in_words());
>
> Can one use cardsize-aligned min and max sizes (taking whetever PLAB gives us, may be by using a ShenandoahPLAB subclass). We then first align future_size up wrt card size, then floor/clamp it with the already cardsize-aligned min and max?
>
> In particular if cur_size starts off a multiple of cardsize then any doubling keeps it a multiple of cardsize, and you can more simply perhaps just assert that it's always a cardsize-multiple.
We also need a comment somewhere stating why we need these to be card-aligned.
I wonder also if this is entirely correct in itself, unless the shared allocation itself also always leaves us with a card-aligned top from which these PLABs are allocated.
In particular, it would be good to assert that `allocate_new_plab()` always gives us back a card-aligned start address.
Would be good to also use `align_up` or `align_down` in `allocate_new_plab()` as well. Indeed, it might be a good idea to do so in any code in Shenandoah where we are unnecessarily rolling our own custom alignment code.
-------------
PR Review Comment: https://git.openjdk.org/shenandoah/pull/401#discussion_r1517018057
More information about the shenandoah-dev
mailing list