Request for Review - 8152208: Summary for phase times are incorrect with and without UseDynamicNumberOfGCThreads

Bengt Rutisson bengt.rutisson at oracle.com
Thu Mar 24 07:27:09 UTC 2016


Hi Jon,

On 2016-03-23 17:09, Jon Masamitsu wrote:
> Bengt,
>
> Thanks for the review.
>
> The delta webrev with you suggestion to use OutputAnalyzer shouldMatch is
> here
>
> http://cr.openjdk.java.net/~jmasa/8152208/webrev_delta.01_02/

Sorry, I should have been more clear. I meant that you can replace all 
Matchers with shouldMatch(). Not just the first occurrence.

>
> I used my own Matcher in cases where I wanted to extract more information
> after I had a match.

I normally add a System.out.println(output.getOutput()); when I want 
more information about what is happening in the test.

Thanks,
Bengt

>
> Full webrev is
>
> http://cr.openjdk.java.net/~jmasa/8152208/webrev.02/
>
> Jon
>
> On 03/22/2016 02:29 AM, Bengt Rutisson wrote:
>>
>> Hi Jon,
>>
>> On 2016-03-22 00:05, Jon Masamitsu wrote:
>>> Tao,
>>>
>>> I've updated the 01 version.  The test has not changed.
>>> Thanks again for catching that.
>>>
>>> Jon
>>>
>>> On 03/21/2016 03:16 PM, Tao Mao wrote:
>>>> This change has a bug: double counting get(0); should start with s = 0
>>>>
>>>> Thanks.
>>>> Tao Mao
>>>>
>>>> On Mon, Mar 21, 2016 at 2:55 PM, Jon Masamitsu 
>>>> <jon.masamitsu at oracle.com> wrote:
>>>>
>>>>     Bengt,
>>>>
>>>>     Thanks for the review.
>>>>
>>>>     On 03/21/2016 02:13 AM, Bengt Rutisson wrote:
>>>>>
>>>>>     Hi Jon,
>>>>>
>>>>>     On 2016-03-21 03:43, Jon Masamitsu wrote:
>>>>>>     The averages reported for phase times (for example "Ext Root
>>>>>>     Scanning") were
>>>>>>     incorrect.  Not all the per thread values were included in
>>>>>>     the sum and the
>>>>>>     average value was incorrect (this with build 9-ea+1100)
>>>>>>
>>>>>>     [0.366s][debug][gc,phases            ] GC(2)     Ext Root
>>>>>>     Scanning (ms):   Min:  0.3, Avg:  0.2, Max:  0.4, Diff:  0.0,
>>>>>>     Sum:  0.3
>>>>>>     [0.366s][trace][gc,phases,task       ]
>>>>>>     GC(2)                                0.4  0.3
>>>>>>
>>>>>>     With the fix all values are included in the sum and the
>>>>>>     average is correct.
>>>>>>
>>>>>>     [2.830s][debug][gc,phases            ] GC(0)     Ext Root
>>>>>>     Scanning (ms):   Min:  5.7, Avg:  7.3, Max:  8.9, Diff:  3.1,
>>>>>>     Sum: 14.6
>>>>>>     [2.830s][trace][gc,phases,task       ]
>>>>>>     GC(0)                                8.9  5.7
>>>>>>
>>>>>>     https://bugs.openjdk.java.net/browse/JDK-8152208
>>>>>>     http://cr.openjdk.java.net/~jmasa/8152208/webrev.00/
>>>>>>     <http://cr.openjdk.java.net/%7Ejmasa/8152208/webrev.00/>
>>>>>
>>>>>     Nice catch! Your change looks good.
>>>>>
>>>>>     The method WorkerDataArray<T>::sum(uint active_threads) just
>>>>>     above the average() method has the same issue. Can you fix
>>>>>     that too?
>>>>
>>>>     Yes, indeed.
>>>>
>>>>     I messed up the delta a bit so all the changes are in the
>>>>     workerDataArray.inline.hpp
>>>>     webrev.  The test has not changed.
>>>>
>>>>     http://cr.openjdk.java.net/~jmasa/8152208/webrev.01/
>>>>     <http://cr.openjdk.java.net/%7Ejmasa/8152208/webrev.01/>
>>>>
>>
>> The code changes look good. (I realize that the sum() iteration was 
>> actually correct, but I your changes are much easier to read.)
>>
>> The test could be simplified a bit if you use the shouldMatch() 
>> method on the OutputAnalyzer rather than compiling your own regexps.
>>
>> http://hg.openjdk.java.net/jdk9/hs-rt/hotspot/file/9037ef388634/test/testlibrary/jdk/test/lib/OutputAnalyzer.java#l224 
>>
>>
>> You already have an instance of OutputAnalyzer in your test:
>>
>>
>>   64         OutputAnalyzer output = new OutputAnalyzer(pb.start());
>>
>> So, this:
>>
>>
>>   70         String parallel_phase_leader = "Evacuate Collection Set: 
>> \\d+\\.\\d+ms";
>>   71         String std_out = output.getStdout();
>>   72         Matcher m = Pattern.compile(parallel_phase_leader, 
>> Pattern.MULTILINE).matcher(std_out);
>>   73
>>   74         if (!m.find()) {
>>   75           throw new Exception("Could not find correct output for 
>> Evacuate Collection Set: in stdout," +
>>   76             " should match the pattern \"" + 
>> parallel_phase_leader + "\", but stdout is \n" + output.getStdout());
>>   77         } else {
>>
>> Could be replaced by the single line:
>>
>> output.shouldMatch("Evacuate Collection Set: \\d+\\.\\d+ms");
>>
>> Similarly for the other matching in the test.
>>
>> Thanks,
>> Bengt
>>
>>
>>>>
>>>>     Jon
>>>>
>>>>>
>>>>>     Thanks,
>>>>>     Bengt
>>>>>
>>>>>>
>>>>>>     Thanks.
>>>>>>
>>>>>>     Jon
>>>>>
>>>>
>>>>
>>>
>>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/hotspot-gc-dev/attachments/20160324/8d99b461/attachment.htm>


More information about the hotspot-gc-dev mailing list