Request for review (M): 7178361: G1: Make sure that PrintGC and PrintGCDetails use the same timing for the GC pause
John Cuthbertson
john.cuthbertson at oracle.com
Thu Jul 12 21:34:30 UTC 2012
Hi Bengt,
The latest webrev looks good to me.
JohnC
On 07/11/12 13:58, Bengt Rutisson wrote:
>
> Hi John,
>
> Thanks a lot for looking at this! Good comments as always!
>
> I applied your latest comments. (Good catch about the initialization
> of the card cleaning timing variables.)
>
> Here is an updated webrev:
> http://cr.openjdk.java.net/~brutisso/7178361/webrev-04/
>
> For convenience, here is a webrev with just the latest changes that I
> applied based on your two last emails:
> http://cr.openjdk.java.net/~brutisso/7178361/webrev-03-04-diff/
>
> I'm getting back to work next week and I'd like to start on the next
> step (to clean up the single threaded logging) based on this change.
> So, I'd like to get this pushed before Monday.
>
> If I don't get any objections before tomorrow I'll push this. I can
> always include some changes in my next push as well if there is late
> feedback.
>
> Thanks again for the review!
> Bengt
>
> On 2012-07-04 00:07, John Cuthbertson wrote:
>> Hi Bengt,
>>
>> Finished looking at the rest of the webrev. Replies are inline.....
>>
>> On 06/29/12 05:37, Bengt Rutisson wrote:
>>>>
>>>> Line 102:
>>>> Rename "start" to something like - note_gc_start(). "start" is too
>>>> closely associated with threads IMO. Also should it also take the
>>>> start time? That way the "end" routine
>>>> could take an end time and do any necessary calculations.
>>>
>>> Done.
>>
>> Thanks again - I can see you even extended the idea to include other
>> cachable items from the start of the pause. It also looks good.
>>
>>
>>>> Line 236:
>>>> "accumulate_par_times" is a bit misnamed. "collapse_par_times",
>>>> "average_par_times" might be better. Also I don't think you should
>>>> be calling this directly from with
>>>> G1CollectedHeap. It would be better to call this from a
>>>> G1GCPhaseTimes::note_gc_end() type of routine, which is called by
>>>> G1CollectorPolicy::record_collection_pause_end().
>>>
>>>
>>> I renamed it to collapse_par_times(), but I still would like to call
>>> it directly from G1CollectedHeap. The reason is that
>>> record_collection_pause_end() need this to be called, but also the
>>> note_gc_end() method. I don't like the note_gc_end() method to
>>> depend on a call to record_collection_pause_end().
>>>
>>> The clean solution would be to merge these two methods, but that's
>>> not possible without changing the timing for the ergonomics, which
>>> is exactly what I am trying to avoid.
>>
>> OK. I was expecting note_gc_end() to be called by
>> record_collection_pause_end() but I see your point - they are kind
>> of inter-dependent. I'm OK with the current solution. I agree that
>> it's good not to change the timer for the ergonomics - it covers the
>> part of the GC we can control and make changes to.
>>
>>>>
>>>> g1CollectorPolicy.hpp
>>>> ---------------------
>>>> Line 65-66:
>>>> Why did you remove the indentation levels? IMO they are easier to
>>>> work with than explicitly listing spaces.
>>>
>>> Two reasons. One technical. I moved LineBuffer (that handled the
>>> indentation) into g1GCPhaseTime.cpp and I didn't really want to
>>> expose it outside of that module. The other, more design related
>>> question, is whether the TraceGen0Time output should really use the
>>> same formatting as the PrintGCDetails formatting. As it was it was
>>> not doing a good job with the indentations. It was also pretty
>>> difficult to read the code and guess how many white spaces would end
>>> up where. With the white spaces explicitly in the print statements
>>> it got clearer what really happened and I could fix the indentation
>>> issues.
>>>
>>> I'm sure we can introduce some indentation abstraction for
>>> TraceGen0Time too, but since I didn't really like the way it was and
>>> I had to move the LineBuffer I thought it was easiest to revert back
>>> to using explicit space characters in the print statements.
>>
>> I think we'll agree to disagree with this one - but I don't feel that
>> strongly so let's go with your current solution.
>>
>> I'm OK with your replies to the remaining comments.
>>
>> Based upon the latest patch, however, I think you need the following
>> initializers:
>>
>> _min_clear_cc_time_ms(-1.0),
>> _max_clear_cc_time_ms(-1.0),
>> _cur_clear_cc_time_ms(0.0),
>> _cum_clear_cc_time_ms(0.0),
>> _num_cc_clears(0L),
>>
>> in the G1GCPhaseTimes constructor - otherwise the min, max, and
>> cumulative card count times end up invalid:
>>
>> [Cur Clear CC: 0.0 ms]
>> [Cum Clear CC:
>> -7478635795308384178678626234477338765623121979189748343809653167004330313976030486954447383286129802186779679841804100646674790742262819242223986790247088643994984488195310211210345403332642667378471000230265516264857328262241129957569855488.0
>> ms]
>> [Min Clear CC: 0.0 ms]
>> [Max Clear CC: 0.0 ms]
>>
>> Also, since the previous version of the finest log-level didn't
>> display these items, perhaps only display them if Verbose is also
>> enabled? In most cases card cache count clearing will exhibit itself
>> as a higher HC Worker Other time for worker 0.
>>
>> Everything else looks OK.
>>
>> Thanks,
>>
>> JohnC
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/hotspot-gc-dev/attachments/20120712/92d55d98/attachment.htm>
More information about the hotspot-gc-dev
mailing list