RFR: 8295842: Generational ZGC: Elide barriers on variable array accesses after array allocations
Roberto Castañeda Lozano
rcastanedalo at openjdk.org
Mon Oct 24 13:48:56 UTC 2022
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)
-------------
Commit messages:
- Elide barriers on variable array accesses after array allocations
Changes: https://git.openjdk.org/zgc/pull/8/files
Webrev: https://webrevs.openjdk.org/?repo=zgc&pr=8&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8295842
Stats: 60 lines in 1 file changed: 57 ins; 0 del; 3 mod
Patch: https://git.openjdk.org/zgc/pull/8.diff
Fetch: git fetch https://git.openjdk.org/zgc pull/8/head:pull/8
PR: https://git.openjdk.org/zgc/pull/8
More information about the zgc-dev
mailing list