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

Stefan Johansson stefan.johansson at oracle.com
Wed Mar 5 18:01:28 UTC 2014


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?

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.
>>>> I 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.
>> It'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