RFR: 8258604: Use 'isb' instruction in SpinPause on linux-aarch64 [v2]

Paul Hohensee phh at openjdk.java.net
Fri Aug 13 19:54:28 UTC 2021


On Fri, 13 Aug 2021 19:33:45 GMT, Evgeny Astigeevich <github.com+42899633+eastig at openjdk.org> wrote:

>> To implement `SpinPause `an instruction creating a small delay without consuming ALU resources is needed. AArch64 has the YIELD instruction but most of AArch64 vendors still implement it as a NOP. It's been found that ISB can create a small delay without consuming ALU resources. It is more reliable than NOPs.
>> 
>> This patch implements `SpinPause` with ISB.
>> Testing: gtest, tier1, tier2
>> 
>> Results of https://github.com/ben-manes/caffeine/wiki/Benchmarks  
>> 
>> `GetPutBenchmark` has 8 threads concurrently working with a cache.
>> `GetPutBenchmark.read_only` all 8 thread read from a cache.
>> `GetPutBenchmark.write_only` all 8 thread write to a cache.
>> `GetPutBenchmark.readwrite` 6 threads concurrently read from and 2 threads write to a cache.
>> 
>> Improvements when only 4 CPUs are available:
>> 
>> 
>> (cacheType)         Benchmark                               Units    Baseline       Error           CoV     New             Error           CoV     New vs Base
>> Cache2k             GetPutBenchmark.readwrite:readwrite_get ops/s   58,893,980.32   1,903,084.75    3.23%   65,685,338.20   4,858,329.69    7.40%   11.5%
>> ExpiringMap_Fifo    GetPutBenchmark.read_only               ops/s   5,060,227.98    695,582.74      13.75%  6,040,948.02    1,046,581.70    17.32%  19.4%
>> ExpiringMap_Fifo    GetPutBenchmark.readwrite:readwrite_put ops/s   433,046.21      194,297.64      44.87%  783,825.18      272,868.60      34.81%  81.0%
>> LinkedHashMap_Lru   GetPutBenchmark.read_only               ops/s   6,405,770.38    607,772.98      9.49%   10,259,858.51   1,446,471.70    14.10%  60.2%
>> LinkedHashMap_Lru   GetPutBenchmark.readwrite:readwrite_get ops/s   3,083,275.32    400,878.84      13.00%  5,934,784.52    1,309,784.39    22.07%  92.5%
>> LinkedHashMap_Lru   GetPutBenchmark.readwrite:readwrite_put ops/s   1,669,852.29    356,469.07      21.35%  2,491,807.50    299,230.23      12.01%  49.2%
>> LinkedHashMap_Lru   GetPutBenchmark.write_only              ops/s   4,623,049.93    449,438.94      9.72%   7,069,151.98    1,725,457.51    24.41%  52.9%
>> 
>> 
>> Improvements when only 8 CPUs are available:
>> 
>> 
>> (cacheType)         Benchmark                               Units    Baseline       Error       CoV     New             Error       CoV      New vs Base
>> LinkedHashMap_Lru   GetPutBenchmark.read_only               ops/s   4,054,507.30    71,693.81   1.77%   4,306,745.31    226,212.96  5.25%   6.2%
>> LinkedHashMap_Lru   GetPutBenchmark.readwrite:readwrite_get ops/s   3,087,578.38    86,158.78   2.79%   2,818,742.51    301,261.76  10.69%  -8.7%
>> LinkedHashMap_Lru   GetPutBenchmark.readwrite:readwrite_put ops/s   1,053,560.98    66,412.90   6.30%   1,401,928.05    239,055.34  17.05%  33.1%
>> LinkedHashMap_Lru   GetPutBenchmark.write_only              ops/s   3,823,208.44    305,096.58  7.98%   4,510,823.31    390,622.00  8.66%   18.0%
>> 
>> 
>> [LinkedHashMapCache source](https://github.com/ben-manes/caffeine/blob/master/caffeine/src/jmh/java/com/github/benmanes/caffeine/cache/impl/LinkedHashMapCache.java)
>> [Cache2k source](https://github.com/ben-manes/caffeine/blob/master/caffeine/src/jmh/java/com/github/benmanes/caffeine/cache/impl/Cache2k.java)
>> [ExpiringMapCache source](https://github.com/ben-manes/caffeine/blob/master/caffeine/src/jmh/java/com/github/benmanes/caffeine/cache/impl/ExpiringMapCache.java)
>> [GetPutBenchmark source](https://github.com/ben-manes/caffeine/blob/master/caffeine/src/jmh/java/com/github/benmanes/caffeine/cache/GetPutBenchmark.java)
>
> Evgeny Astigeevich has updated the pull request incrementally with one additional commit since the last revision:
> 
>   8258604: Use 'isb' instruction in SpinPause on linux-aarch64
>   
>   Fix: SpinPause() should return 1 if it executes code.

Marked as reviewed by phh (Reviewer).

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

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


More information about the hotspot-runtime-dev mailing list