RFR: 8200697: Add utility for spin wait with fallback to yield/sleep

Daniel D. Daugherty daniel.daugherty at oracle.com
Wed Apr 4 19:33:07 UTC 2018


On 4/4/18 2:53 PM, Kim Barrett wrote:
> Please review this addition of SpinYield utility class.
>
> It initially supplies a very simple policy: spin a configured number
> of times, then switch to yielding or (eventually) sleeping.  Other
> policies may replace this one or be provided as alternatives in the
> future.
>
> This is joint work with Robbin Ehn.
>
> Robbin and I have immediate uses for this utility in changes we are
> developing.  In addition, there are some existing places that might be
> converted to use this utility (or perhaps some extended version of
> it), including SafepointSynchronize::begin, ReadStableMark,
> Thread::SpinAcquire, and ParallelTaskTerminator::offer_termination.
> Those existing potential uses are not being changed here; for now,
> we're just adding the utility in support of our in-development
> changes.  We plan to file followup RFEs to consider converting those
> potential uses.
>
> CR:
> https://bugs.openjdk.java.net/browse/JDK-8200697
>
> Webrev:
> http://cr.openjdk.java.net/~kbarrett/8200697/open.00/

src/hotspot/share/utilities/spinYield.cpp
     L35:   _spin_limit(os::is_MP() ? spin_limit : 0),
         Do you want to mention in the .hpp file that spin_limit
         only has meaning when os::is_MP() == true?

     L45:     os::naked_short_sleep(1);
         Hmmm... I have a vague memory of a 10ms lower limit for
         sleeps on at least some versions of Win*. I realize that
         naked_short_sleep() doesn't complain, but does that break
         anything in your assumptions?

src/hotspot/share/utilities/spinYield.hpp
     No comments other than whether you want to talk about limitations
     in the .hpp file?

test/hotspot/gtest/utilities/test_spinYield.cpp
     No comments.

Thumbs up.

Dan
P.S.
I think we've still got some spin/yield stuff in Java monitors
and/or Mutexes so this could probably be used there also...


>
> Testing:
> Added unit test of basic functionality.
> Build and hs-tier1 (for gtest) on all Oracle platforms.
>



More information about the hotspot-dev mailing list