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

Doug Simon dnsimon at openjdk.org
Sat Jun 3 11:40:32 UTC 2023


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         0.06 user         0.01 sys
        0.08 real         0.06 user         0.01 sys

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

Commit messages:
 - more efficient copying of system properties into libjvmci

Changes: https://git.openjdk.org/jdk/pull/14291/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=14291&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8309390
  Stats: 242 lines in 8 files changed: 172 ins; 30 del; 40 mod
  Patch: https://git.openjdk.org/jdk/pull/14291.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/14291/head:pull/14291

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


More information about the hotspot-dev mailing list