Fwd: Large page use crashes the JVM on some Linux systems
Vicente Romero
vicente.romero at oracle.com
Mon Apr 23 19:37:21 UTC 2018
forwarding to hotspot-dev
-------- Forwarded Message --------
Subject: Large page use crashes the JVM on some Linux systems
Date: Sun, 22 Apr 2018 23:18:50 +0200
From: B. Blaser <bsrbnd at gmail.com>
To: amber-dev at openjdk.java.net
[ I've trouble subscribing to hotspot-dev, please forward if necessary. ]
Hi,
After a clean build, some hotspot tests related to large page use are
failing on my 64-bit Linux system, for example:
gc/g1/TestLargePageUseForAuxMemory.java
[...]
Or simply:
$ ./build/linux-x86_64-normal-server-release/images/jdk/bin/java
-XX:+UseLargePages -version
is crashing the JVM because the latter assumes that large pages are
always supported on Linux, which appears to be wrong.
I suggest to make sure that large pages are supported when parsing the
arguments, as below.
Does this look reasonable (tier1 looks better now)?
Thanks,
Bernard
diff -r 8c85a1855e10 src/hotspot/share/runtime/arguments.cpp
--- a/src/hotspot/share/runtime/arguments.cpp Fri Apr 13 11:14:49 2018 -0700
+++ b/src/hotspot/share/runtime/arguments.cpp Sun Apr 22 20:29:21 2018 +0200
@@ -60,6 +60,7 @@
#include "utilities/defaultStream.hpp"
#include "utilities/macros.hpp"
#include "utilities/stringUtils.hpp"
+#include "sys/mman.h"
#if INCLUDE_JVMCI
#include "jvmci/jvmciRuntime.hpp"
#endif
@@ -4107,6 +4108,18 @@
UNSUPPORTED_OPTION(UseLargePages);
#endif
+#ifdef LINUX
+ void *p = mmap(NULL, os::large_page_size(), PROT_READ|PROT_WRITE,
+ MAP_ANONYMOUS|MAP_PRIVATE|MAP_HUGETLB,
+ -1, 0);
+ if (p != MAP_FAILED) {
+ munmap(p, os::large_page_size());
+ }
+ else {
+ UNSUPPORTED_OPTION(UseLargePages);
+ }
+#endif
+
ArgumentsExt::report_unsupported_options();
#ifndef PRODUCT
diff -r 8c85a1855e10
test/hotspot/jtreg/runtime/memory/LargePages/TestLargePagesFlags.java
--- a/test/hotspot/jtreg/runtime/memory/LargePages/TestLargePagesFlags.java
Fri Apr 13 11:14:49 2018 -0700
+++ b/test/hotspot/jtreg/runtime/memory/LargePages/TestLargePagesFlags.java
Sun Apr 22 20:29:21 2018 +0200
@@ -37,7 +37,7 @@
public class TestLargePagesFlags {
public static void main(String [] args) throws Exception {
- if (!Platform.isLinux()) {
+ if (!Platform.isLinux() || !canUse(UseLargePages(true))) {
System.out.println("Skipping. TestLargePagesFlags has only been
implemented for Linux.");
return;
}
More information about the hotspot-dev
mailing list