To improve the out-of-the-box performance on NUMA hardware, enable the
-XX:+UseNUMA flag by default when the JVM detects it is running on a
NUMA style computer.
NUMA style systems are now common, but the JVM defaults have not been updated to reflect it. Applications generally get better performance with proper NUMA behavior, aided by the existing JVM capabilities, rather than relying on operating system defaults when running on a NUMA computer. Without proper NUMA behavior, applications may experience large run-to-run variation simply due to the memory layout given by operating system defaults.
The intent of this change is to enable the existing JVM capability turned
on by the
-XX:+UseNUMA option by using operating system APIs to detect
the NUMA topology at JVM boot time and turn on this support without the
user having to explicitly add
-XX:+UseNUMA to the flags.
To lower the impact on small applications there will be a minimum heap size required to enable NUMA. A reasonable limit is expected to be 2GB. There will be a new develop flag to set this value.
Other than the work required to detect the NUMA topology and set the flags, no further work to modify or extend existing NUMA features is intended by this JEP.
This change can be tested by standard benchmarks and application server test suites, on both NUMA and single node systems to ensure there are no unintended side effects.
Risks and Assumptions
The JDK source base supports several operating systems, so that increases the amount of testing required if all the operating systems will adopt this behavior.
- relates to
JDK-8243961 ForceNUMA and only one available NUMA node fails assertion on Windows
JDK-7179517 Enable NUMA by default on NUMA hardware
JDK-8244065 Implement NUMA support on Windows
JDK-8242459 ForceNUMA and only one available NUMA node hits a guarantee