RFR: 8278241: Implement JVM SpinPause on linux-aarch64 [v4]

Evgeny Astigeevich duke at openjdk.java.net
Tue Dec 14 13:20:47 UTC 2021


> This JVM SpinPause uses a spin wait stub. The stub is generated based on the `SpinWait` description which is defined with `OnSpinWaitInst`/`OnSpinWaitInstCount` options.  The `SpinWait` provides the description of the instruction and the instruction count.
> 
> The `SpinWait` description is also used for the `_onSpinWait()` intrinsic. We don't have use cases when we need different implementations for the `_onSpinWait()` intrinsic and JVM SpinPause.
> 
> Testing results for fastdebug and release builds:
> - `gtest`: Passed
> - `tier1`...`tier4`: Passed
> - `hotspot/jtreg/runtime/Thread/TestSpinPause.java`: Passed
> 
> JVM SpinPause is used for the synchronised statements and can benchmarked with `org.openjdk.bench.vm.lang.LockUnlock.testContendedLock`.
> 
> Benchmarking results (number of samples per an experiment: 150) for Graviton2 (Neoverse N1), 1 ISB instruction:
> 
> 
> 
> +-----------+-------------------+------------+-----------+-----------+----------+---------+
> | CPU cores | Contended threads | Base ns/op |   Error   |    New    |  Error   |  Diff   |
> +-----------+-------------------+------------+-----------+-----------+----------+---------+
> |         8 |                64 |  10007.213 | ±910.911  |  8527.346 | ±377.242 | -14.79% |
> |        16 |                64 |  10274.935 | ±880.568  |  8310.433 | ±326.845 | -19.12% |
> |        32 |                64 |  12231.947 | ±1525.364 |  9205.941 | ±394.409 | -24.74% |
> |        64 |                64 |    9929.49 | ±586.074  | 10488.695 | ±570.458 | 5.63%   |
> |        64 |                32 |   5605.119 | ±629.340  |  5023.882 | ±230.639 | -10.37% |
> |        64 |                16 |   2817.346 | ±263.696  |  2367.528 | ±94.158  | -15.97% |
> |        64 |                 2 |    870.389 | ±530.579  |   464.395 | ±126.260 | -46.65% |
> +-----------+-------------------+------------+-----------+-----------+----------+---------+

Evgeny Astigeevich has updated the pull request incrementally with one additional commit since the last revision:

  RET only StubRoutines::aarch64::spin_wait() for SpinWait::NONE

-------------

Changes:
  - all: https://git.openjdk.java.net/jdk/pull/6803/files
  - new: https://git.openjdk.java.net/jdk/pull/6803/files/419508b9..53d16580

Webrevs:
 - full: https://webrevs.openjdk.java.net/?repo=jdk&pr=6803&range=03
 - incr: https://webrevs.openjdk.java.net/?repo=jdk&pr=6803&range=02-03

  Stats: 18 lines in 2 files changed: 11 ins; 4 del; 3 mod
  Patch: https://git.openjdk.java.net/jdk/pull/6803.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/6803/head:pull/6803

PR: https://git.openjdk.java.net/jdk/pull/6803


More information about the hotspot-dev mailing list