RFR: 8257220: [JVMCI] option validation should not result in a heavy-weight VM crash

Doug Simon dnsimon at openjdk.java.net
Mon Nov 30 22:54:00 UTC 2020


On Mon, 30 Nov 2020 22:37:29 GMT, Vladimir Kozlov <kvn at openjdk.org> wrote:

>> As a result of [JDK-8253228](https://bugs.openjdk.java.net/browse/JDK-8253228), a heavy-weight VM crash occurs for incorrectly specified JVMCI options. For example:
>>> java -XX:+UnlockExperimentalVMOptions -XX:+EagerJVMCI -XX:+UseJVMCICompiler -Djvmci.InitTiimer=true
>> Uncaught exception exiting JVMCIEnv scope entered at src/hotspot/share/jvmci/jvmciRuntime.cpp:626
>> java.lang.IllegalArgumentException: Could not find option jvmci.InitTiimer
>> Did you mean one of the following?
>>     jvmci.InitTimer=<value>
>> at jdk.vm.ci.hotspot.HotSpotJVMCIRuntime$Option.parse(jdk.internal.vm.ci/HotSpotJVMCIRuntime.java:405)
>> at jdk.vm.ci.hotspot.HotSpotJVMCIRuntime.<init>(jdk.internal.vm.ci/HotSpotJVMCIRuntime.java:534)
>> at jdk.vm.ci.hotspot.HotSpotJVMCIRuntime.runtime(jdk.internal.vm.ci/HotSpotJVMCIRuntime.java:174)
>> at jdk.vm.ci.runtime.JVMCI.initializeRuntime(jdk.internal.vm.ci/Native Method)
>> at jdk.vm.ci.runtime.JVMCI.getRuntime(jdk.internal.vm.ci/JVMCI.java:65)
>> #
>> # A fatal error has been detected by the Java Runtime Environment:
>> #
>> # Internal Error (jvmciRuntime.cpp:1102), pid=55794, tid=7939
>> # fatal error: Fatal exception in JVMCI: Uncaught exception exiting JVMCIEnv scope entered at src/hotspot/share/jvmci/jvmciRuntime.cpp:626
>> #
>> # JRE version: OpenJDK Runtime Environment (16.0) (build 16-internal+0-adhoc.dnsimon.open)
>> # Java VM: OpenJDK 64-Bit Server VM (16-internal+0-adhoc.dnsimon.open, mixed mode, tiered, jvmci, jvmci compiler, compressed oops, g1 gc, bsd-amd64)
>> # No core dump will be written. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
>> #
>> # An error report file with more information is saved as:
>> # /Users/dnsimon/jdk-jdk/open/hs_err_pid55794.log
>> #
>> # If you would like to submit a bug report, please visit:
>> # https://bugreport.java.com/bugreport/crash.jsp
>> #
>> fish: 'build/macosx-x86_64-server-rele…' terminated by signal SIGABRT (Abort)
>> 
>> This is too heavy-weight. This PR makes it similar to how incorrectly specified -XX options are reported:
>> 
>>>  java -XX:+UnlockExperimentalVMOptions -XX:+EagerJVMCI -XX:+UseJVMCICompiler -Djvmci.InitTiimer=true
>> Error parsing JVMCI options: Could not find option jvmci.InitTiimer
>> Did you mean one of the following?
>>     jvmci.InitTimer=<value>
>> Error: A fatal exception has occurred. Program will exit.
>
> @dougxc  I still got crash with -Xcomp:
> java -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI -XX:+UseJVMCICompiler -Xcomp -version
> Exception during JVMCI compiler initialization
> jdk.vm.ci.common.JVMCIError: no JVMCI compiler selected: default compiler is not found
> 	at jdk.vm.ci.hotspot.HotSpotJVMCICompilerConfig$DummyCompilerFactory.compileMethod(jdk.internal.vm.ci at 16-internal/HotSpotJVMCICompilerConfig.java:58)
> 	at jdk.vm.ci.hotspot.HotSpotJVMCICompilerConfig$DummyCompilerFactory.compileMethod(jdk.internal.vm.ci at 16-internal/HotSpotJVMCICompilerConfig.java:48)
> 	at jdk.vm.ci.hotspot.HotSpotJVMCIRuntime.compileMethod(jdk.internal.vm.ci at 16-internal/HotSpotJVMCIRuntime.java:807)
> # To suppress the following error report, specify this argument
> # after -XX: or in .hotspotrc:  SuppressErrorAt=/jvmciRuntime.cpp:1102
> #
> # A fatal error has been detected by the Java Runtime Environment:
> #
> #  Internal Error (/jdk_git/open/src/hotspot/share/jvmci/jvmciRuntime.cpp:1102), pid=3015811, tid=3015824
> #  fatal error: Fatal exception in JVMCI: Exception during JVMCI compiler initialization
> #
> # JRE version: Java(TM) SE Runtime Environment (16.0) (fastdebug build 16-internal+0-2020-11-30-2007459.vkozlov...)
> # Java VM: Java HotSpot(TM) 64-Bit Server VM (fastdebug 16-internal+0-2020-11-30-2007459.vkozlov..., compiled mode, sharing, tiered, jvmci, jvmci compiler, compressed oops, g1 gc, linux-amd64)
> # Problematic frame:
> # V  [libjvm.so+0x116b950]  JVMCIRuntime::fatal_exception(JVMCIEnv*, char const*)+0x90
> #
> # Core dump will be written. Default location: Core dumps may be processed with "/usr/share/apport/apport %p %s %c %d %P %E" (or dumping to /jdk_git/core.3015811)
> #
> # An error report file with more information is saved as:
> # /jdk_git/hs_err_pid3015811.log

This PR was about improving the failure mode when incorrect `-Djvmci` properties are specified.
The case you are highlighting is when misconfiguration happens with JVMCI related VM flags. In this case, I guess JVMCI initialization could detect the conflict between `-XX:+UseJVMCICompiler` and the lack of a JVMCI compiler in the VM (now the default).

-------------

PR: https://git.openjdk.java.net/jdk/pull/1487


More information about the hotspot-compiler-dev mailing list