RFR(M): 8210848: Obsolete SyncKnobs
David Holmes
david.holmes at oracle.com
Wed Sep 19 06:07:01 UTC 2018
On 18/09/2018 9:07 PM, Claes Redestad wrote:
> Great cleanup!
>
> src/hotspot/share/runtime/objectMonitor.cpp:
>
> The DeferredInitialize method seems a bit silly now that it only
> guards the setting of three little Knobs using a CAS.. perhaps we would
> be better off wrapping these three in methods (spinLimit() { return
> os::is_MP() ? 5000 : 0; }), or perhaps we can guarantee that os::is_MP
> is initialized before, somehow? Either way I think we could profitably
> get rid of DeferredInitialize and InitDone.
It had to be deferred to a point where os::is_MP() returned an accurate
result (it returns true before the number of processors is initialized).
As the comment says that could now be moved e.g. to os::init_2().
It also served to avoid calling os::is_MP() all the time in the spin
code - though that no longer seems to be a concern. With my changes to
always treat as MP everywhere except spin-loops, os::is_MP becomes
trivial and could be inlined.
Cheers,
David
> /Claes
>
> On 2018-09-18 09:03, Mikael Vidstedt wrote:
>> Please review this change which obsoletes the SyncKnobs flag, and
>> simplifies the code by removing the resulting unused code paths.
>>
>> Bug: https://bugs.openjdk.java.net/browse/JDK-8210848
>> Webrev:
>> http://cr.openjdk.java.net/~mikael/webrevs/8210848/webrev.00/syncknobs-full/open/webrev/
>> <http://cr.openjdk.java.net/~mikael/webrevs/8210848/webrev.00/syncknobs-full/open/webrev/>
>>
>>
>> * Background (from the bug)
>>
>> The experimental SyncKnobs flag can in theory be used to tune the
>> behavior of the synchronization primitives. The flag was convenient
>> when the various algorithms were compared a long time ago.
>>
>> In practice the only algorithm used and tested today are the default
>> one. The SyncKnobs flag no longer serves the purpose it used to, and
>> is "Unstable" (the documentation of the flag says so explicitly). It
>> should be obsoleted and later removed.
>>
>> * About the change
>>
>> As mentioned above this change not only obsolete the SyncKnobs flag,
>> but also removes the various sub-options/knobs and prunes the
>> resulting dead code. Of course I’m happy to hear your thoughts on
>> that. After having asked around it seems like the knobs have not been
>> used the last decade or so, and I like to think that the
>> synchronization code is complex enough without what is in that case
>> effectively dead code.
>>
>> In order to make reviewing this slightly easier I have for your
>> convenience (at least I hope it is) also created a bunch of smaller
>> patches which stack, each removing one specific knob. Hopefully
>> they’re more or less self-explanatory, but let me know if I can help
>> clarify something:
>>
>> http://cr.openjdk.java.net/~mikael/webrevs/8210848/webrev.00/syncknobs-00-base/open/webrev/
>>
>> http://cr.openjdk.java.net/~mikael/webrevs/8210848/webrev.00/syncknobs-01-Knob_ReportSettings/open/webrev/
>>
>> http://cr.openjdk.java.net/~mikael/webrevs/8210848/webrev.00/syncknobs-02-Knob_SpinBackOff/open/webrev/
>>
>> http://cr.openjdk.java.net/~mikael/webrevs/8210848/webrev.00/syncknobs-03-BackOffMask/open/webrev/
>>
>> http://cr.openjdk.java.net/~mikael/webrevs/8210848/webrev.00/syncknobs-04-Knob_ExitRelease/open/webrev/
>>
>> http://cr.openjdk.java.net/~mikael/webrevs/8210848/webrev.00/syncknobs-05-Knob_InlineNotify/open/webrev/
>>
>> http://cr.openjdk.java.net/~mikael/webrevs/8210848/webrev.00/syncknobs-06-Knob_Verbose/open/webrev/
>>
>> http://cr.openjdk.java.net/~mikael/webrevs/8210848/webrev.00/syncknobs-07-Knob_VerifyInUse/open/webrev/
>>
>> http://cr.openjdk.java.net/~mikael/webrevs/8210848/webrev.00/syncknobs-08-Knob_VerifyMatch/open/webrev/
>>
>> http://cr.openjdk.java.net/~mikael/webrevs/8210848/webrev.00/syncknobs-09-Knob_SpinBase/open/webrev/
>>
>> http://cr.openjdk.java.net/~mikael/webrevs/8210848/webrev.00/syncknobs-10-Knob_CASPenalty/open/webrev/
>>
>> http://cr.openjdk.java.net/~mikael/webrevs/8210848/webrev.00/syncknobs-11-Knob_OXPenalty/open/webrev/
>>
>> http://cr.openjdk.java.net/~mikael/webrevs/8210848/webrev.00/syncknobs-12-Knob_SpinSetSucc/open/webrev/
>>
>> http://cr.openjdk.java.net/~mikael/webrevs/8210848/webrev.00/syncknobs-13-Knob_SpinEarly/open/webrev/
>>
>> http://cr.openjdk.java.net/~mikael/webrevs/8210848/webrev.00/syncknobs-14-Knob_SuccEnabled/open/webrev/
>>
>> http://cr.openjdk.java.net/~mikael/webrevs/8210848/webrev.00/syncknobs-15-Knob_SuccRestrict/open/webrev/
>>
>> http://cr.openjdk.java.net/~mikael/webrevs/8210848/webrev.00/syncknobs-16-Knob_MaxSpinners/open/webrev/
>>
>> http://cr.openjdk.java.net/~mikael/webrevs/8210848/webrev.00/syncknobs-17-Knob_SpinAfterFutile/open/webrev/
>>
>> http://cr.openjdk.java.net/~mikael/webrevs/8210848/webrev.00/syncknobs-18-Knob_OState/open/webrev/
>>
>> http://cr.openjdk.java.net/~mikael/webrevs/8210848/webrev.00/syncknobs-19-Knob_UsePause/open/webrev/
>>
>> http://cr.openjdk.java.net/~mikael/webrevs/8210848/webrev.00/syncknobs-20-Knob_ExitPolicy/open/webrev/
>>
>> http://cr.openjdk.java.net/~mikael/webrevs/8210848/webrev.00/syncknobs-21-Knob_ResetEvent/open/webrev/
>>
>> http://cr.openjdk.java.net/~mikael/webrevs/8210848/webrev.00/syncknobs-22-Knob_FastHSSEC/open/webrev/
>>
>> http://cr.openjdk.java.net/~mikael/webrevs/8210848/webrev.00/syncknobs-23-Knob_MoveNotifyee/open/webrev/
>>
>> http://cr.openjdk.java.net/~mikael/webrevs/8210848/webrev.00/syncknobs-24-Knob_QMode/open/webrev/
>>
>> http://cr.openjdk.java.net/~mikael/webrevs/8210848/webrev.00/syncknobs-25-Obsolete/open/webrev/
>>
>>
>> * Testing
>>
>> A slightly earlier version of this patch passed the standard tier1-3
>> testing. I will run additional testing after I get some feedback.
>>
>> Cheers,
>> Mikael
>>
>
More information about the hotspot-dev
mailing list