RFR: 6515172: Runtime.availableProcessors() ignores Linux taskset command

Daniel D. Daugherty daniel.daugherty at oracle.com
Tue Jan 26 21:47:12 UTC 2016

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.

     No comments.

     No comments.

     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.


> 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