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

Bengt Rutisson bengt.rutisson at oracle.com
Thu Mar 24 08:15:46 UTC 2016



On 2016-03-24 08:27, Bengt Rutisson wrote:
>
> 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.

After re-reading your comment I think I misunderstood. You meant that 
you need to get a particular group from the regexp? I think you can use 
the OutputAnalyzer.firstMatch() method for that:

http://hg.openjdk.java.net/jdk9/hs-rt/hotspot/file/906fa01e86a0/test/testlibrary/jdk/test/lib/OutputAnalyzer.java#l327

Thanks,
Bengt

>
> 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/56dc808b/attachment.htm>


More information about the hotspot-gc-dev mailing list