RFR: JDK-8061259: ParNew promotion failed is serialized on a lock

Bengt Rutisson bengt.rutisson at oracle.com
Thu Oct 30 07:09:40 UTC 2014

Hi Jungwoo,

On 2014-10-29 23:51, Jungwoo Ha wrote:
> http://cr.openjdk.java.net/~rasbold/8061259/webrev.01/ 
> <http://cr.openjdk.java.net/%7Erasbold/8061259/webrev.01/>
>     I've looked a bit at the webrev. A couple of comments:
>     Why do you use OrderAccess methods for writing and reading the
>     _has_promo_failed flag in has_promo_failed() and set_promot_failed() ?
> I think that has no effect on x86, but I assumed that processors with 
> weak memory model may want ordering of set/reset/has call.

You don't need the OrderAccess methods for the weak memory models here 
either. You just race on reading the variable and if you see the "wrong" 
value you eventually take a lock (which will order all memory accesses) 
to read the variable properly.

By removing the use of OrderAccess you can make 
ConcurrentMarkSweepGeneration::_has_promotion_failed a bool instead of a 
juint which simplifies the code a bit.

>     Can we write out the full word "promotion" instead of just "promo"
>     in the variables and methods?
> Done.
>     Can we change the name of the flag from UseCMSFastPromotionFailure
>     to CMSFastPromotionFailure? Most CMS flags start with CMS and I
>     don't think we need the "Use" prefix.
> Done.
>     What do you think about making the flag true by default? At least
>     for JDK 9. If we decide to backport to JDK 8 or 7 it might be a
>     good idea to keep the default value as false.
> Done.
> Let me know if there is anything for me to do to backport to JDK8 and 7.

I think this fix would be worth backporting to JDK 8. I don't think 
there is much action required on your side. I created a backport bug for 
JDK 8 just to make sure that we don't forget it. It will be a little 
while before the 8 update repos are in a state to accept enhancements 
again. So, it is nice to have the backport bug to keep track of this.

Backporting to JDK 7 requires some more work. Unless you have good 
arguments for why it is important to backport this to JDK 7 I don't 
think it is worth doing.

>     Did you find the information provided by
>     _fast_promo_failure_hitcount useful for debugging? If it not too
>     useful I would consider removing it since it is cluttering up the
>     code a bit.
> I removed it.
> It was useful to for development, but I think it is no longer needed.

Great. Thanks.

One more comment. This code comment appears in two places just after we 
have taken the lock.

3365   if (CMSFastPromotionFailure && has_promotion_failed()) {
3366     // Caller must have checked already without synchronization.
3367     // Check again here while holding the lock.
3368     return NULL;
3369   }

There is actually really no requirement that the caller must have 
checked has_promotion_failed() before calling the method. That's just an 
optimization. I think the first comment can be skipped and we just leave 
the second comment "// Check again here while holding the lock.". I 
would also suggest moving that comment up to the line just before the if 



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

More information about the hotspot-gc-dev mailing list