RFR: 8343541: C1: Plain memory accesses are emitted with membars with +AlwaysAtomicAccesses
Xiaolong Peng
xpeng at openjdk.org
Mon Nov 18 08:55:20 UTC 2024
C1 and C2 has quite difference implementation for `+AlwaysAtomicAccesses`, [C2 impl](https://github.com/openjdk/jdk/blob/4a7ce1d7c1bd4b751063b98cf8bedcd27055760b/src/hotspot/share/gc/shared/c2/barrierSetC2.cpp#L410) only guarantee atomicity hence no membars are emitted, but C1 treats it same as volatile access hence it emits membars. The change remove the unnecessary membars in C1 for `+AlwaysAtomicAccesses`.
The test have been verified by very simple JMH benchmarks to measure the latency of reading/writing long/volatile long variable 10000 times, and run with VM option `-XX:TieredStopAtLevel=3 -XX:+UnlockExperimentalVMOptions -XX:+AlwaysAtomicAccesses`:
Before the fix:
Benchmark Mode Cnt Score Error Units
AlwaysAtomicAccesses.testReadLong avgt 5 58711.131 ± 716.940 ns/op
AlwaysAtomicAccesses.testReadVolatileLong avgt 5 59014.735 ± 675.354 ns/op
AlwaysAtomicAccesses.testWriteLong avgt 5 115817.978 ± 302.089 ns/op
AlwaysAtomicAccesses.testWriteVolatileLong avgt 5 116317.835 ± 1451.365 ns/op
After the fix:
Benchmark Mode Cnt Score Error Units
AlwaysAtomicAccesses.testReadLong avgt 5 49651.527 ± 159.948 ns/op
AlwaysAtomicAccesses.testReadVolatileLong avgt 5 58668.844 ± 316.029 ns/op
AlwaysAtomicAccesses.testWriteLong avgt 5 23008.361 ± 10.947 ns/op
AlwaysAtomicAccesses.testWriteVolatileLong avgt 5 116440.017 ± 1240.832 ns/op
-------------
Commit messages:
- 8343541: C1: Plain memory accesses are emitted with membars with +AlwaysAtomicAccesses
Changes: https://git.openjdk.org/jdk/pull/22191/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=22191&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8343541
Stats: 6 lines in 1 file changed: 2 ins; 0 del; 4 mod
Patch: https://git.openjdk.org/jdk/pull/22191.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/22191/head:pull/22191
PR: https://git.openjdk.org/jdk/pull/22191
More information about the hotspot-dev
mailing list