RFR (S): 8073466: Remove buffer retaining functionality and clean up in ParGCAllocBuffer

Jon Masamitsu jon.masamitsu at oracle.com
Mon Mar 2 17:47:11 UTC 2015


Thomas,

Looks good.

Reviewed.

Some comments below but nothing important.

Jon


On 03/02/2015 04:11 AM, Thomas Schatzl wrote:
> Hi Jon,
>
>    thanks for the review :)
>
> On Fri, 2015-02-27 at 16:26 -0800, Jon Masamitsu wrote:
>> Thomas,
>>
>> http://cr.openjdk.java.net/~tschatzl/8073466/webrev.1/src/share/vm/gc_implementation/shared/parGCAllocBuffer.cpp.frames.html
>>
>> Could you add a comment here that the stats are being "flushed".
>> Something like
>>
>> // Flush the statistics.
>>>    67   stats->add_allocated(_allocated);
>>>     68   // Retire() counts the unused space as wasted. So we need to remove it again
>>>     69   // before updating the statistics.
>>>     70   stats->add_wasted(_wasted - unused);
> Done.

Thanks.

>
>> In a context where the unused space at the end of a buffer might be used
>> later (as when there was the "retaining functionality"),  I can see that
>> you might want to differentiate between _wasted and unused.    Since there
>> is no longer a "retain", it seems all to be just waste.   So
>> I don't see the use of passing "_wasted - unused" as opposed to just
>> "_wasted".
> There is still use of "_unused" in the calculation of the desired PLAB
> size. I tried to avoid changing the current PLAB sizing in this change,
> and later for G1 I plan to override the desired_plab_size() method.
>
> [This is needed in any case because of improved statistics for G1, where
> we want to distinguish between waste within the PLABs and waste caused
> by refill due to the current PLAB not fitting into the current region.]

Ok.  That's reasonable.

>
> The existing PLAB sizing calculates the amount of "target_refills" using
> the _unused member. I admit I do not really understand that calculation,
> and the results seem bogus in particular in presence of multiple threads
> each having its own PLAB and considering the integer truncation in the
> formula.
>
> I can create a CR to remove _unused and fix the CMS PLAB sizing.

I don't know what "fix the CMS PLAB sizing" means but
if you put it into a CR, I'll know.

>
>> If you would like to keep the differentiation between "_wasted - used"
>> and "_wasted", consider adding back the "end_of_gc" flag to
>> retire() and moving
>>
>>>    127     _wasted += pointer_delta(_end, _top);  // unused  space
>> out of invalidate() and into retire() in this fashion
>>
>> if (!end_of_gc) {
>>     _wasted += pointer_delta(_end, _top);  // unused  space
>> }
> Done. I did not use an additional parameter to retire, as we already
> have two retiring methods (retire and flush_stats_and_retire) to be
> called at different times during GC anyway.

Thanks.

>
> Also, please ignore that G1 at the moment calls flush_stats_and_retire()
> every time it allocates a G1ParScanThreadState. This is basically
> JDK-8040162. I will ask for a review of that soon.

OK.

>
>> Throwaway suggestion (your call, since not in your change)
>>
>> Fix the indentation on the fields
>>
>>>     39   char head[32];
>>>     40   size_t _word_sz;          // In HeapWord units
>>>     48   char tail[32];
> Fixed.
>
> http://cr.openjdk.java.net/~tschatzl/8073466/webrev.1_to_2/

Looks good.

Reviewed.

Jon

> (incremental)
> http://cr.openjdk.java.net/~tschatzl/8073466/webrev.2/ (full)
>
> (The change also moves invalidate() to the protected section of
> ParGCAllocBuffer).
>
> Thanks,
>    Thomas
>
>




More information about the hotspot-gc-dev mailing list