Request for review (s) : 8017462: G1: guarantee fails with UseDynamicNumberOfGCThreads
Bengt Rutisson
bengt.rutisson at oracle.com
Wed Apr 1 18:16:09 UTC 2015
Hi Jon,
Latest webrev looks good to me.
Thanks,
Bengt
On 31/03/15 18:49, Jon Masamitsu wrote:
>
> On 3/30/2015 4:03 AM, Bengt Rutisson wrote:
>>
>> Hi Jon,
>>
>> On 2015-03-27 15:37, Jon Masamitsu wrote:
>>> Bengt,
>>>
>>> Thanks for looking at this.
>>>
>>> On 3/27/2015 2:48 AM, Bengt Rutisson wrote:
>>>>
>>>> On 2015-03-27 05:33, Jon Masamitsu wrote:
>>>>> The fix for 8017462 has been changed to adopt the suggestion from
>>>>> Bengt (thanks, Bengt). The patch from Bengt has been enhanced to
>>>>> include some of the changes in this first version that did not make
>>>>> it into Bengt's original patch. The test remains the same. A CR
>>>>> has been
>>>>> created to add another test to check the consistency of one of
>>>>> the per thread statistics with the sum of the statistics over all the
>>>>> threads (e.g., per thread object copy time and total object copy
>>>>> time)
>>>>> https://bugs.openjdk.java.net/browse/JDK-8076140
>>>>>
>>>>> http://cr.openjdk.java.net/~jmasa/8017462/webrev.01/
>>>>
>>>> Thanks for adopting this patch. I think it looks good now. :)
>>>>
>>>> A couple of questions about the test case.
>>>>
>>>> The proposed test will run with any GC configuration since it just
>>>> discards the JTreg configuration and selects its own GC. You have
>>>> specified @requires vm.gc=="null", which makes sense since we don't
>>>> have to run this test in every configuration. The test will anyway
>>>> always run with the GCs that it specifies itself. However, the
>>>> @requires tag will mean that the test is only run if no GC is
>>>> specified. Currently there is a "noopt" baseline in our nightly
>>>> testing that runs without explicitly setting a GC, so this test
>>>> will be run there. But if we change the nightly baselines to always
>>>> specify a GC we will never run this test.
>>>
>>> I would not expect that the nightly testing to always specify a
>>> specific GC because
>>> we do have a default GC and test should be run when we do the
>>> selection of the
>>> GC. Is this going to changes such that every nightly test specifies
>>> a specific GC?
>>>
>>> Are you suggesting that the command line be changed to not include a
>>> specific GC and that the the @requires be removed? So the test is run
>>> with whatever GC is being tested?
>>
>> I think I prefer that the test specifies the GCs that it needs to
>> test rather than relying on the framework to pass the relevant GC
>> flags. So, I prefer the way the test is written now. My question was
>> really if we want to use @requires for controlling when a test is
>> run. More below...
>
> OK.
>
>>
>>>
>>>>
>>>> I guess this is a more general question. Should we use @requires to
>>>> avoid running the same test many times or should we only use it
>>>> when the test actually requires a specific GC configuration?
>>>
>>> I'll happily take guidance on this point. Only using it when tests
>>> actually requires a specific
>>> GC sounds OK.
>>
>> I'm also not sure, so my question was really a question. Is this how
>> we want to make sure that a generic test is only run once? There are
>> other ways...test groups, nightly batch configuration etc...
>>
>>>
>>>>
>>>> Also, the test use a lot of flags:
>>>>
>>>> "-XX:+UnlockExperimentalVMOptions", "-XX:G1LogLevel=finest",
>>>> "-XX:+" + gcFlag, "-Xmx10M", "-showversion", "-XX:+PrintGCDetails",
>>>> "-XX:+UseDynamicNumberOfGCThreads", "-XX:+TraceDynamicGCThreads"
>>>>
>>>>
>>>> I think this should be enough:
>>>>
>>>> "-XX:+" + gcFlag, "-Xmx10M", "-XX:+UseDynamicNumberOfGCThreads",
>>>> "-XX:+TraceDynamicGCThreads"
>>>>
>>>> Is there a particular reason to have the other flags?
>>>
>>> In some of my testing there was a failure when I ran with log level
>>> set to finest
>>> that I did not see when I used the default logging level. I cannot
>>> recall if it was
>>> actually this test but I decided to add finest to this test as a
>>> result of seeing
>>> that failure.
>>
>> I don't see why the G1 log level would affect this test. Can you try
>> to reproduce the issue? If not I would prefer to remove those flags.
>
> I removed the extra flags "-XX:+UnlockExperimentalVMOptions",
> "-XX:G1LogLevel=finest"
>
> If I remove the "-XX:+PrintGCDetails" the test passes with a recent
> build of gc_baseline. If
> I keep that flag, the gc_baseline build fails (I added the stack trace
> to the CR). It passes with
> -XX:+PrintGCDetails and this fix.
>
> If the log level is not finer the method note_gc_end() is not called
> and the failure happens in
> note_gc_end().
>
> Latest delta webrev (only the test was changed).
>
> http://cr.openjdk.java.net/~jmasa/8017462/webrev_delta_02/
>
> Full webrev
>
> http://cr.openjdk.java.net/~jmasa/8017462/webrev.02/
>
> Thanks.
>
> Jon
>
>>
>>>
>>> Wow. I have not known that G1 logging is printed when
>>> PrintGCDetails is
>>> off. Is that really the intent?
>>
>> Yes, that was intentional when G1LogLevel was introduced. I'm not
>> saying it is the right choice, but it was intentional. All of this
>> will be replaced with the unified logging for JDK 9, so I doubt that
>> it is worth digging too deep into it now.
>>
>> Thanks,
>> Bengt
>>
>>>
>>> Jon
>>>
>>>
>>>>
>>>> Thanks,
>>>> Bengt
>>>>
>>>>>
>>>>> On 3/10/2015 9:26 AM, Jon Masamitsu wrote:
>>>>>> 8017462: G1: guarantee fails with UseDynamicNumberOfGCThreads
>>>>>>
>>>>>> https://bugs.openjdk.java.net/browse/JDK-8017462
>>>>>>
>>>>>> When fewer than the maximum number of threads was being used for
>>>>>> a parallel section, phase times for the threads that did not
>>>>>> execute and
>>>>>> averages for the phase were misleading. The fix passes the
>>>>>> active number of
>>>>>> GC threads to the G1 phase timers.
>>>>>>
>>>>>> http://cr.openjdk.java.net/~jmasa/8017462/webrev.00/
>>>>>>
>>>>>> Tested with gc_test_suite.
>>>>>
>>>>
>>>
>>
>
More information about the hotspot-gc-dev
mailing list