RFR: 8242440: use separate, destroyable JavaVM instances per libgraal compiler thread [v3]
Vladimir Kozlov
kvn at openjdk.java.net
Wed Apr 20 20:59:26 UTC 2022
On Tue, 19 Apr 2022 10:17:14 GMT, Doug Simon <dnsimon at openjdk.org> wrote:
>> Currently, libgraal runs in a single, permanent JavaVM instance loaded from libjvmcicompiler.so. This poses 2 problems:
>>
>> 1. The memory used for libgraal is never released, even when the libgraal compiler queues are idle.
>> 2. Since all libgraal HotSpot compiler threads share the same SVM heap, libgraal compilation is effectively paused when a GC occurs (SVM currently has a stop the world collector). The more compiler threads there are, the more often this happens.
>>
>> This PR implements the following solution to these problems:
>> 1. Create a new JavaVM instance per libgraal compiler thread (i.e. a separate SVM isolate per thread). This prevents GC in one libgraal thread from impacting another libgraal thread.
>> 2. Destroy the JavaVM instances when a libgraal compiler thread becomes idle and create a new one when subsequent compilation requests arrive.
>>
>> Most of the changes are in JVMCI specific files. The most significant change to shared code is the addition of the `JavaThread:: _libjvmci_runtime` field. This is required as any thread (not just a `CompilerThread`) can be associated with a specific `JVMCIRuntime` object.
>
> Doug Simon has updated the pull request incrementally with one additional commit since the last revision:
>
> removed (incorrect) volatile modifier from JVMCIRuntime::_shared_library_javavm
Preliminary comment. I agree with David that calling additional library `JavaVM` is confusing and is not correct. This is SVM: "The former each encapsulate a single SubstrateVM runtime".
May be you should called as such in code and comments.
src/hotspot/share/jvmci/jvmci_globals.hpp line 64:
> 62: "Max number of threads per JVMCI native runtime. " \
> 63: "Specify 0 to force use of a single JVMCI native runtime. ") \
> 64: range(0, max_jint) \
Does it mean that value `0` has the same effect as `1`?
-------------
PR: https://git.openjdk.java.net/jdk/pull/8262
More information about the hotspot-dev
mailing list