RFR: 6515172: Runtime.availableProcessors() ignores Linux taskset command
Daniel D. Daugherty
daniel.daugherty at oracle.com
Wed Jan 27 17:40:24 UTC 2016
On 1/27/16 12:16 AM, David Holmes wrote:
> Okay here is v2:
>
> http://cr.openjdk.java.net/~dholmes/6515172/webrev.v2/
Reviewed by comparing the two patch files. Looks good modulo
one question: should the change to src/share/vm/runtime/globals.hpp
be in src/os/linux/vm/globals_linux.hpp instead?
Dan
>
> - UseNewCode is replaced by a new experimental flag UseCpuAllocPath
> - the logging statement shows whether the path was forced to be taken
> - this is now enabled in product builds
>
> Sorry I don't know how to generate an incremental webrev when working
> with uncommitted changes. :(
>
> Thanks,
> David
>
> On 27/01/2016 9:20 AM, Gerald Thornbrugh wrote:
>> Hi David,
>>
>> I also like the idea of using an "-XX" option, that seems like the best
>> way to go.
>>
>> I am ok with leaving the code in. If there are any issues with the code
>> we can always
>> create a bug and remove it.
>>
>> Jerry
>>> On 1/26/16 2:12 PM, David Holmes wrote:
>>>> Update ...
>>>>
>>>> On 22/01/2016 6:06 PM, David Holmes wrote:
>>>>> First a special thanks to Martin Buchholz for his input, feedback,
>>>>> critique and raising awareness of how non-simple this issue is.
>>>>>
>>>>> bug: https://bugs.openjdk.java.net/browse/JDK-6515172
>>>>> webrev: http://cr.openjdk.java.net/~dholmes/6515172/webrev/
>>>>>
>>>>> Basic problem:
>>>>> processors available for use <= processors online <= processors
>>>>> configured
>>>>>
>>>>> but we always returned the number of online processors.
>>>>>
>>>>> Solution is simple in its basic form: use sched_getaffinity to get
>>>>> the
>>>>> scheduling affinity mask and count the number of available
>>>>> processors.
>>>>>
>>>>> Details are complicated by the desire to handle very large processor
>>>>> systems. See the bug report for lots of detailed discussions and
>>>>> references.
>>>>>
>>>>> Testing:
>>>>> - new test that verifies behaviour when running under taskset
>>>>> - diagnostic hook injection (UseNewCodeN) to enable testing of all
>>>>> code paths (one hook is left in for non-product to allow easy
>>>>> testing of
>>>>> the dynamic path)
>>>>
>>>> I have been told that using the development flag UseNewCode in
>>>> released code is a bad idea because it is used internally during
>>>> development (as per its defined purpose).
>>>>
>>>> I would like to be able to test the dynamic path easily, but I didn't
>>>> want to pay the price of adding a new VM option to do it. So choices
>>>> are:
>>>>
>>>> a) don't do anything (remove the UseNewCode check)
>>>> b) add a new diagnostic flag
>>>> c) add a new experimental flag
>>>
>>> My vote:
>>>
>>> -XX:+UnlockExperimentalVMOptions -XX:+DynamicConfiguredCPUPath
>>>
>>> With a plan (and a bug) to remove that option down the road.
>>>
>>> And a code review.
>>>
>>> src/os/linux/vm/os_linux.cpp
>>> No comments.
>>>
>>> src/share/vm/logging/logTag.hpp
>>> No comments.
>>>
>>> test/runtime/os/AvailableProcessors.java
>>> Nice test. I like that the default (no args) runs a set of tests
>>> and if you (manually) run the test with a specific arg it will
>>> check just that one value.
>>>
>>> Thumbs up! (Assuming you change UseNewCode to something else or
>>> delete its use all together.
>>>
>>> Dan
>>>
>>>
>>>>
>>>> Thoughts?
>>>>
>>>> Thanks,
>>>> David
>>>>
>>>>
>>>>> - JPRT
>>>>>
>>>>> Compatability issues:
>>>>> - the system code we're using now is at least 5 years old so distro's
>>>>> older than that (which are not officially supported) may not work
>>>>> - anyone already running under a processor constrained environment
>>>>> (like
>>>>> Docker) and using availableProcessor() to "size" things, will find
>>>>> that
>>>>> size has now changed. We do not expect this to be a problem - on the
>>>>> contrary we expect Docker users to want the new behaviour.
>>>>>
>>>>> Thanks,
>>>>> David
>>>
>>
More information about the hotspot-runtime-dev
mailing list