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