RFR: 8186670: Implement _onSpinWait() intrinsic for AArch64 [v15]

Andrew Haley aph at openjdk.java.net
Thu Nov 11 11:39:41 UTC 2021


On Thu, 11 Nov 2021 09:36:36 GMT, Evgeny Astigeevich <duke at openjdk.java.net> wrote:

>> This PR is a follow-up on the discussion [“RFC: AArch64: Implementing spin pauses with ISB”](https://mail.openjdk.java.net/pipermail/hotspot-dev/2021-August/054033.html).
>> 
>> It adds DIAGNOSTIC options `OnSpinWaitInst=inst`, where `inst` can be:
>> 
>> - `none`: no implementation for spin pauses. This is the default value.
>> - `nop`: use `nop` instruction for spin pauses.
>> - `isb`: use `isb` instruction for spin pauses.
>> - `yield`: use `yield` instruction for spin pauses.
>> 
>> And  `OnSpinWaitInstCount=count`, where `count` specifies a number of `OnSpinWaitInst` and can be in `1..99` range. It is an error to use `OnSpinWaitInstCount` when `OnSpinWaitInst` is `none`.
>> 
>> The code for the `Thread.onSpinWait` intrinsic is generated based on the values of `OnSpinWaitInst` and `OnSpinWaitInstCount`.
>> 
>> Testing:
>> 
>> - `make test TEST="gtest"`: Passed
>> - `make run-test TEST="tier1"`: Passed
>> - `make run-test TEST="tier2"`: Passed
>> - `make run-test TEST=hotspot/jtreg/compiler/onSpinWait`: Passed
>> 
>> CSR: https://bugs.openjdk.java.net/browse/JDK-8274564
>
> Evgeny Astigeevich has updated the pull request incrementally with one additional commit since the last revision:
> 
>   8275728: Add simple Producer/Consumer microbenchmark for Thread.onSpinWait

Marked as reviewed by aph (Reviewer).

I'm getting this for `-XX:OnSpinWaitInst=yield` on Apple M1:


Benchmark                                (maxNum)  (spinNum)    Score   Error  Units
ThreadOnSpinWaitProducerConsumer.trial       100        125   355.686 ± 1.263  us/op


This for  `-XX:OnSpinWaitInst=none`:


ThreadOnSpinWaitProducerConsumer.trial       100        125   359.635 ± 0.912  us/op


This for `-XX:OnSpinWaitInst=isb`:


ThreadOnSpinWaitProducerConsumer.trial       100        125   169.353 ± 3.932  us/op


Which looks pretty convincing, at least for this benchmark. 

I'm a bit concerned that it took so much effort to find a convincing benchmark, but I note that OnSpinWaitInst=isb doesn't seem to make anything worse, so OK.

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

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


More information about the hotspot-dev mailing list