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

Vitaly Davidovich vitalyd at gmail.com
Mon Dec 12 18:37:01 UTC 2011


Hi John,

Yes makes total sense - I completely missed the n_queues arg in the
allocation (that's what I get for looking at this on my phone :)).  Sorry
for the noise.

Thanks,

Vitaly
On Dec 12, 2011 1:20 PM, "John Cuthbertson" <john.cuthbertson at oracle.com>
wrote:

> **
> 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>
> 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/
>
> 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/480a3c14/attachment.htm>


More information about the hotspot-gc-dev mailing list