RFR (S): 7198334: UseNUMA modifies system parameters on non-NUMA system

Erik Helin erik.helin at oracle.com
Tue Nov 20 05:58:32 PST 2012


Thanks Jesper!

Erik

On 11/20/2012 02:56 PM, Jesper Wilhelmsson wrote:
> Looks good!
> Ship it!
> /Jesper
>
> On 11/20/12 9:44 AM, David Holmes wrote:
>> Thanks Erik, I have no further comments on this. :)
>>
>> You still need a second reviewer of course.
>>
>> Cheers,
>> David
>>
>> On 20/11/2012 7:19 AM, Erik Helin wrote:
>>> Hi David,
>>>
>>> first of all, sorry for my very late reply, I've had some serious
>>> technical issues with my email account.
>>>
>>> This is a reply to the following email:
>>> http://mail.openjdk.java.net/pipermail/hotspot-dev/2012-October/007128.html
>>>
>>>
>>> Unfortunately, my email address has been changed and I can't therefore
>>> reply correctly to the original email.
>>>
>>> I've uploaded a new, minimal webrev at:
>>> http://cr.openjdk.java.net/~mgerdin/JDK-7198334.1/
>>>
>>> On 10/30/2012 6 PM, David Holmes wrote:
>>>   >>  On 10/30/2012 04:29 AM, David Holmes wrote:
>>>   >>>  On 30/10/2012 12:29 AM, Erik Helin wrote:
>>>   >>>>  Since 'Arguments::parse' is called before 'os::init_2' in the
>>> function
>>>   >>>>  'Threads::create_vm', the result was that 'UseNUMA' was set to
>>> false and
>>>   >>>>  'UseNUMAInterleaving' and 'MinHeapDeltaBytes' were incorrectly
>>>   >>>>  modified.
>>>   >>>
>>>   >>>  Could we not simply adjust UseNUMAInterleaving and
>>> MinHeapDeltaBytes at
>>>   >>>  the same time as setting UseNUMA to false? Or move the setting of
>>>   >>>  UseNUMA to false out of os::init_2 into an earlier function -
>>> os::init
>>>   >>>  perhaps?
>>>   >>
>>>   >>  We could adjust UseNUMAInterleaving and MinHeapDeltaBytes in
>>> os::init_2
>>>   >>  which is responsible for setting UseNUMA to false. However, I
>>> don't
>>>   >>  think that os should adjust MinHeapDeltaBytes, which is a GC flag.
>>>   >
>>>   >  Ok, but in a similar style to what you have introduced, the
>>> os::init_2()
>>>   >  code could simply call Arguments::adjust_gc_args() (or some such
>>> name).
>>>   >
>>>   >  That said I don't think the factoring of the changes into
>>>   >  adjust_parallel_gc_flags_after_os() is warranted in the current
>>>   >  proposal. It isn't being called from multiple places, nor from any
>>>   >  Arguments client, so there's really no need to expand the
>>> Arguments API
>>>   >  this way.
>>>
>>> I agree, I've folded the update of the flags into the function
>>> adjust_after_os.
>>>
>>> On 10/30/2012 6 PM, David Holmes wrote:
>>>   >>  On 30/10/2012 12:29 AM, Erik Helin wrote:
>>>   >>  I agree, I moved too much functionality into
>>> Arguments::adjust_after_os.
>>>   >>
>>>   >>  I do not think that simply splitting Arguments::parse into two
>>>   >>  functions, Arguments::parse and Arguments::adjust_before_os is a
>>>   >>  disruptive change if Arguments::adjust_before_os ends up being
>>> called
>>>   >>  directly after Arguments::parse. In fact, this change is not
>>> needed, but
>>>   >>  I think it makes the code easier to understand.
>>>   >
>>>   >  I don't think it is completely clear what changes can be done in
>>> parse
>>>   >  versus what have to be deferred to adjust_before. So in my view
>>> this
>>>   >  split does not directly aid understandability. I do understand
>>> that as a
>>>   >  newcomer to the codebase this changes aids your understanding of
>>> the
>>> code.
>>>   >
>>>   >    From a pragmatic perspective such changes are highly
>>> subjective and
>>>   >  they add "noise" to the reviewing process.
>>>
>>> I agree with you that my change did too much. If (I'm not saying that it
>>> should) the code should be refactored, then it should be done in another
>>> change, not the same as the one for the bugfix.
>>>
>>> On 10/30/2012 6 PM, David Holmes wrote:
>>>   >>>>  On 29/10/2012 12:29 AM, Erik Helin wrote:
>>>   >>>>  This change also renames 'os::init' to
>>> 'os::init_before_parsing_flags'
>>>   >>>>  and 'os::init_2' to 'os::init_after_parsing_args'. This was done
>>> to try
>>>   >>>>  to make the relationship between the functions in 'Arguments'
>>> and the
>>>   >>>>  functions in 'os' as clear as possible.
>>>   >>>
>>>   >>>  On 10/30/2012 04:29 AM, David Holmes wrote:
>>>   >>>  A little too verbose though I think. Maybe os::init_pre_args()
>>> and
>>>   >>>  os::init_post_args() ? Though really the names are not that
>>> significant
>>>   >>>  given the comments both at the call site and declaration site
>>> of the
>>>   >>>  methods.
>>>   >>
>>>   >>  On 30/10/2012 12:29 AM, Erik Helin wrote:
>>>   >>  My idea was that the code should "speak for itself" and
>>> hopefully render
>>>   >>  the comments unnecessary, since comments sometimes can become
>>> outdated
>>>   >>  but code can't.
>>>   >
>>>   >  I am not a fan of "code speaking for itself" if the code "talks too
>>>   >  much" - that is why languages have comments. Speaking belongs in
>>>   >  comments. Code should be clear without being overly verbose, yet
>>>   >  succinct without being cryptic. And code can certainly become
>>> outdated
>>>   >  if that code is the name of a method. If the role of the method
>>> expands
>>>   >  then it is better to adapt a comment than to revise an API to
>>> rename a
>>>   >  method and update all callsites!
>>>
>>> I think this is a very interesting discussion, and think we should
>>> continue
>>> it "off-line", but I no longer think that it should be a part of the
>>> discussion for this change with the new minimal webrev (see top of
>>> email).
>>>
>>> On 10/30/2012 6 PM, David Holmes wrote:
>>>   >  If you did not do this renaming your webrev would be exceedingly
>>> short
>>>   >  compared to the current webrev, and your changes would only
>>> touch on GC
>>>   >  related bits of code. The renaming affects the OS API and that is
>>>   >  general runtime code. So I will defer to Karen as the owner of the
>>>   >  runtime code.
>>>
>>> I agree and I've updated the webrev accordingly, what do you think of
>>> the new one?
>>>
>>> Thanks for taking your time and reviewing this change,
>>> Erik
>>>
>>> On 10/30/2012 6 PM, David Holmes wrote:
>>>   >  Cheers,
>>>   >  David
>>>   >
>>>   >
>>>   >>
>>>   >>  On 30/10/2012 12:29 AM, Erik Helin wrote:
>>>   >>
>>>   >>>>  On 29/10/2012 12:29 AM, Erik Helin wrote:
>>>   >>>>  Testing:
>>>   >>>>  JPRT
>>>   >>>
>>>   >>>  On 10/30/2012 04:29 AM, David Holmes wrote:
>>>   >>>  JPRT will barely test anything related to argument processing.
>>>   >>
>>>   >>
>>>   >>  Ok, thank you for this information. Can you recommend a way to
>>> test this
>>>   >>  change?
>>>   >>
>>>   >>  Thanks,
>>>   >>  Erik
>>>   >>
>>>   >>>  David
>>>   >>>  -----
>>>   >>>
>>>   >>>>  On 29/10/2012 12:29 AM, Erik Helin wrote:
>>>   >>>>  Also, running 'java -XX:+UseNUMA -XX:+PrintFlagsFinal
>>> -version' on a
>>>   >>>>  system that does not support NUMA shows that
>>> 'UseNUMAInterleaving' and
>>>   >>>>  'MinHeapDeltaBytes' now have correct values.
>>>   >>>>
>>>   >>>>  Thanks,
>>>   >>>>  Erik
>



More information about the hotspot-dev mailing list