Turn on UseNUMA by default when prudent

Jesper Wilhelmsson jesper.wilhelmsson at oracle.com
Fri Jun 1 11:43:33 UTC 2012


This looks OK to me.
/Jesper


On 2012-05-31 17:05, Eric Caspole wrote:
> OK, I removed the warning, see
>
> http://cr.openjdk.java.net/~ecaspole/numa_default_3/
>
> Thanks,
> Eric
>
>
> On May 30, 2012, at 4:58 PM, Vladimir Kozlov wrote:
>
>> We issue a warning only if something is not right which not the case here:
>>
>> + warning("Turned on UseNUMA in os::init_2");
>>
>> otherwise looks good.
>>
>> Vladimir
>>
>> Eric Caspole wrote:
>>> I put a much simpler, still linux only rev at
>>> http://cr.openjdk.java.net/~ecaspole/numa_default_2/
>>> Simply doing UseNUMA on by default might work but there are so many
>>> os/platforms to consider it's more than I can try to test.
>>> Eric
>>> On May 30, 2012, at 4:14 PM, Jesper Wilhelmsson wrote:
>>>> On 2012-05-30 20:41, Igor Veresov wrote:
>>>>> Actually UseNUMA should already do what you want. Even if specified on
>>>>> the command line it will switch itself off if there's only one node present.
>>>>
>>>> So, will setting UseNUMA to true as default be a platform independent way
>>>> of solving this?
>>>> /Jesper
>>>>
>>>>>
>>>>> igor
>>>>>
>>>>> On May 30, 2012, at 12:27 AM, Thomas Schatzl wrote:
>>>>>
>>>>>> Hi all,
>>>>>>
>>>>>> On Tue, 2012-05-29 at 21:56 +0200, Jesper Wilhelmsson wrote:
>>>>>>> Hi Eric,
>>>>>>>
>>>>>>> As long as this is based on actual data and not just a hunch, I personally
>>>>>>> think it is a good idea. I don't know if we have any policies about
>>>>>>> platform
>>>>>>> specific optimizations like this though.
>>>>>>>
>>>>>>> I have some comments on the code layout and there are a few typos, but
>>>>>>> I guess
>>>>>>> this is still a draft so I won't pick on that right now.
>>>>>>>
>>>>>>> One thing I wonder though is in os_linux_x86.cpp:
>>>>>>>
>>>>>>> if (VM_Version::cpu_family() == 0x15 || VM_Version::cpu_family() ==
>>>>>>> 0x10) {
>>>>>>>
>>>>>>> Is this the only way to identify the proper processor family? It
>>>>>>> doesn't seem
>>>>>>> very future proof. How often would you have to change this code to keep
>>>>>>> it up
>>>>>>> to date with new hardware?
>>>>>> just a question, if this is implemented, wouldn't it more prudent to
>>>>>> actually check whether the VM process runs on a NUMA machine, and
>>>>>> actually has its computing (or memory) resources distributed across
>>>>>> several nodes instead of a check for some arbitrary processors and
>>>>>> processor identifiers?
>>>>>>
>>>>>> This would, given that the OS typically provides this information
>>>>>> anyway, also immediately support e.g. sparc setups. It also avoids
>>>>>> distributing memory when the user explicitly assigned the VM to a single
>>>>>> node...
>>>>>>
>>>>>>> From memory, on solaris above mentioned detection works approximately as
>>>>>> follows:
>>>>>>
>>>>>> - detect the total amount of leaf locality groups (=nodes on Solaris)
>>>>>> in the system, e.g. via lgrp_nlgrps()
>>>>>> - from the root node (retrieved via lgrp_root()), iterate over its
>>>>>> children and leaf lgroups via lgrp_children().
>>>>>> - for each of the leaf lgroups found, check whether there is an
>>>>>> active cpu for this process in it using lgrp_cpus(); if so, increment
>>>>>> counter
>>>>>>
>>>>>> Maybe there is a better way to do that though.
>>>>>>
>>>>>> On Linux, numa_get_run_node_mask() may provide the same information when
>>>>>> called during initialization.
>>>>>> On Windows, it seems that a combination of GetProcessAffinityMask() and
>>>>>> GetNUMAProcessorNode() may be useful.
>>>>>> (From a cursory web search for the latter two; not sure about other
>>>>>> OSes, but you could simply provide a dummy for those)
>>>>>>
>>>>>> I'd guess that some of the needed functionality to implement this is
>>>>>> already provided by the current Hotspot code base.
>>>>>>
>>>>>>
>>>>>> Ergonomics stuff is typically handled in runtime/arguments.?pp, so it
>>>>>> might be a better place as a location for updating globals than putting
>>>>>> this detection in some os-specific initialization code.
>>>>>>
>>>>>> Eg.
>>>>>>
>>>>>> if (FLAG_IS_DEFAULT(UseNUMA)) {
>>>>>> UseNUMA := [maybe some other conditions&&]
>>>>>> (os::get_num_active_numa_nodes()> 1);
>>>>>> }
>>>>>>
>>>>>> in e.g. Arguments::set_ergonomics_flags() or similar.
>>>>>>
>>>>>> Seems a lot nicer than an explicit check for some processor family.
>>>>>> Maybe a little more work though.
>>>>>>
>>>>>> Hth,
>>>>>> Thomas
>>>>>>
>>>>>>
>>>>>> <jesper_wilhelmsson.vcf>
>>
>
>



More information about the hotspot-gc-dev mailing list