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