RFR (M): 8136681: Factor out IHOP calculation from G1CollectorPolicy

Mikael Gerdin mikael.gerdin at oracle.com
Mon Nov 23 13:27:20 UTC 2015


Thomas,

On 2015-11-23 11:16, Thomas Schatzl wrote:
> Hi Mikael,
>
> On Fri, 2015-11-20 at 17:10 +0100, Mikael Gerdin wrote:
>> Hi Thomas,
>>
>> On 2015-11-19 11:56, Thomas Schatzl wrote:
>>> Hi Mikael,
>>>
>>>     thanks for the review. Sorry for not understanding your intention in
>>> the first place.
>>>
>>> On Wed, 2015-11-18 at 16:57 +0100, Mikael Gerdin wrote:
>>>> On 2015-11-16 12:23, Thomas Schatzl wrote:
>>>>> Hi,
>>>>>
>>>>> On Fri, 2015-11-13 at 16:08 +0100, Mikael Gerdin wrote:
>>>>>> Hi Thomas,
>>> [...]
>>>>>
>>>>>> 1219   double marking_to_mixed_time = -1.0;
>>>>>> 1220   if (!collector_state()->last_gc_was_young() &&
>>>>>> _initial_mark_to_mixed.has_result()) {
>>>>>> 1221     marking_to_mixed_time = _initial_mark_to_mixed.last_marking_time();
>>>>>> 1222     assert(marking_to_mixed_time > 0.0,
>>>>>> 1223            "Initial mark to mixed time must be larger than zero but
>>>>>> is %.3f",
>>>>>> 1224            marking_to_mixed_time);
>>>>>> 1225   }
>>>>>> 1226   // Only update IHOP information on regular GCs.
>>>>>> 1227   if (update_stats) {
>>>>>> 1228     update_ihop_statistics(marking_to_mixed_time,
>>>>>>
>>>>>> Since you are only setting marking_to_mixed_time at line 1221 -1 is
>>>>>> passed to update_ihop_statistics fairly regularly.
>>>>>> Would it make sense to break out update_time_to_mixed and move it inside
>>>>>> the 1220-1225 if-block?
>>>>>
>>>>> Done.
>>>>
>>>> Hm, I was thinking more in the lines of
>>>>
>>>> // Only update IHOP information on regular GCs.
>>>> if (update_stats) {
>>>>      if (!collector_state()->last_gc_was_young() &&
>>>> 	_initial_mark_to_mixed.has_result()) {
>>>>        double marking_to_mixed_time =
>>>> _initial_mark_to_mixed.last_marking_time();
>>>>        assert(marking_to_mixed_time > 0.0,
>>>>               "Initial mark to mixed time must be larger than zero but is
>>>> %.3f",
>>>>               marking_to_mixed_time);
>>>>          _ihop_control->update_marking_length(marking_to_mixed_time);
>>>>        }
>>>>
>>>>        update_ihop_statistics(app_time_ms / 1000.0,
>>>>                               _last_old_allocated_bytes,
>>>>                               last_unrestrained_young_length *
>>>> HeapRegion::GrainBytes);
>>>>      }
>>>>      _last_old_allocated_bytes = 0;
>>>>
>>>> Otherwise a reader might think that marking_to_mixed_time is actually
>>>> set and updated more than once per gc cycle when it's in fact "-1" most
>>>> of the time and thus ignored in update_ihop_statistics.
>>>
>>> Okay. I restructured this code as suggested, and moved it into a
>>> separate method to not bloat
>>> G1CollectorPolicy::record_collection_pause_end() more than required.
>>>
>>> There were some other changes, mostly necessitated by the review from
>>> Tom about the JFR events, which showed that a wrong value were passed to
>>> the logging message. This caused some changes related to logging that I
>>> thought would be best fixed here.
>>>
>>> New webrevs:
>>> http://cr.openjdk.java.net/~tschatzl/8136681/webrev.2_to_3
>>> http://cr.openjdk.java.net/~tschatzl/8136681/webrev.3
>>
>> It looks like webrev.3 is not the complete set of changes.
>>
>> The changes to update_ihop_statistics are in line with what I imagined.
>
> New webrevs after Erik's suggestions (some minor changes):
>
> http://cr.openjdk.java.net/~tschatzl/8136681/webrev.3_to_4
> http://cr.openjdk.java.net/~tschatzl/8136681/webrev.4

Since you decided to remove "size_t rs_size = ..." from 
record_collection_pause_end you get to remove the assert on the line 
above since it refers to the subtraction you just removed.
And now it appears that all uses of 
_cur_collection_pause_used_regions_at_start are gone and you can remove 
it altogether!

I don't need to see a webrev with the additional removals.

I think this is ready to go in now, Reviewed.

/Mikael

>
> I fixed webrev.3 too.
>
> Thanks,
>    Thomas
>
>



More information about the hotspot-gc-dev mailing list