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

Gerald Thornbrugh gerald.thornbrugh at oracle.com
Tue Jan 26 21:09:56 UTC 2016

Hi David,

Your code looks good. I do have a question about the test. If I 
understand the test correctly
the test will be run with no parameters and will use the "taskset" 
command to determine the
number of processors.

Under what circumstances will the test be run with arguments?

Was this something you added to allow the verification of the 
"availbleProcessors" method to
be done manually?

> 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)
>  - 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