RFR: 8295842: Generational ZGC: Elide barriers on variable array accesses after array allocations [v2]

Erik Österlund eosterlund at openjdk.org
Mon Nov 21 09:40:51 UTC 2022

On Wed, 16 Nov 2022 12:11:31 GMT, Roberto Castañeda Lozano <rcastanedalo at openjdk.org> wrote:

>> This changeset extends C2's barrier elision so that variable array accesses (array accesses with unknown offset at compile-time) are elided when they are dominated by the array's allocation and no safepoint is present in between, like in this example:
>> Element[] a = new Element[10]; // allocation
>> a[i] = e; // variable array access: the barrier is elided
>> This is achieved by relaxing the dominator-dominated pair test in [zBarrierSetC2.cpp](https://github.com/openjdk/zgc/blob/a460756f08df30af232fc631e94cf37c10c38352/src/hotspot/share/gc/z/c2/zBarrierSetC2.cpp#L714) so that unknown memory access offsets are accepted for array allocation dominators.
>> This refinement does not yield significant overall throughput changes in standard benchmark suites (DaCapo, SPECjvm2008), but has been observed to at least elide a few additional  barriers in individual benchmarks, e.g. DaCapo's H2:
>> Value[] keyValues = new Value[groupIndex.length]; // array allocation
>> // update group
>> for (int i = 0; i < groupIndex.length; i++) {
>>     int idx = groupIndex[i];
>>     Expression expr = expressions.get(idx);
>>     keyValues[i] = expr.getValue(session); // store barrier is elided by this changeset
>> }
>> #### Testing
>> - tier1-5 (windows-x64, linux-x64, linux-aarch64, macosx-x64, and macosx-aarch64; release and debug mode)
> Roberto Castañeda Lozano has updated the pull request with a new target base due to a merge or a rebase. The pull request now contains four commits:
>  - Refine assertions
>  - Avoid eliding barriers if offsets are negative or undefined
>  - Merge zgc_generational
>  - Elide barriers on variable array accesses after array allocations

Thanks for the explanation Roberto. Looks good.


Marked as reviewed by eosterlund (Reviewer).

PR: https://git.openjdk.org/zgc/pull/8

More information about the zgc-dev mailing list