RFR: 8322535: Change default AArch64 SpinPause instruction

Erik Österlund eosterlund at openjdk.org
Thu Jan 18 09:36:12 UTC 2024


On Mon, 15 Jan 2024 16:25:08 GMT, Fredrik Bredberg <fbredberg at openjdk.org> wrote:

> The Java options OnSpinWaitInst lets you choose which AArch64 instruction should be used in `SpinPause()`. Valid values are "none", "nop", "isb" and "yield". Today the default value for OnSpinWaitInst is unfortunately "none".
> 
> However some CPUs changes the default SpinPause instruction to something better if the user hasn't used the OnSpinWaitInst option. For instance if you run a Neoverse N1, N2, V1 or V2, the default SpinPause instruction will be changed to "isb". After doing some measurements on Apple's M1-M3 CPUs it also seems like "isb" is the best yielding instruction on on those CPUs.
> 
> This PR changes the default SpinPause instruction to "yield" on all AArch64 platforms except on Apple's M1, M2 and M3 CPUs on which the default value will be "isb".
> 
> Tested tier1-tier7 successfully on linux-aarch64 and macosx-aarch64.

The main point of this PR is not to figure out what Apple HW should bind to, but rather to figure out what a good default is for unrecognized HW. The current default is "none", and the proposal is to change it to "yield". Since yield is the ISA defined instruction for this exact purpose, I think it makes more sense to use yield instead of none. It is certainly less surprising.
It's worth pointing out that new AmpereOne chips do indeed implement yield. By having the unsurprising yield instruction be the default, hopefully more HW vendors will find the motivation to follow suit and implement the instruction. We can have horrible hacks as opt-in for machines that have ignored this, but I think figuring out what said hacks should be and on what machines, is an orthogonal concern. The default should still be "yield", regardless, IMO.

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

PR Comment: https://git.openjdk.org/jdk/pull/17430#issuecomment-1898115272


More information about the hotspot-dev mailing list