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

Tom Rodriguez never at openjdk.org
Mon Jun 5 19:01:23 UTC 2023


On Fri, 2 Jun 2023 20:32:14 GMT, Doug Simon <dnsimon at openjdk.org> wrote:

> This PR improves the startup time for libgraal by speeding up how `VM.savedProps` is copied into libgraal. This data structure is now serialized to a native buffer directly from C++ and the native buffer is then directly decoded by libgraal.
> 
> ## 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         0.02 sys
>         0.08 real         0.06 user         0.01 sys
>         0.08 real         0.07 user         0.01 sys
>         0.10 real         0.07 user         0.01 sys
>         0.08 real         0.06 user         0.01 sys
>         0.10 real         0.07 user         0.01 sys
>         0.08 real         0.07 user         0.01 sys
>         0.08 real         0.07 user         0.01 sys
>         0.08 real  ...

I don't really love the hard code parsing of the HashMap.  What properties are actually required for JVMCI?  It seems to me that the contents of Arguments::system_properties() should contain all the properties we want to advertise to JVMCI.  That would have avoid having to decode them after they've been converted into Java objects.

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

PR Comment: https://git.openjdk.org/jdk/pull/14291#issuecomment-1577305531


More information about the hotspot-dev mailing list