Turn on UseNUMA by default when prudent

Eric Caspole eric.caspole at amd.com
Thu May 31 15:05:50 UTC 2012


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