RFR: 8200106: Move NoSafepointVerifier out from gcLocker.hpp

Stefan Karlsson stefan.karlsson at oracle.com
Fri Mar 23 07:49:51 UTC 2018



On 2018-03-23 00:45, David Holmes wrote:
> Hi Stefan,
> 
> I've looked through everything now and it all seems okay. One additional 
> comment, and a follow up below ...
> 
> On 23/03/2018 8:18 AM, Stefan Karlsson wrote:
>> On 2018-03-22 23:05, David Holmes wrote:
>>> On 23/03/2018 7:59 AM, Stefan Karlsson wrote:
>>>> On 2018-03-22 22:47, David Holmes wrote:
>>>>> Hi Stefan,
>>>>>
>>>>> Jumping in on one issue ...
>>>>>
>>>>> On 23/03/2018 4:47 AM, Stefan Karlsson wrote:
>>>>>> On 2018-03-22 19:33, coleen.phillimore at oracle.com wrote:
>>>>>>>
>>>>>>> http://cr.openjdk.java.net/~stefank/8200106/webrev.01/src/hotspot/share/runtime/interfaceSupport.hpp.html 
>>>>>>>
>>>>>>>
>>>>>>> This is really interesting. I never noticed this buried in 
>>>>>>> gcLocker. I think this should probably go in 
>>>>>>> interfaceSupport.inline.hpp like all the classes that are only 
>>>>>>> used there instead, unless you think it should be used on its 
>>>>>>> own.  I'm not sure about that.
>>>>>>
>>>>>> I can move that.
> 
> Now I see what this part was about, I'll just comment that which ever 
> way this ends up, interfaceSupport.* needs some future tidy up. If we 
> are going to have the plain .hpp file then a lot of what is in the 
> .inline.hpp can possibly move across (ie basic class definitions).

I moved the class to the .inline.hpp, and removed the 
interfaceSupport.hpp file I added.

> 
>>>>>>>
>>>>>>> http://cr.openjdk.java.net/~stefank/8200106/webrev.01/src/hotspot/share/gc/shared/gcLocker.cpp.udiff.html 
>>>>>>>
>>>>>>>
>>>>>>> This seems strange to have another is_at_safepoint function. I 
>>>>>>> don't see why you changed this as is_at_safepoint is inlined in 
>>>>>>> safepoint.hpp.
>>>>>>
>>>>>> I did that so that we wouldn't have to include safepoint.hpp in 
>>>>>> gcLocker.hpp, just to be able to do an assert.
>>>>>
>>>>> Why is that an issue?
>>>>
>>>> I simply try to minimize includes in our our .hpp files.
>>>
>>> If it was to avoid some kind of problem I could understand, but just 
>>> to "minimize" this seems like false economy. You shouldn't need to 
>>> add forwarding wrapper functions in the local API just because you 
>>> don't want to include the real API's header file.
>>
>> Of course I don't "need" to, but safepoint.hpp includes 158 other 
> 
> Wow! Is that the transitive closure? I see 7 direct includes and 2 of 
> them seem unnecessary to start with. I think os.hpp is likely the main 
> problem and that is easily fixed by moving somethings to the .cpp file. 
> This header file should not be something that code is reluctant to 
> include because of the issues you cite. It's primary role should be to 
> provide the is_at_safepoint function and the related assertions. Another 
> RFE I guess.

Yes, I think it would make sense to start cleaning os.hpp at some point.

> 
>> HotSpot headers, and whenever I touch any of those, I'll get mostly 
>> unnecessary recompiles of files that included gcLocker.hpp. By being 
>> more restrictive with our includes, we could minimize our compile 
>> times, and that's worth the tiny overhead of doing this change.
>>
>> Minimizing our includes in our header files also help reduce the risk 
>> of getting cyclic dependencies, which do cause problems.
>>
>> If you don't like this, I could move is_active to gcLocker.inline.hpp, 
>> and then I'd add #include "gc/shared/gcLocker.inline.hpp" to the ~50 
>> files that use is_active.
> 
> That would be a step in the wrong direction. :)

Yes. :)

StefanK

