[concurrency-interest] Low-latency pause in JDK

Andrew Haley aph at redhat.com
Sat Oct 26 05:21:16 EDT 2019


On 10/25/19 11:11 AM, Viktor Klang via Concurrency-interest wrote:
> 
> Is there any jdk-builtin Java8+ method which tries to be clever
> about low-nanos/micros parking?
> 
> I'm currently considering LockSupport.parkNanos but want to avoid
> having the Thread parked when parking + wake-up latency is more
> likely to be much greater than the requested time.
> 
> I.e. some combination of onSpinWait + some non-cache-polluting
> computation + yielding + actual parking. I'd like to avoid having to
> custom-roll it, hence the question for prior art ;)

As I understand it, the common wisdom is to wait for about half the
round-trip time for a system call and then park. It doesn't sound
terribly hard to write something to do that.

Please forgive me for digressing, but:

Arm has a mechanism to do this, WFE. When a core fails to obtain a
lock it executes a WFE instruction which waits on the cache line
containing the lock. When that cache line is written to by the core
releasing the lock it awakens the waiting core.

I'd like to find some way to expose this in a high-level language but
it's not at all easy to do.

I believe that Intel has MWAIT which is similar, but it's a privileged
instruction so no use to us.

-- 
Andrew Haley  (he/him)
Java Platform Lead Engineer
Red Hat UK Ltd. <https://www.redhat.com>
https://keybase.io/andrewhaley
EAC8 43EB D3EF DB98 CC77 2FAD A5CD 6035 332F A671



More information about the Concurrency-interest mailing list