On Fri, 2 Jun 2023 20:32:14 GMT, Doug Simon <dnsi...@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 <dnsi...@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