RFR(S) Contended Locking fast notify bucket (8075171)
David Holmes
david.holmes at oracle.com
Tue Jul 21 04:33:50 UTC 2015
On 21/07/2015 2:24 PM, Daniel D. Daugherty wrote:
>
> On 7/20/15 7:39 PM, David Holmes wrote:
>> Hi Dan,
>>
>> On 21/07/2015 7:06 AM, Daniel D. Daugherty wrote:
>>> Greetings,
>>>
>>> In rebasing this bucket, I've run into the need for
>>> @HotSpotIntrinsicCandidate (8076112). That results
>>> in the following trivial change in the JDK repo:
>>>
>>> $ hg diff
>>> diff -r c2e706c73dd5 src/java.base/share/classes/java/lang/Object.java
>>> --- a/src/java.base/share/classes/java/lang/Object.java Fri Jul 17
>>> 08:46:54 2015 -0700
>>> +++ b/src/java.base/share/classes/java/lang/Object.java Mon Jul 20
>>> 13:59:10 2015 -0700
>>> @@ -278,6 +278,7 @@ public class Object {
>>> * @see java.lang.Object#notifyAll()
>>> * @see java.lang.Object#wait()
>>> */
>>> + @HotSpotIntrinsicCandidate
>>> public final native void notify();
>>>
>>> /**
>>> @@ -302,6 +303,7 @@ public class Object {
>>> * @see java.lang.Object#notify()
>>> * @see java.lang.Object#wait()
>>> */
>>> + @HotSpotIntrinsicCandidate
>>> public final native void notifyAll();
>>>
>>> /**
>>
>> I'm regretting not having paid more attention to this annotation. I'm
>> really not seeing it's value. And the word "Hotspot" should NOT be
>> appearing as part of the Java platform API docs. :(
>
> Yup. It does feel strange, but I had to add it...
>
>
>>
>>>
>>> and the following trivial test change in the HotSpot repo:
>>>
>>> diff -r 67c4a62090e5
>>> test/compiler/dependencies/MonomorphicObjectCall/java/lang/Object.java
>>> ---
>>> a/test/compiler/dependencies/MonomorphicObjectCall/java/lang/Object.java
>>> +++
>>> b/test/compiler/dependencies/MonomorphicObjectCall/java/lang/Object.java
>>> @@ -58,8 +58,10 @@ public class Object {
>>> return getClass().getName() + "@" +
>>> Integer.toHexString(hashCode());
>>> }
>>>
>>> + @HotSpotIntrinsicCandidate
>>> public final native void notify();
>>>
>>> + @HotSpotIntrinsicCandidate
>>> public final native void notifyAll();
>>>
>>> public final native void wait(long timeout) throws
>>> InterruptedException;
>>
>> Sorry to do this to you but as we already hit this with some other
>> tests it may be better to disable CheckIntrinsics for the test.
>> Otherwise the test can now only be compiled by a sufficiently recent
>> JDK 9.
>
> Since I know nothing about this test other than 8076112 modified
> it for other intrinsics, I'd rather not muddy the waters of this
> changeset dealing with whether this test should use
> -XX:-CheckIntrinsics or not...
Hadn't realized that this test was already using the annotation - in
that case no problem and no need for follow up.
Thanks,
David
> I will file a follow up bug and try to chase down resolution
> for that test using a different bug.
>
> Dan
>
>>
>> Thanks,
>> David
>>
>>> Dan
>>>
>>>
>>> On 7/3/15 6:11 PM, Daniel D. Daugherty wrote:
>>>> Greetings,
>>>>
>>>> I've updated the patch for Contended Locking fast notify bucket
>>>> based on David H's and Karen's comments.
>>>>
>>>> This work is being tracked by the following bug ID:
>>>>
>>>> JDK-8075171 Contended Locking fast notify bucket
>>>> https://bugs.openjdk.java.net/browse/JDK-8075171
>>>>
>>>> Here is the webrev URL:
>>>>
>>>> http://cr.openjdk.java.net/~dcubed/8075171-webrev/1-jdk9-hs-rt/
>>>>
>>>> Here is the JEP link:
>>>>
>>>> https://bugs.openjdk.java.net/browse/JDK-8046133
>>>>
>>>> Testing:
>>>>
>>>> - RBT vm.quick batches (in process)
>>>> - JPRT test jobs
>>>> - MonitorWaitNotifyStresser micro-benchmark (in process)
>>>> - CallTimerGrid stress testing (in process)
>>>>
>>>>
>>>> The changes in this round are in only four of the files:
>>>>
>>>> src/share/vm/opto/runtime.cpp
>>>>
>>>> - deleted comment about hashCode() that belongs in a different bucket
>>>>
>>>> src/share/vm/runtime/objectMonitor.cpp
>>>>
>>>> - add MAX_RECHECK_INTERVAL define for use in ObjectMonitor::EnterI()
>>>> - cleanup recheck interval code
>>>> - ObjectMonitor::INotify() return type is now "void"
>>>> - delete duplicate comments, clarify/rewrite some comments
>>>>
>>>> src/share/vm/runtime/objectMonitor.hpp
>>>>
>>>> - ObjectMonitor::INotify() return type is now "void"
>>>>
>>>> src/share/vm/runtime/synchronizer.cpp
>>>>
>>>> - clarify/rewrite comments, add additional comments
>>>> - cleanup variables in ObjectSynchronizer::quick_notify
>>>> - refactor loop to be more clear
>>>> - delete unused enum MaximumRecheckInterval
>>>>
>>>> The easiest way to review the delta is to download the two patch
>>>> files and compare them in something like jfilemerge:
>>>>
>>>> http://cr.openjdk.java.net/~dcubed/8075171-webrev/0-jdk9-hs-rt/hotspot.patch
>>>>
>>>>
>>>> http://cr.openjdk.java.net/~dcubed/8075171-webrev/1-jdk9-hs-rt/hotspot.patch
>>>>
>>>>
>>>>
>>>> Dan
>>>>
>>>>
>>>> On 5/18/15 2:07 PM, Daniel D. Daugherty wrote:
>>>>> Greetings,
>>>>>
>>>>> I have the Contended Locking fast notify bucket ready for review.
>>>>>
>>>>> The code changes in this bucket are the final piece in the triad
>>>>> of {fast-enter, fast-exit, fast-notify} changes. There are no
>>>>> macro assembler changes in this bucket (yeah!), but there are
>>>>> code review cleanups motivated by comments on other buckets, e.g.,
>>>>> changing variables like 'Tally' -> 'tally'.
>>>>>
>>>>> This work is being tracked by the following bug ID:
>>>>>
>>>>> JDK-8075171 Contended Locking fast notify bucket
>>>>> https://bugs.openjdk.java.net/browse/JDK-8075171
>>>>>
>>>>> Here is the webrev URL:
>>>>>
>>>>> http://cr.openjdk.java.net/~dcubed/8075171-webrev/0-jdk9-hs-rt/
>>>>>
>>>>> Here is the JEP link:
>>>>>
>>>>> https://bugs.openjdk.java.net/browse/JDK-8046133
>>>>>
>>>>> Testing:
>>>>>
>>>>> - Aurora Adhoc RT/SVC baseline batch
>>>>> - JPRT test jobs
>>>>> - MonitorWaitNotifyStresser micro-benchmark (in process)
>>>>> - CallTimerGrid stress testing (in process)
>>>>> - Aurora performance testing:
>>>>> - out of the box for the "promotion" and 32-bit server configs
>>>>> - heavy weight monitors for the "promotion" and 32-bit server
>>>>> configs
>>>>> (-XX:-UseBiasedLocking -XX:+UseHeavyMonitors)
>>>>> (in process)
>>>>>
>>>>> The hang somehow introduced by the "fast enter" bucket is still
>>>>> unresolved, but progress is being made. That work is being tracked
>>>>> by the following bug:
>>>>>
>>>>> JDK-8077392 Stream fork/join tasks occasionally fail to complete
>>>>> https://bugs.openjdk.java.net/browse/JDK-8077392
>>>>>
>>>>> You'll see a change that re-enables the "fast enter" bucket in this
>>>>> webrev, but that change will not be pushed when we're done with the
>>>>> review of this bucket unless JDK-8077392 is resolved.
>>>>>
>>>>> Thanks, in advance, for any comments, questions or suggestions.
>>>>>
>>>>> Gory details about the changes are below...
>>>>>
>>>>> Dan
>>>>>
>>>>>
>>>>> 8075171 summary of changes:
>>>>>
>>>>> src/share/vm/classfile/vmSymbols.hpp
>>>>> - Add do_intrinsic() entries for _notify and _notifyAll
>>>>>
>>>>> src/share/vm/opto/library_call.cpp
>>>>> - Add optional inline_notify() that is controlled by new
>>>>> '-XX:[+-]InlineNotify' option
>>>>>
>>>>> src/share/vm/opto/runtime.cpp
>>>>> src/share/vm/opto/runtime.hpp
>>>>> - Add OptoRuntime::monitor_notify_C() and
>>>>> OptoRuntime::monitor_notifyAll_C() functions to support
>>>>> the new "fast notify" code paths
>>>>> - Add new OptoRuntime::monitor_notify_Type() to support
>>>>> the above two new functions
>>>>>
>>>>> src/share/vm/runtime/globals.hpp
>>>>> - Add '-XX:[+-]InlineNotify' option; default option value is
>>>>> enabled (true)
>>>>>
>>>>> src/share/vm/runtime/objectMonitor.cpp
>>>>> src/share/vm/runtime/objectMonitor.hpp
>>>>> - Refactor ObjectMonitor::notify() and ObjectMonitor::notifyAll()
>>>>> into wrappers that call the new ObjectMonitor::INotify()
>>>>> - Add new ObjectMonitor::INotify() to reduce code duplication
>>>>> between "notify" and "notifyAll" code paths
>>>>>
>>>>> src/share/vm/runtime/sharedRuntime.cpp
>>>>> - Temporarily re-enable the "fast enter" optimization in order
>>>>> to do performance testing. JDK-8077392 is still unresolved,
>>>>> but progress is being made.
>>>>>
>>>>> src/share/vm/runtime/synchronizer.cpp
>>>>> src/share/vm/runtime/synchronizer.hpp
>>>>> - Add ObjectSynchronizer::quick_notify() that implements the
>>>>> new "fast notify" code paths
>>>>> - The new code handles a couple of special cases where the
>>>>> "notify" can be done without the heavy weight slow-path
>>>>> (thread state transitions and other baggage)
>>>>>
>>>>>
>>>>
>>>>
>>>>
>>>
>
More information about the hotspot-runtime-dev
mailing list