Integrated: 8309390: [JVMCI] improve copying system properties into libgraal

Doug Simon dnsimon at openjdk.org
Tue Jun 13 14:48:01 UTC 2023


On Fri, 2 Jun 2023 20:32:14 GMT, Doug Simon <dnsimon at openjdk.org> 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); /usr/bin/time java -XX:+EagerJVMCI Nop; end
>         0.11 real         0.08 user         ...

This pull request has now been integrated.

Changeset: c0aa6bf4
Author:    Doug Simon <dnsimon at openjdk.org>
URL:       https://git.openjdk.org/jdk/commit/c0aa6bf4febb836a26941f13558d0a930e088fad
Stats:     589 lines in 19 files changed: 394 ins; 138 del; 57 mod

8309390: [JVMCI] improve copying system properties into libgraal

Reviewed-by: never, kvn

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

PR: https://git.openjdk.org/jdk/pull/14291


More information about the core-libs-dev mailing list