RFR: 8212681: Refactor IC locking to use a fine grained CompiledICLocker

coleen.phillimore at oracle.com coleen.phillimore at oracle.com
Tue Oct 30 22:32:04 UTC 2018


Erik,

It looks like you've removed the only use of VerifyMutexLocker.  I was 
going to ask if you ran with logging that called nmethod::print_calls() 
but I don't see any callers. Maybe nmethod::print_nmethod() should call 
it.  Can you experiment with calling this print_calls to see if you can 
remove VerifyMutexLocker?

http://cr.openjdk.java.net/~eosterlund/8212681/webrev.00/src/hotspot/share/runtime/sweeper.cpp.frames.html

676 MutexLockerEx mex(CompiledIC_lock);


Why isn't this CompiledICLocker (nm)?  Can youy add a comment why it's 
different?

http://cr.openjdk.java.net/~eosterlund/8212681/webrev.00/src/hotspot/share/runtime/vmBehaviours.new.hpp.html

I see you've added more (funny spelling) behaviours.  I think this one 
should go in the code directory with the user of it and be called 
compiledICBehaviours.hpp or even codeBehaviours.hpp.

thanks,
Coleen

On 10/23/18 9:03 AM, Erik Österlund wrote:
> Hi Robbin,
>
> Thanks for the review.
>
> /Erik
>
> On 2018-10-23 14:50, Robbin Ehn wrote:
>> Hi Erik,
>>
>> Looks better than before :), don't forget copyright years before push.
>>
>> /Robbin
>>
>> On 10/22/18 12:59 PM, Erik Österlund wrote:
>>> Hi,
>>>
>>> Today, one must acquire the global CompiledIC_lock to have 
>>> permission to perform certain IC updating activities. The lock is 
>>> used outside of safepoints, but for example during nmethod unloading 
>>> due to GC, lock free IC cache cleaning is performed, which is safe 
>>> due to being in a safepoint.
>>>
>>> With concurrent class unloading introduced, the global lock is too 
>>> coarse grained, and a per-nmethod mechanism is needed instead. In 
>>> order to allow this, an abstract CompiledICLocker class could help 
>>> ensuring the safety of IC caches, and allow both the fine grained 
>>> (but density costly) approach for users of concurrent class 
>>> unloading, and resort to the default global locking approach otherwise.
>>>
>>> The idea is to retain the coarse grained implementation of the 
>>> synchronization when concurrent class unloading is not being used, 
>>> as supporting fine grained locking could be more costly in memory, 
>>> and there does not seem to be any use in doing this unless 
>>> concurrent class unloading is being used.
>>>
>>> Webrev:
>>> http://cr.openjdk.java.net/~eosterlund/8212681/webrev.00/
>>>
>>> Bug:
>>> https://bugs.openjdk.java.net/browse/JDK-8212681
>>>
>>> Thanks,
>>> /Erik
>



More information about the hotspot-dev mailing list