RFR: 8306992: [JVMCI] mitigate more against JVMCI related OOME causing VM to exit [v5]

Doug Simon dnsimon at openjdk.org
Mon May 22 16:11:51 UTC 2023


On Mon, 22 May 2023 16:06:31 GMT, Doug Simon <dnsimon at openjdk.org> wrote:

>> This PR makes the following changes to mitigate against an OOME or other recoverable error in JVMCI from causing the VM to exit:
>> * Tracks upcalls into libjvmci or creation of libjvmci.
>> * If 10% or more of these calls fail with an uncaught exception, then JVMCI compilation is disabled (i.e. future compilations fall back to Tier 1).
>> 
>> When JVMCI compilation is disabled, a warning is emitted:
>> 
>> [0.064s][warning][jit,compilation] JVMCI compiler disabled after 11 of 15 upcalls had errors (Last error: "uncaught exception in call_HotSpotJVMCIRuntime_compileMethod"). Use -Xlog:jit+compilation for more detail.
>> 
>> 
>> With `-Xlog:jit+compilation`, the extra detail shown is:
>> 
>> [0.182s][info][jit,compilation] uncaught exception in call_HotSpotJVMCIRuntime_compileMethod while compiling java.util.stream.StreamOpFlag.fromCharacteristics(Ljava/util/Spliterator;)I
>> Exception in thread "JVMCI-native CompilerThread0": java.lang.InternalError
>> java.lang.InternalError: aborting compilation of HotSpotMethod<Object.<init>()>
>> 	at jdk.internal.vm.ci at 20.0.2-internal/jdk.vm.ci.hotspot.HotSpotJVMCIRuntime.compileMethod(HotSpotJVMCIRuntime.java:923)
>> 
>> 
>> Note that the errors treated by the changes in the PR are expected to be exceedingly rare. For example, an OOME while starting a libgraal isolate or initializing the JVMCI compiler. Exceptions thrown during compilation are already handled by the Graal [CompilationWrapper](https://github.com/oracle/graal/blob/431ecf7d26f56cee49708854fe0e89b05514492b/compiler/src/jdk.internal.vm.compiler/src/org/graalvm/compiler/core/CompilationWrapper.java#L65).
>
> Doug Simon has updated the pull request incrementally with one additional commit since the last revision:
> 
>   [skip ci] update copyright headers

src/hotspot/share/jvmci/jvmciRuntime.cpp line 1233:

> 1231:   JavaVM* javaVM = _shared_library_javavm;
> 1232:   if (javaVM == nullptr) {
> 1233:     const char* val = Arguments::PropertyList_get_value(Arguments::system_properties(), "test.jvmci.forceEnomemOnLibjvmciInit");

Note that this view on system properties is restricted to properties set at VM startup (e.g. on the command line) and will not see the result of calls to `System.setProperty()` made by an application.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/13905#discussion_r1200728362


More information about the hotspot-compiler-dev mailing list