RFR(XS): 8191787 - move private inline functions from thread.inline.hpp -> thread.cpp

Daniel D. Daugherty daniel.daugherty at oracle.com
Thu Nov 30 13:02:45 UTC 2017


On 11/29/17 10:46 PM, coleen.phillimore at oracle.com wrote:
>
> Yes, definitely the "kitchen sink collection".    I meant instead of :
>
>     // Safe Memory Reclamation (SMR) support:
> + // The coordination between Threads::release_stable_list() and
> + // Threads::smr_delete() uses the smr_delete_lock in order to
> + // reduce the traffic on the Threads_lock.
>     static Monitor*              _smr_delete_lock;
> + static Monitor* smr_delete_lock() { return _smr_delete_lock; }
>     // The '_cnt', '_max' and '_times" fields are enabled via
>     // -XX:+EnableThreadSMRStatistics (see thread.cpp for a
>     // description about each field):
>     static uint                  _smr_delete_lock_wait_cnt;
>     static uint                  _smr_delete_lock_wait_max;
> + // The smr_delete_notify flag is used for proper double-check
> + // locking in order to reduce the traffic on the smr_delete_lock.
>     static volatile uint         _smr_delete_notify;
> + static bool smr_delete_notify();
> + static void set_smr_delete_notify();
> + static void clear_smr_delete_notify();
>     static volatile uint         _smr_deleted_thread_cnt;
> + static void inc_smr_deleted_thread_cnt();
>     static volatile uint         _smr_deleted_thread_time_max;
> + static void update_smr_deleted_thread_time_max(uint new_value);
>     static volatile uint         _smr_deleted_thread_times;
> + static void add_smr_deleted_thread_times(uint add_value);
>     static ThreadsList* volatile _smr_java_thread_list;
>     static ThreadsList*          get_smr_java_thread_list();
>     static ThreadsList*          xchg_smr_java_thread_list(ThreadsList* new_list);
>     static uint64_t              _smr_java_thread_list_alloc_cnt;
>     static uint64_t              _smr_java_thread_list_free_cnt;
>
> To have the below.  They're all together but fields and functions have 
> been separated.
>
>     // Safe Memory Reclamation (SMR) support:
> + // The coordination between Threads::release_stable_list() and
> + // Threads::smr_delete() uses the smr_delete_lock in order to
> + // reduce the traffic on the Threads_lock.
>     static Monitor*              _smr_delete_lock;
>     // The '_cnt', '_max' and '_times" fields are enabled via
>     // -XX:+EnableThreadSMRStatistics (see thread.cpp for a
>     // description about each field):
>     static uint                  _smr_delete_lock_wait_cnt;
>     static uint                  _smr_delete_lock_wait_max;
> + // The smr_delete_notify flag is used for proper double-check
> + // locking in order to reduce the traffic on the smr_delete_lock.
>     static volatile uint         _smr_delete_notify;
>     static volatile uint         _smr_deleted_thread_cnt;
>     static volatile uint         _smr_deleted_thread_time_max;
>     static volatile uint         _smr_deleted_thread_times;
>     static ThreadsList* volatile _smr_java_thread_list;
>     static uint64_t              _smr_java_thread_list_alloc_cnt;
>     static uint64_t              _smr_java_thread_list_free_cnt;
> + static Monitor* smr_delete_lock() { return _smr_delete_lock; } + 
> static bool smr_delete_notify();
> + static void set_smr_delete_notify();
> + static void clear_smr_delete_notify();
> + static void inc_smr_deleted_thread_cnt();
> + static void update_smr_deleted_thread_time_max(uint new_value);
> + static void add_smr_deleted_thread_times(uint add_value);
>     static ThreadsList*          get_smr_java_thread_list();
>     static ThreadsList*          xchg_smr_java_thread_list(ThreadsList* new_list);


I can do this. I will sort that list of functions though... :-)

Dan


>
> Thanks,
> Coleen
>
> On 11/29/17 5:11 PM, Daniel D. Daugherty wrote:
>> On 11/29/17 5:04 PM, coleen.phillimore at oracle.com wrote:
>>>
>>> http://cr.openjdk.java.net/~dcubed/8191787-webrev/jdk10-0/src/hotspot/share/runtime/thread.hpp.udiff.html 
>>>
>>>
>>> Can you put a section with the static data member declarations, then 
>>> a blank line and then have a section with the functions?   We don't 
>>> usually mix them like that (maybe in thread.hpp because it's the 
>>> kitchen sink but not everywhere else).  It makes it hard to read.
>>
>> We're trying to keep all the "stuff" associated with a field together.
>> It's definitely not a style typically in use in HotSpot, but we're
>> experimenting with it because thread.hpp is currently a kitchen sink
>> collection. Some folks would say it is a mess... :-)
>>
>> I'm going to take a look this cleanup bug also:
>>
>> JDK-8191789 migrate more Thread-SMR stuff from thread.[ch]pp -> 
>> threadSMR.[ch]pp
>> https://bugs.openjdk.java.net/browse/JDK-8191789
>>
>> since it will primarily be "code motion" fix also. Keeping "stuff"
>> together will make that cleanup bug easier...
>>
>> Would you be okay with this fix (8191787) as it is?
>>
>>
>>> Otherwise, looks fine.  Thank you for moving these!
>>
>> Thanks!
>>
>> Dan
>>
>>
>>>
>>> Coleen
>>>
>>> On 11/29/17 4:16 PM, Daniel D. Daugherty wrote:
>>>> Greetings,
>>>>
>>>> Coleen, this is one of your Thread-SMR follow-up suggestions so I need
>>>> to hear from you on this thread. Thanks!
>>>>
>>>> I have a simple cleanup fix for Thread-SMR. The bug is:
>>>>
>>>>     JDK-8191787 move private inline functions from 
>>>> thread.inline.hpp -> thread.cpp
>>>> https://bugs.openjdk.java.net/browse/JDK-8191787
>>>>
>>>> This fix is pure code motion:
>>>>
>>>> - moving inline functions from thread.inline.hpp -> thread.cpp
>>>> - making a few functions in thread.hpp private instead of public
>>>>
>>>> Here is the webrev URL:
>>>>
>>>> http://cr.openjdk.java.net/~dcubed/8191787-webrev/jdk10-0
>>>>
>>>> This fix was (over) tested with a Mach5 tier[1-5] run. There were no
>>>> unexpected test failures.
>>>>
>>>> Thanks, in advance, for any comments, questions or suggestions.
>>>>
>>>> Dan
>>>
>>
>



More information about the hotspot-runtime-dev mailing list