RFR (S): 7198334: UseNUMA modifies system parameters on non-NUMA system
Erik Helin
erik.x.helin at oracle.com
Mon Oct 29 07:29:22 PDT 2012
Hi everyone,
the webrev can be found at:
http://cr.openjdk.java.net/~jwilhelm/7198334/webrev/
Summary:
The bug existed because the function 'Arguments::parse' changed the
value of the flags 'UseNUMAInterleaving' and 'MinHeapDeltaBytes'
depending on the value of the flag 'UseNUMA'.
The problem was that the function 'os::init_2' checks if NUMA is
supported on the system, and if it is not supported, sets 'UseNUMA' to
'false'.
Since 'Arguments::parse' is called before 'os::init_2' in the function
'Threads::create_vm', the result was that 'UseNUMA' was set to false and
'UseNUMAInterleaving' and 'MinHeapDeltaBytes' were incorrectly
modified.
The fix splits the function 'Arguments::parse' into three functions:
- 'Arguments::parse' now only parses the arguments.
- 'Arguments::adjust_before_os' adjusts the flags that must be adjusted
*before* 'os::init_after_parsing_flags'.
- 'Arguments::adjust_after_os' adjusts the flags that must be adjusted
*after* 'os::init_after_parsing_flags'.
Note that three functions are necessary since the flag 'UseLargePages'
has to be adjusted *before* 'os::init_2' is called.
This change also renames 'os::init' to 'os::init_before_parsing_flags'
and 'os::init_2' to 'os::init_after_parsing_args'. This was done to try
to make the relationship between the functions in 'Arguments' and the
functions in 'os' as clear as possible.
Testing:
JPRT
Also, running 'java -XX:+UseNUMA -XX:+PrintFlagsFinal -version' on a
system that does not support NUMA shows that 'UseNUMAInterleaving' and
'MinHeapDeltaBytes' now have correct values.
Thanks,
Erik
More information about the hotspot-dev
mailing list