RFR/RFC 8231503: [TESTBUG] compiler/{jvmci, aot} tests should not run with GCs that do not support JVMCI/AOT
Stefan Karlsson
stefan.karlsson at oracle.com
Tue Oct 1 08:43:57 UTC 2019
Hi Vladimir,
Thanks for the clarification!
I do find this odd and sense a kind of false abstraction here, but I'm
not going to push for a change in this area. I'm happy that it's going
to be easier to run ZGC tests locally with this change.
Thanks,
StefanK
On 2019-09-30 19:51, Vladimir Kozlov wrote:
> -XX:-UseJVMCICompiler is used explicitly to run Graal's unit tests to
> compare results with C2. Without it Graal will be loaded and used
> instead of C2 by default if +UseJVMCI is specified. These unit tests
> should not run with not support GCs.
>
> I don't think we should modify check in
> JVMCIGlobals::check_jvmci_supported_gc().
>
> I am fine with proposed changes in VMProps.java and I agree that JVMCI
> and AOT may have different GCs support even so currently they match.
>
> Thanks,
> Vladimir
>
> On 9/30/19 6:27 AM, Stefan Karlsson wrote:
>> [I wrote this before realizing that the mail thread had forked. Some
>> of the comments might have already been covered]
>>
>> Hi Aleksey,
>>
>> Thanks for fixing this!
>>
>> Inlined:
>>
>> On 2019-09-27 17:26, Aleksey Shipilev wrote:
>>> Replying with proper "To:". Friday, eh.
>>>
>>> On 9/27/19 5:23 PM, Aleksey Shipilev wrote:
>>>> Testbug:
>>>> https://bugs.openjdk.java.net/browse/JDK-8231503
>>>>
>>>> Candidate fix:
>>>> https://cr.openjdk.java.net/~shade/8231503/webrev.01/
>>
>> One suggestion would be to rewrite the GC checking to use the enum
>> values instead of string compares:
>>
>> switch (GC.selected()) {
>> case Serial:
>> case Parallel:
>> case G1:
>> // These GCs are supported with AOT
>> return "true";
>> default:
>> // Every other GC is not supported
>> return "false";
>> }
>>
>>
>> Maybe even create a function that returns a boolean.
>>
>>>>
>>>> I am actually not sure it should be fixed this way. The alternative
>>>> is to add the @requires lines to
>>>> every affected test (there are about a hundred of them), like this:
>>>> @requires (vm.gc == "null" || vm.gc == "G1" || vm.gc = "Serial"
>>>> || vm.gc = "Parallel")
>>>>
>>>> ...but that seems too intrusive. Or maybe not? Open for opinions
>>>> from those who maintain JVMCI/AOT.
>>
>> I would also be interested in hearing what the JVMCI/AOT maintainers
>> think.
>>
>> Isn't it odd that we prevent these tests from being run when JVMCI is
>> enabled? Shouldn't we only skip the tests when an unsupported compiler
>> is used? For all practical purposes that would be when Graal is used.
>>
>> A lot of the tests are run with -XX:-UseJVMCICompiler and it's not
>> obvious to me that those have to be excluded when running with ZGC or
>> Shenandoah.
>>
>> I think there might be a bug in check_jvmci_supported_gc and that we
>> probably should change this to:
>> ---
>> diff --git a/src/hotspot/share/jvmci/jvmci_globals.cpp
>> b/src/hotspot/share/jvmci/jvmci_globals.cpp
>> --- a/src/hotspot/share/jvmci/jvmci_globals.cpp
>> +++ b/src/hotspot/share/jvmci/jvmci_globals.cpp
>> @@ -123,7 +123,7 @@
>> }
>>
>> void JVMCIGlobals::check_jvmci_supported_gc() {
>> - if (EnableJVMCI) {
>> + if (EnableJVMCI && UseJVMCICompiler) {
>> // Check if selected GC is supported by JVMCI and Java compiler
>> if (!(UseSerialGC || UseParallelGC || UseParallelOldGC ||
>> UseG1GC)) {
>> vm_exit_during_initialization("JVMCI Compiler does not support
>> selected GC", GCConfig::hs_err_name());
>> ---
>>
>> I tested this with ZGC (without your patch) and ran the tests in
>> test/hotspot/jtreg/compiler/jvmci. 90% of the tests passed, some of
>> the tests failed (as expected) because they actually ran with
>> -XX:+UseJVMCICompiler, and some (unexpectedly) crashed with
>> -XX:-UseJVMCICompiler. The latter might be a real bug in the JVMCI API.
>>
>> With all this said, maybe we should:
>>
>> 0) Add your "gc supports graal" checks to a new helper function
>> (selectedGCSupportsGraal() ?).
>> 1) Use the UseJVCMICompiler patch above
>> 2) Leave the vmJvmci function as is
>> 3) Tag tests actually requiring graal with vm.graal.enabled
>> 4) Maybe change @requires vm.aot to to use vm.aot.enabled
>> 5) Use this function to implement vm.graal.enabled and vm.aot.enabled
>>
>> Of course, I could have misunderstood the meaning of
>> -XX:-UseJVMCICompiler, but then it would be good to get some
>> clarification about that.
>>
>> Also, if you are in a hurry to get this resolved, then we could
>> consider making these changes after your patch has been pushed.
>>
>> Thanks,
>> StefanK
>>
>>>>
>>>> Testing: compiler/aot, compiler/jvmci {serial, parallel, g1,
>>>> shenandoah, zgc}; tier1
>>>
More information about the hotspot-compiler-dev
mailing list