On Mon, 12 Jun 2023 18:55:42 GMT, Doug Simon <[email protected]> wrote:
>> This PR reduces the amount of code executed during libgraal initialization.
>> This not only improves VM startup overall but all fixes a number of JDK test
>> failures that are caused by Java code executing "too early". For example,
>> `java/util/Locale/CompatWarning.java` can fail if
>> `sun.util.locale.provider.LocaleProviderAdapter` is initialized before the
>> `CheckWarning` handler is registered.
>>
>> Instead of serializing `VM.savedProps` via
>> `VMSupport.serializeSavedPropertiesToByteArray`, the
>> `jdk.vm.ci.services.Services` class now directly reads
>> `Arguments::system_properties()` using `Unsafe`. Furthermore, the value of a
>> system property is lazily converted to a `String` from a C string pointer.
>>
>> ## Times
>>
>> The basic benchmarking below shows that this change brings the time for a
>> nop Java app with eager libgraal initialization (2) down to almost the same
>> time as lazy libgraal initialization (1). The latter typically means no
>> libgraal initialization happens as a top tier JIT compilation is never
>> scheduled in such a short running app.
>>
>>
>> public class Nop {
>> public static void main(String[] args) {}
>> }
>>
>>
>> (1) Baseline (no options):
>>
>>> for i in (seq 10); java Nop; end
>> 0.05 real 0.04 user 0.01 sys
>> 0.04 real 0.03 user 0.01 sys
>> 0.04 real 0.03 user 0.01 sys
>> 0.04 real 0.03 user 0.01 sys
>> 0.03 real 0.03 user 0.00 sys
>> 0.04 real 0.03 user 0.01 sys
>> 0.04 real 0.03 user 0.00 sys
>> 0.03 real 0.03 user 0.00 sys
>> 0.04 real 0.03 user 0.01 sys
>> 0.03 real 0.03 user 0.00 sys
>>
>>
>> (2) Eagerly initialize libgraal (with PR):
>>
>>> for i in (seq 10); /usr/bin/time java -XX:+EagerJVMCI Nop; end
>> 0.06 real 0.04 user 0.01 sys
>> 0.05 real 0.03 user 0.01 sys
>> 0.05 real 0.03 user 0.01 sys
>> 0.05 real 0.03 user 0.01 sys
>> 0.05 real 0.03 user 0.01 sys
>> 0.05 real 0.03 user 0.01 sys
>> 0.05 real 0.03 user 0.01 sys
>> 0.05 real 0.03 user 0.01 sys
>> 0.05 real 0.03 user 0.01 sys
>> 0.05 real 0.03 user 0.01 sys
>>
>>
>> (3) Eagerly initialize libgraal (without PR):
>>
>>> for i in (seq 10...
>
> Doug Simon has updated the pull request with a new target base due to a merge
> or a rebase. The incremental webrev excludes the unrelated changes brought in
> by the merge/rebase. The pull request contains six additional commits since
> the last revision:
>
> - [skip-ci] Merge remote-tracking branch 'openjdk-jdk/master' into
> JDK-8309390
> - [skip-ci] remove debug code
> - fix copyright dates
> - fix reference in comments
> - reduced complexity of SystemProperties based on it being unmodifiable
> - copy system properties into libgraal more efficiently
Thanks for the reviews!
-------------
PR Comment: https://git.openjdk.org/jdk/pull/14291#issuecomment-1589457194