RFR: 8035057: NewSize ergonomics wrong when setting small or unaligned size on command line

Stefan Johansson stefan.johansson at oracle.com
Thu Mar 6 09:59:08 UTC 2014


Thanks Jon and Jesper for reviewing.

Stefan

On 2014-03-06 10:34, Jesper Wilhelmsson wrote:
> I'm fine with this change for now. Ship it!
>
> I do think we need to fix the flags asap, in 9 the latest. It would be 
> fairly easy to change the code to remember all states for a flag, so 
> that if a flag is set on the command line and later changed by the 
> ergonomics, it would reply true to both FLAG_IS_CMDLINE and 
> FLAG_IS_ERGO. There are a couple of cases that would be greatly 
> simplified if we make that change.
>
> Thanks,
> /Jesper
>
>
> Jon Masamitsu skrev 5/3/14 21:57:
>>
>> On 3/5/2014 10:01 AM, Stefan Johansson wrote:
>>> Thanks Jon,
>>>
>>> On 2014-03-05 18:45, Jon Masamitsu wrote:
>>>> Stefan,
>>>>
>>>> Change looks good.
>>>>
>>>> Could you add a comment explaining why you are doing a direct
>>>> assignment to NewSize?  I can easily see someone in the future
>>>> looking at that assignment and  thinking it is not right.
>>>>
>>> I took inspiration from metaspace.cpp where we also skip to use 
>>> FLAG_SET_ERGO:
>>> // Do not use FLAG_SET_ERGO to update NewSize here, since this will 
>>> override
>>> // if NewSize was set on the command line or not. This information 
>>> is needed
>>> // later when setting the initial and minimum young generation size.
>>>
>>> I'll add this right before the assignment, should I prepare another 
>>> webrev?
>>
>> I don't need another webrev.
>>
>> Jon
>>>
>>> Cheers,
>>> Stefan
>>>> Thanks.
>>>>
>>>> Jon
>>>>
>>>> On 3/5/2014 9:34 AM, Stefan Johansson wrote:
>>>>> On 2014-03-05 16:59, Jon Masamitsu wrote:
>>>>>>
>>>>>> On 3/5/2014 7:33 AM, Stefan Johansson wrote:
>>>>>>> On 2014-03-05 15:58, Jon Masamitsu wrote:
>>>>>>>>
>>>>>>>> On 3/4/2014 4:12 PM, Stefan Johansson wrote:
>>>>>>>>> Jon,
>>>>>>>>>
>>>>>>>>> Thanks for looking at this, see inline.
>>>>>>>>>
>>>>>>>>> On March 4, 2014 8:54:37 PM CET, Jon Masamitsu
>>>>>>>>> <jon.masamitsu at oracle.com> wrote:
>>>>>>>>>> Stefan,
>>>>>>>>>>
>>>>>>>>>> I got side tracked on this review.  I thought that the macro
>>>>>>>>>> FLAG_IS_CMDLINE would remember if the flag was sent on
>>>>>>>>>> the command line.  Unfortunately, it does not.
>>>>>>>>>>
>>>>>>>>>> Is the problem that NewSize is set somewhere with
>>>>>>>>>> FLAG_SET_ERGO when it should not have been?
>>>>>>>>>> That is, if it has been set on the command line,
>>>>>>>>>> it should not be reset ergonomically.
>>>>>>>>>>
>>>>>>>>> The problem here is when the size set on the command line is 
>>>>>>>>> unaligned,
>>>>>>>>> then we need to change it. We could reset it using 
>>>>>>>>> FLAG_SET_CMDLINE, but
>>>>>>>>> then we lose the information that we change it. The best would 
>>>>>>>>> of course
>>>>>>>>> be if the flags could remember all their states, but that's 
>>>>>>>>> more like a
>>>>>>>>> feature than a simple bug fix.
>>>>>>>>
>>>>>>>> It doesn't feel right that we're saving that a flag was set on the
>>>>>>>> command line in CollectorPolicy.   Also, I usually think of
>>>>>>>> FLAG_SET_ERGO as setting a flag because of an ergonomic
>>>>>>>> policy.  That a size has to be correctly aligned holds for however
>>>>>>>> the size was originally set.  I'm tempted to just do a
>>>>>>>> naked assignment for fixing the alignment.  Unless your
>>>>>>>> interested in fixing the Flags (globals.hpp) so that it
>>>>>>>> remembers that it was set on the command line.
>>>>>>> do think we need to fix the flags asap, in 9 the latest. It 
>>>>>>> would be fairly easy to change the code to remember all states 
>>>>>>> for a flag, so that if a flag is set on the command line and 
>>>>>>> later changed by the ergonomics, it would reply true to both 
>>>>>>> FLAG_IS_CMDLINE and FLAG_IS_ERGO. There are a couple of cases 
>>>>>>> that would be greatly simplified if we make tI don't feel that 
>>>>>>> fixing the Flags is something I have time for right now,
>>>>>>> so I think that will have to wait.
>>>>>>>
>>>>>>> I agree that it feels strange to store that information in the
>>>>>>> CollectorPolicy, but we do the same for the max heap size:
>>>>>>> // Needed to keep information if MaxHeapSize was set on the 
>>>>>>> command line
>>>>>>> // when the flag value is aligned etc by ergonomics.
>>>>>>> bool _max_heap_size_cmdline;
>>>>>>
>>>>>> Yes, but having do it a second time seems to emphasize
>>>>>> that Flags is broken.  How many more times will we have
>>>>>> to do this?
>>>>>>
>>>>> Agreed. Hopefully we'll find time in the JDK9 time frame to fix 
>>>>> the flags.
>>>>>>>
>>>>>>> The reason I would like to use FLAG_SET_ERGO is that it is 
>>>>>>> possible to
>>>>>>> look at the flags, their values and how they were set through 
>>>>>>> JMC. It
>>>>>>> might be confusing for a user if they've set NewSize on the 
>>>>>>> command line
>>>>>>> to one value, but JMC reports that it was set to an other value 
>>>>>>> on the
>>>>>>> command line.
>>>>>>>
>>>>>>> Makes sense?
>>>>>>
>>>>>> I see the problem but I still don't like this fix.   My preferences
>>>>>> would be to either
>>>>>>
>>>>>> 1) fix Flags
>>>>>> 2) set NewSize without changing the Flags and document the 
>>>>>> possible JMC
>>>>>> confusion
>>>>> Of your suggested solutions I like this one best, it is what I 
>>>>> initially had
>>>>> in mind before starting to think about how the flags are presented 
>>>>> to users.
>>>>> Here is the updated webrev:
>>>>> http://cr.openjdk.java.net/~sjohanss/8035057/webrev.01
>>>>>
>>>>> Jesper, are you fine with this change as well?
>>>>>
>>>>> I will also do some additional testing tomorrow to verify that 
>>>>> this doesn't
>>>>> break anything else.
>>>>>
>>>>>> 3) leave it until Flags can be fixed
>>>>>>
>>>>>> It's a P5.   We don't have to fix it if we're creating technical 
>>>>>> debt in
>>>>>> the fix.
>>>>> do think we need to fix the flags asap, in 9 the latest. It would 
>>>>> be fairly easy to change the code to remember all states for a 
>>>>> flag, so that if a flag is set on the command line and later 
>>>>> changed by the ergonomics, it would reply true to both 
>>>>> FLAG_IS_CMDLINE and FLAG_IS_ERGO. There are a couple of cases that 
>>>>> would be greatly simplified if we make tIt's a P5 but part of the 
>>>>> zero-failure project so a fix sooner rather than
>>>>> later would be nice.
>>>>>
>>>>> Thanks for all you input on this Jon,
>>>>> Stefan
>>>>>>
>>>>>> Jon
>>>>>>
>>>>>>>
>>>>>>> Stefan
>>>>>>>>
>>>>>>>> Jon
>>>>>>>>
>>>>>>>>>
>>>>>>>>> Stefan
>>>>>>>>>
>>>>>>>>>> Jon
>>>>>>>>>>
>>>>>>>>>> On 2/20/14 8:52 AM, Stefan Johansson wrote:
>>>>>>>>>>> Hi,
>>>>>>>>>>>
>>>>>>>>>>> Can I please have some reviews for this small fix for:
>>>>>>>>>>> https://bugs.openjdk.java.net/browse/JDK-8035057
>>>>>>>>>>>
>>>>>>>>>>> Webrev:
>>>>>>>>>>> http://cr.openjdk.java.net/~sjohanss/8035057/
>>>>>>>>>>>
>>>>>>>>>>> Summary:
>>>>>>>>>>> When fixing JDK-8033426, the case when NewSize is set on the 
>>>>>>>>>>> command
>>>>>>>>>>> line but not aligned was not handled. This small change 
>>>>>>>>>>> makes sure
>>>>>>>>>>> that if NewSize is given on the command line we will align 
>>>>>>>>>>> the value
>>>>>>>>>>> and use it as both initial and minimum young generation size.
>>>>>>>>>>>
>>>>>>>>>>> Testing:
>>>>>>>>>>> * Build on JPRT.
>>>>>>>>>>> * Manual sanity testing.
>>>>>>>>>>>
>>>>>>>>>>> Thanks,
>>>>>>>>>>> Stefan
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>




More information about the hotspot-gc-dev mailing list