-
Bug
-
Resolution: Fixed
-
P4
-
None
-
b11
-
linux
Issue | Fix Version | Assignee | Priority | Status | Resolution | Resolved In Build |
---|---|---|---|---|---|---|
JDK-8337725 | 21.0.5 | Christoph Langer | P4 | Resolved | Fixed | b02 |
Problem:
When THP is enabled, JDK reads /sys/kernel/mm/transparent_hugepage/hpage_pmd_size file to detect large page size. However this file only appeared in kernel 4.10 and does not exist on kernel old kernels (such as 3.10 used by RHEL-7).
This results in detected large page size of 0B and crash, when -XX:+UseTransparentHugePages is used on old kernel.
gdb --args jdk-23+6/bin/java -XX:+UseTransparentHugePages -Xmx128m -Xlog:pagesize -version
...
[0.005s][info][pagesize] Static hugepage support:
[0.005s][info][pagesize] hugepage size: 2M
[0.005s][info][pagesize] hugepage size: 1G
[0.005s][info][pagesize] default hugepage size: 2M
[0.005s][info][pagesize] Transparent hugepage (THP) support:
[0.005s][info][pagesize] THP mode: always
[0.005s][info][pagesize] THP pagesize: 0B
[0.005s][info][pagesize] Shared memory transparent hugepage (THP) support:
[0.005s][info][pagesize] Shared memory THP mode: unknown
[0.005s][info][pagesize] JVM will attempt to prevent THPs in thread stacks.
[0.005s][info][pagesize] UseLargePages=1, UseTransparentHugePages=1
[0.005s][info][pagesize] Large page support enabled. Usable page sizes: 4k. Default large page size: 0B.
Program received signal SIGFPE, Arithmetic exception.
[Switching to Thread 0x7ffff7fc2700 (LWP 31385)]
0x00007ffff68eeb20 in lcm(unsigned long, unsigned long) () from /home/tester/jdk-23+6/lib/server/libjvm.so
(gdb) bt
#0 0x00007ffff68eeb20 in lcm(unsigned long, unsigned long) () from /home/tester/jdk-23+6/lib/server/libjvm.so
#1 0x00007ffff64a68f2 in Arguments::apply_ergo() () from /home/tester/jdk-23+6/lib/server/libjvm.so
#2 0x00007ffff700458f in Threads::create_vm(JavaVMInitArgs*, bool*) () from /home/tester/jdk-23+6/lib/server/libjvm.so
#3 0x00007ffff6a2373f in JNI_CreateJavaVM () from /home/tester/jdk-23+6/lib/server/libjvm.so
#4 0x00007ffff7fe704b in InitializeJVM (ifn=<synthetic pointer>, penv=0x7ffff7fc1ea8, pvm=0x7ffff7fc1ea0) at src/java.base/share/native/libjli/java.c:1550
#5 JavaMain (_args=<optimized out>) at src/java.base/share/native/libjli/java.c:491
#6 0x00007ffff7feb1c9 in ThreadJavaMain (args=<optimized out>) at src/java.base/unix/native/libjli/java_md.c:650
#7 0x00007ffff7bc6ea5 in start_thread (arg=0x7ffff7fc2700) at pthread_create.c:307
#8 0x00007ffff76ebb0d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:111
When THP is enabled, JDK reads /sys/kernel/mm/transparent_hugepage/hpage_pmd_size file to detect large page size. However this file only appeared in kernel 4.10 and does not exist on kernel old kernels (such as 3.10 used by RHEL-7).
This results in detected large page size of 0B and crash, when -XX:+UseTransparentHugePages is used on old kernel.
gdb --args jdk-23+6/bin/java -XX:+UseTransparentHugePages -Xmx128m -Xlog:pagesize -version
...
[0.005s][info][pagesize] Static hugepage support:
[0.005s][info][pagesize] hugepage size: 2M
[0.005s][info][pagesize] hugepage size: 1G
[0.005s][info][pagesize] default hugepage size: 2M
[0.005s][info][pagesize] Transparent hugepage (THP) support:
[0.005s][info][pagesize] THP mode: always
[0.005s][info][pagesize] THP pagesize: 0B
[0.005s][info][pagesize] Shared memory transparent hugepage (THP) support:
[0.005s][info][pagesize] Shared memory THP mode: unknown
[0.005s][info][pagesize] JVM will attempt to prevent THPs in thread stacks.
[0.005s][info][pagesize] UseLargePages=1, UseTransparentHugePages=1
[0.005s][info][pagesize] Large page support enabled. Usable page sizes: 4k. Default large page size: 0B.
Program received signal SIGFPE, Arithmetic exception.
[Switching to Thread 0x7ffff7fc2700 (LWP 31385)]
0x00007ffff68eeb20 in lcm(unsigned long, unsigned long) () from /home/tester/jdk-23+6/lib/server/libjvm.so
(gdb) bt
#0 0x00007ffff68eeb20 in lcm(unsigned long, unsigned long) () from /home/tester/jdk-23+6/lib/server/libjvm.so
#1 0x00007ffff64a68f2 in Arguments::apply_ergo() () from /home/tester/jdk-23+6/lib/server/libjvm.so
#2 0x00007ffff700458f in Threads::create_vm(JavaVMInitArgs*, bool*) () from /home/tester/jdk-23+6/lib/server/libjvm.so
#3 0x00007ffff6a2373f in JNI_CreateJavaVM () from /home/tester/jdk-23+6/lib/server/libjvm.so
#4 0x00007ffff7fe704b in InitializeJVM (ifn=<synthetic pointer>, penv=0x7ffff7fc1ea8, pvm=0x7ffff7fc1ea0) at src/java.base/share/native/libjli/java.c:1550
#5 JavaMain (_args=<optimized out>) at src/java.base/share/native/libjli/java.c:491
#6 0x00007ffff7feb1c9 in ThreadJavaMain (args=<optimized out>) at src/java.base/unix/native/libjli/java_md.c:650
#7 0x00007ffff7bc6ea5 in start_thread (arg=0x7ffff7fc2700) at pthread_create.c:307
#8 0x00007ffff76ebb0d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:111
- backported by
-
JDK-8337725 SIGFPE on THP initialization on kernels < 4.10
-
- Resolved
-
- relates to
-
JDK-8325983 Build failure after JDK-8324580
-
- Resolved
-
- links to
-
Commit openjdk/jdk/a231706a
-
Commit(master) openjdk/jdk21u-dev/9cb36b2f
-
Review openjdk/jdk/17545
-
Review(master) openjdk/jdk17u-dev/2745
-
Review(master) openjdk/jdk21u-dev/840
(2 links to)