UseNUMA does not check which cpu nodes are bound to the JVM processes before spreading the Java heap across regions for each node.
If the JVM isn't allowed to run on all of the nodes (by numactl, cgroups, docker, etc), then a significant fraction of the Java heap will be unusable, causing early GC.
This was seen on linux aarch64, using ParallelGC, but this doesn't look aarch64-specific. This is in JDK 9 /10 (probably always).
For both linux and BSD, the numa_interleave_memory() function explicitly interleaves across "numa_all_nodes".
If the JVM isn't allowed to run on all of the nodes (by numactl, cgroups, docker, etc), then a significant fraction of the Java heap will be unusable, causing early GC.
This was seen on linux aarch64, using ParallelGC, but this doesn't look aarch64-specific. This is in JDK 9 /10 (probably always).
For both linux and BSD, the numa_interleave_memory() function explicitly interleaves across "numa_all_nodes".
- relates to
-
JDK-8346827 com/sun/jdi/ProcessAttachTest.java and com/sun/jdi/ReattachStressTest.java failing with -XX:+UseNUMA
-
- Closed
-
-
JDK-8189922 UseNUMA memory interleaving vs membind
-
- Resolved
-
-
JDK-8346834 Tests failing with -XX:+UseNUMA due to "NUMA support disabled" warning
-
- Resolved
-
-
JDK-8213827 NUMA heap allocation does not respect process membind/interleave settings
-
- Resolved
-
- links to
-
Commit(master) openjdk/jdk/62a4544b
-
Review(master) openjdk/jdk/22395
(1 links to)