RFR: 8062537: [TESTBUG] Conflicting GC combinations in hotspot tests
Bengt Rutisson
bengt.rutisson at oracle.com
Mon Nov 3 13:31:13 UTC 2014
Hi Dima,
Answers inline.
On 10/31/14 1:56 PM, Dmitry Fazunenko wrote:
> Hi Bengt,
>
> Thanks a lot for your detailed feedback, we appreciate it very much!
>
> See comments inline.
>
> On 31.10.2014 1:09, Bengt Rutisson wrote:
>>
>> Hi Evgeniya,
>>
>> On 10/30/14 3:05 PM, Evgeniya Stepanova wrote:
>>> Hi,
>>>
>>> Please review changes for 8062537, the OpenJDK/hotspot part of the
>>> JDK-8019361 <https://bugs.openjdk.java.net/browse/JDK-8019361>
>>>
>>> bug: https://bugs.openjdk.java.net/browse/JDK-8062537
>>> fix: http://cr.openjdk.java.net/~eistepan/8062537/webrev.00/
>>>
>>> Problem: Some tests explicitly set GC and fail when jtreg set
>>> another GC.
>>> Solution: Such tests marked with the jtreg tag "requires" to skip
>>> test if there is a conflict
>>
>> Thanks for fixing this! It is really great that we finally start
>> sorting this out.
>>
>> First a general comment. The @requires tag has been developed without
>> much cooperation with the GC team. We did have a lot of feedback when
>> it was first presented a year ago, but it does not seem like this
>> feedback was incorporated into the @requires that was eventually built.
>
> We tried to implement as much developer's wishes as possible. But not
> everything is possible, sorry for that.
Yes, I'm sure you have done your best. It's just that we have been
requesting this feature for 3 years and I was expecting us to be able to
influence the feature much more than was the case now.
>
>>
>> I think this change that gets proposed now is a big step forward and
>> I won't object to it. But I am pretty convinced that we will soon run
>> in to the limitations of the current @requires implementation and we
>> will have to redo this work.
>>
>> Some of the points I don't really like about the @requires tag are:
>>
>> - the "vm.gc" abstraction is more limiting than helping. It would
>> have been better to just "require" any command line flag.
> "vm.gc" is an alias to a very popular flag. It's also possible to use:
> vm.opt.UseG1GC == true instead.
>
> The table with all vars available in jtreg:
> http://jre.us.oracle.com/java/re/jtreg/4.1/promoted/latest/binaries/jtreg/doc/jtreg/tag-spec.html#requires_names
The problem with having this matching built in to JTreg is that it makes
it very hard to change. When we discussed this a year ago I think we
said that JTreg should only provide a means to test against the command
line and a hook for running some java code in the @requires tag. That
way we could put logic like this in a test library that is under our
control. This would make it easy for us to change and also enables us to
use different logic for different versions.
>
>> - the requirement should be per @run tag. Right now we have to do
>> what you did in this change and use vm.gc=null even when some tests
>> could actually have been run when a GC was specified.
> it would be great, but it will unlikely happen in jtreg, as well as
> test case support.
what do you mean with test case support?
>
>> - there are many tests that require more than just a specific GC.
>> Often there are other flags that can't be changed either for the test
>> to work properly.
>
> yes. conflicting GC is just the most popular problem caused by
> conflicting options.
> If we address this issue and we are satisfied with solution, we could
> move further.
Yes, I agree that taking one step at the time is good. Personally I
would have preferred that the first step was a "just run the command
line as specified in the @run tag" step.
>
>>
>> Maybe this is not the right place to discuss the current
>> implementation of the @requires tag. I just want to say that I'm not
>> too happy about how the @requires tag turned out. But assuming we
>> have to use it the way it is now I guess the proposed changeset looks
>> good.
>
> yes, this thread is about change made by Evgeniya, not about jtreg :)
> And thanks for reviewing it!
Agreed. And as I said, I think the patch looks ok. I have not looked at
all tests. But if they now pass with the combinations that we test with
I guess they should be ok.
>
>>
>>> Tested locally with different GC flags (-XX:+UseG1GC,
>>> -XX:+UseParallelGC, -XX:+UseSerialGC, -XX:+UseConcMarkSweep and
>>> without any GC flag). Tests are being excluded as expected. No tests
>>> failed because of the conflict.
>> Have you tested with -Xconcgc too? It's an alias for
>> -XX:+UseConcMarkSweepGC.
>
> '-Xconcgc' is not supported yet. (bug in jtreg, I will submit)
Ok. Thanks.
>
>>
>> I think some of the test, like
>> test/gc/startup_warnings/TestDefNewCMS.java, will fail if you run
>> with -XX:+UseParNewGC. Others, like
>> test/gc/startup_warnings/TestParNewCMS.java, will fail if you run
>> with -XX:-UseParNewGC. Could you test these two cases too?
>
> These two tests ignore vm flags.
> Add @requires here is not necessary, but it will allow not execute the
> tests when not needed.
> So, if we run HS tests with 4 GC, we don't need to run these tests 4
> times, 1 should be enough.
Do we really want to use the @requires functionality for this purpose?
It seems like a way of misusing @requires. If we just want the tests to
be run once I think Leonid's approach with tests lists seems more suitable.
But are you sure that this is the reason for the @requires in this case?
TestDefNewCMS does sound like a test that is DefNew specific. I don't
see a reason to run it with ParNew. If it doesn't fail today it should
probably be changed so that it does fail if it is run with the wrong GC.
>
>> Similarly it looks to me like there are tests that will fail if you
>> run them with -XX:-UseParallelOldGC or -XX:+UseParallelOldGC.
>>
>> Just a heads up. These two tests will soon be removed. I'm about to
>> push a changeset that removes them:
>>
>> test/gc/startup_warnings/TestCMSIncrementalMode.java
>> test/gc/startup_warnings/TestCMSNoIncrementalMode.java
> okay, thank for letting us know.
>
>>
>> Is there some way of making sure that all tests are run at one time
>> or another. With this change there is a risk that some tests are
>> never run and always skipped. Will we somehow be tracking what gets
>> skipped and make sure that all tests are at least run once with the
>> correct GC so that it is not skipped all the time?
>
> This is a very good question!
> jtreg now doesn't report skipped tests, hopefully it will do soon,
> after getting fix of:
> https://bugs.openjdk.java.net/browse/CODETOOLS-7900934
>
> And yes, tracking tests which are not run is important thing.
> @requires - is not the only to exclude test from execution.
>
> Other examples:
>
> /*
> *@ignore
> *@test
> */
> ...
>
> /*@bug 4445555
> *@test
> */
> ...
> Such tests will never be run, because jtreg treats as test only files
> with @test on the first place...
>
> So, making sure that tests do not disappear is important SQE task, we
> know about that, we're thinking on solution (may be very actively).
> But this subject for another discussion, not within RFR :)
Right. Glad to hear that you are actively working on this!
Bengt
>
> Thanks,
> Dima
>
>
>
>>
>> Thanks,
>> Bengt
>>
>>>
>>> Thanks,
>>> Evgeniya Stepanova
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/attachments/20141103/5051e14c/attachment-0001.html>
More information about the hotspot-compiler-dev
mailing list