RFR: 8167194: [JVMCI] no reliable mechanism for querying JVMCI system properties

Vladimir Kozlov vladimir.kozlov at oracle.com
Wed Oct 5 17:12:27 UTC 2016


Why *System* properties? It is only JVMCI and Graal (or other compiler) 
properties. Can it be JVMCIPrintProperties? Same for messages:

[JVMCI system properties]
[Graal system properties]
"Selects the system compiler."

For me *system* means a machine on which JVM runs.

Does next comment still valid? System.exit(0) was removed:

PrintConfig(Boolean.class, false, "Prints VM configuration available via 
JVMCI and exits."),

thread.cpp why use condition instead of || ?

      // 8145270: Force initialization of JVMCI runtime otherwise 
requests for blocking
      // compilations via JVMCI will not actually block until JVMCI is 
initialized.
+    init = init || UseJVMCICompiler && (!UseInterpreter || 
!BackgroundCompilation);


Thanks,
Vladimir

On 10/5/16 8:28 AM, Doug Simon wrote:
> There is currently no reliable JVMCI equivalent of -XX:+PrintFlagsFinal for listing the system properties used to configure JVMCI. This is a bug as it's important to be able to easily list flags that configure the VM. The current mechanism is to set -Djvmci.PrintFlags=true on the command line is mostly unusable as it requires adding other VM options to force  (otherwise lazy) JVMCI initialization.
>
> The webrev adds a -XX:+JVMCIPrintSystemProperties flag that will print the system properties used to configure JVMCI shared code as well as whatever JVMCI compiler is configured. For example, here’s the output when no JVMCI compiler is configured:
>
> java -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI -XX:+JVMCIPrintSystemProperties
> [JVMCI system properties]
>   String jvmci.Compiler                = null
>          Selects the system compiler.
>  Boolean jvmci.InitTimer               = false
>          Specifies if initialization timing is enabled.
>  Boolean jvmci.PrintConfig             = false
>          Prints VM configuration available via JVMCI and exits.
>   String jvmci.TraceMethodDataFilter   = null
>          Enables tracing of profiling info when read by JVMCI.
>          Empty value: trace all methods
>          Non-empty value: trace methods whose fully qualified name contains the value.
> ...
>
> When Graal is configured as the JVMCI compiler, the following output shows why it’s useful to have the header lines (i.e., “[JVMCI system properties]"):
>
> java -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI -XX:+JVMCIPrintSystemProperties --module-path=com.oracle.graal.graal_core.jar
> [JVMCI system properties]
>   String jvmci.Compiler               := "graal"
>          Selects the system compiler.
>  Boolean jvmci.InitTimer               = false
>          Specifies if initialization timing is enabled.
>  Boolean jvmci.PrintConfig             = false
>          Prints VM configuration available via JVMCI and exits.
>   String jvmci.TraceMethodDataFilter   = null
>          Enables tracing of profiling info when read by JVMCI.
>          Empty value: trace all methods
>          Non-empty value: trace methods whose fully qualified name contains the value.
> [Graal system properties]
>   String graal.ASMInstructionProfiling                                = null
>          Enables instruction profiling on assembler level. Valid values are a
>          comma separated list of supported instructions. Compare with subclasses
>          of Assembler.InstructionCounter.
>  Boolean graal.AlwaysInlineIntrinsics                                 = false
>          Unconditionally inline intrinsics
>  Boolean graal.AlwaysInlineVTableStubs                                = false
>  Boolean graal.BenchmarkCountersDumpDynamic                           = true
>          Dump dynamic counters
> ...
>
>
> https://bugs.openjdk.java.net/browse/JDK-8167194
> http://cr.openjdk.java.net/~dnsimon/8167194/
>
> -Doug
>


More information about the hotspot-compiler-dev mailing list