> 
> Thanks,
> David
> 
>> StefanK
>>
>>> David
>>>
>>>>>
>>>>> And shouldn't gcLocker.cpp be including safepoint.hpp now?
>>>>
>>>> Thanks, I missed that because the line below used SafepointSynchronize.
>>>>
>>>> StefanK
>>>>
>>>>> (I guess it gets it indirectly from "runtime/thread.inline.hpp")
>>>>>
>>>>> Thanks,
>>>>> David
>>>>> -----
>>>>>
>>>>>>>
>>>>>>> http://cr.openjdk.java.net/~stefank/8200106/webrev.01/src/hotspot/share/gc/shared/gcLocker.inline.hpp.udiff.html 
>>>>>>>
>>>>>>>
>>>>>>> I thought the inline keyword should be on both declaration and 
>>>>>>> definition (?)  Do we need these functions to be inlined anyway? 
>>>>>>> Can we put them in gcLocker.cpp and remove the .inline file.  It 
>>>>>>> looks like the inline file is not included in most places anyway 
>>>>>>> with this change.
>>>>>>
>>>>>> You can have it either at the declaration or the definition. The 
>>>>>> benefit of having it on the declaration is that the compiler will 
>>>>>> complain instead of the linker. This might be performance 
>>>>>> sensitive, so I didn't want to risk moving it to the .cpp file.
>>>>>>
>>>>>>>
>>>>>>> http://cr.openjdk.java.net/~stefank/8200106/webrev.01/src/hotspot/share/runtime/interfaceSupport.cpp.udiff.html 
>>>>>>>
>>>>>>>
>>>>>>> nit, can you add // ASSERT to the #endif ?
>>>>>>
>>>>>> Sure.
>>>>>>
>>>>>>>
>>>>>>> http://cr.openjdk.java.net/~stefank/8200106/webrev.01/src/hotspot/share/runtime/safepointVerifiers.hpp.html 
>>>>>>>
>>>>>>>
>>>>>>> I like this and the name seems Ok.  This will be a lot easier to 
>>>>>>> find than in GCLocker.  Thank you for this change.
>>>>>>
>>>>>> Thanks! I'll make the changes and will send out a new webrev.
>>>>>>
>>>>>> StefanK
>>>>>>>
>>>>>>> Coleen
>>>>>>>
>>>>>>>
>>>>>>> On 3/22/18 12:26 PM, Stefan Karlsson wrote:
>>>>>>>> This patch builds upon the changes in:
>>>>>>>> http://mail.openjdk.java.net/pipermail/hotspot-dev/2018-March/030928.html 
>>>>>>>>
>>>>>>>>
>>>>>>>> StefanK
>>>>>>>>
>>>>>>>> On 2018-03-22 17:24, Stefan Karlsson wrote:
>>>>>>>>> Hi all,
>>>>>>>>>
>>>>>>>>> Please review this patch to separate out the 
>>>>>>>>> NoSafepointVerifier class (and friends) from gcLocker.hpp into 
>>>>>>>>> its own file.
>>>>>>>>>
>>>>>>>>> http://cr.openjdk.java.net/~stefank/8200106/webrev.01
>>>>>>>>> https://bugs.openjdk.java.net/browse/JDK-8200106
>>>>>>>>>
>>>>>>>>> After this patch gcLocker.hpp only contains code for the 
>>>>>>>>> GCLocker. I've gone through all usages of the GCCLocker and 
>>>>>>>>> NoSafepointVerifier classes and changed the code to include the 
>>>>>>>>> correct headers.
>>>>>>>>>
>>>>>>>>> The new files are names safepointVerifiers.hpp/cpp and the main 
>>>>>>>>> class is NoSafepointVerifier. However, I also moved the 
>>>>>>>>> NoGCVerifier, which is the parent class of NoSafepointVerifier, 
>>>>>>>>> and NoAllocVerfier. I think all of these are used to verify 
>>>>>>>>> that we don't do things that will interact badly with 
>>>>>>>>> safepoints, hence the name of the new file. Are others OK with 
>>>>>>>>> the name?
>>>>>>>>>
>>>>>>>>> Thanks,
>>>>>>>>> StefanK
>>>>>>>
>>>>>>
>>>>
>>


More information about the hotspot-dev mailing list