RFR(M): 8154736: enhancement of cmpxchg and copy_to_survivor for ppc64

David Holmes david.holmes at oracle.com
Mon Oct 31 21:30:19 UTC 2016



On 31/10/2016 7:32 PM, Andrew Haley wrote:
> On 30/10/16 21:26, David Holmes wrote:
>> On 31/10/2016 4:36 AM, Andrew Haley wrote:
>>>
>>> And, while we're on the subject, is memory_order_conservative actually
>>> defined anywhere?
>>
>> No. It was chosen to represent the current status quo that the Atomic::
>> ops should all be (by default) full bi-directional fences.
>
> Does that mean that a CAS is actually stronger than a load acquire
> followed by a store release?  And that a CAS is a release fence even
> when it fails and no store happens?

Yes. Yes.

   // All of the atomic operations that imply a read-modify-write action
   // guarantee a two-way memory barrier across that operation. Historically
   // these semantics reflect the strength of atomic operations that are
   // provided on SPARC/X86. We assume that strength is necessary unless
   // we can prove that a weaker form is sufficiently safe.

But there is some contention as to whether the actual implementations 
obey this completely.

>
> And that a conservative load is a *store* barrier?

Not sure what you mean. Atomic::load is not a r-m-w action so not 
expected to be a two-way memory barrier.

>> It is a place holder until this memory order stuff is fleshed out in
>> hotspot. We didn't adopt C++ memory_order_seq_cst as is isn't
>> obvious that actually matches our current semantics. At least it
>> isn't obvious to me.
>
> It's not obvious to me either, because I don't know what our current
> semantics are.  But I believe that if we need anything stronger than
> sequential consistency we should look at fixing the callers of the
> Atomic:: ops.  But I guess the real problem is that we don't know
> which callers actually need the super-strong guarantees, or even that
> any exist.

Indeed. I don't know how to reliably analyse all uses to determine what 
"strength" is needed, or what features of that code enable, or reject, 
use of a particular strength. Ref the current discussions.

David

> Andrew.
>



More information about the hotspot-gc-dev mailing list