RFR: 8167194: [JVMCI] no reliable mechanism for querying JVMCI system properties
Vladimir Kozlov
vladimir.kozlov at oracle.com
Wed Oct 5 18:49:44 UTC 2016
On 10/5/16 11:34 AM, Doug Simon wrote:
> I chose system property because these properties are set with the command line system property syntax.
You mean "were set"? It use normal VM flag now.
> I’d actually prefer shortening it to just “properties” if you think it doesn’t risk any ambiguity.
For me "shortening" is better - few bytes less in VM size :)
>
>> On 05 Oct 2016, at 19:12, Vladimir Kozlov <vladimir.kozlov at oracle.com> wrote:
>>
>> 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.”),
>
> No - thanks for catching that. I’ll fixed it.
>
>>
>> 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);
>
> You must have looked at an earlier webrev. It’s now:
No, that is what I am suggesting. I did not know it was first version.
So why use if (!init) ?
Thanks,
Vladimir
>
> if (!init) {
> // 8145270: Force initialization of JVMCI runtime otherwise requests for blocking
> // compilations via JVMCI will not actually block until JVMCI is initialized.
> init = UseJVMCICompiler && (!UseInterpreter || !BackgroundCompilation);
> }
>
> -Doug
>
>> 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