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

David Holmes david.holmes at oracle.com
Fri Jan 22 08:06:05 UTC 2016

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 

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.

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


More information about the hotspot-runtime-dev mailing list