RFR(S): 7119908: G1: Cache CSet start region for each worker for subsequent reuse

John Cuthbertson john.cuthbertson at oracle.com
Mon Dec 12 18:20:01 UTC 2011


Hi Vitaly,

Thanks for looking at the code. The stamp is a pointer because it is 
actually an array of stamps - a separate stamp for each worker. Setting 
the stamp (for a given worker) at the same time as we cache the starting 
region means that we can determine if the starting region has been set 
(during the current pause) without having to clear the cache at the end 
of the pause. If the stamp for given worker has not been set during the 
current pause then we have to assume that the starting region entry for 
that worker is stale and re-calculate the starting region (setting the 
stamp and updating the cache).

Does this answer your question?

Let me know if you any others.

Thanks,

JohnC

On 12/12/11 06:27, Vitaly Davidovich wrote:
>
> Hi John,
>
> Just curious - why did you make the timestamp a uint* instead of uint?
>
> Thanks,
>
> Vitaly
>
> On Dec 9, 2011 2:20 PM, "John Cuthbertson" 
> <john.cuthbertson at oracle.com <mailto:john.cuthbertson at oracle.com>> wrote:
>
>     Hi Everyone,
>
>     Can I have a couple of volunteers to review the changes for this
>     CR? The webrev can be found at:
>     http://cr.openjdk.java.net/~johnc/7119908/webrev.0/
>     <http://cr.openjdk.java.net/%7Ejohnc/7119908/webrev.0/>
>
>     Summary:
>     As part of the code review comments for 7112743 (G1: Reduce
>     overhead of marking closure during evacuation pauses) it was
>     suggested that instead of recalculating the starting heap region
>     for each worker thread, we reuse the values calculated during RSet
>     scanning. These changes address that review comment. In these
>     changes I maintain a cache that is used and updated by
>     G1CollectedHeap::start_cset_region_for_worker(). The first time
>     this routine is called by a worker thread during an evacuation
>     pause (currently during RSet scanning) the cached value for the
>     worker gets set; when the routine is called subsequently the
>     region that was cached for the worker is returned. I employ a
>     simple stamp mechanism based upon the number of GCs that ensures
>     the validity of the regions in the cache and makes clearing the
>     cache unnecessary.
>
>     Testing:
>     GC Test suite with a small marking threshold (10%) with and
>     without verification; the configuration of SPECjbb used to test
>     7117423; Kitchensink.
>
>     Thanks,
>
>     JohnC
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.java.net/pipermail/hotspot-gc-dev/attachments/20111212/730d3091/attachment.htm>


More information about the hotspot-gc-dev mailing list