RFR(M): 8202080: Introduce ordering semantics for Atomic::add and other RMW atomics
Doerr, Martin
martin.doerr at sap.com
Fri May 4 15:32:48 UTC 2018
Hi David,
thanks for your time. I understand that there's a lot of work at the moment.
I have removed memory_order_consume again. We don't need it for our platforms and I guess nobody will miss it.
I like your comment proposals, so I've updated them.
New webrev:
http://cr.openjdk.java.net/~mdoerr/8202080_atomic_add/webrev.02/
> Though that raises the question why you haven't added memory_order_seq_cst?
I think that one could easily be used incorrectly within hotspot which would lead to problems on PPC.
"Atomic operations tagged memory_order_seq_cst ... establish a single total modification order of all atomic operations that are so tagged." [1]
It should work fine if all involved accesses are "so tagged". But hotspot doesn't use seq_cst loads, it uses things like OrderAccess::load_acquire. On PPC, GCC and xlC don't use a trailing sync for seq_cst stores and RMW-atomics so they only work well with leading sync loads which are not used in hotspot code.
I believe that there's a substantial amount of work to be done to get this right.
Thanks,
Martin
[1] https://en.cppreference.com/w/cpp/atomic/memory_order#Sequentially-consistent_ordering
-----Original Message-----
From: David Holmes [mailto:david.holmes at oracle.com]
Sent: Freitag, 4. Mai 2018 08:09
To: Doerr, Martin <martin.doerr at sap.com>; hotspot-runtime-dev at openjdk.java.net
Subject: Re: RFR(M): 8202080: Introduce ordering semantics for Atomic::add and other RMW atomics
Hi Martin,
On 3/05/2018 11:03 PM, Doerr, Martin wrote:
> Hi Robbin,
>
> thank you for reviewing.
>
> Submission forest tests have passed in addition to SAP's nightly builds. I have 2 reviews, now, but I'll wait a little bit before pushing.
Thanks for waiting. I think it important there is a general buy-in to
this effort, not just the official "get a review and push". Apologies
that it's taken me a while to get to this.
memory_order_consume has been deprecated in C++17:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0371r1.html
I would suggest we not add it to the VM.
40 enum atomic_memory_order {
41 // We support most semantics like in C++11.
I would say something like:
// The modes that align with C++11 are intended to
// follow the same semantics.
47 // We need to be more conservative than seq_cst on PPC64.
Not sure the PPC64 comment is relevant here. memory_order_conservative
represents the pre-existing strong fencing requirements. It's not
intended to map to anything else, nor intended to be different across
platforms.
Though that raises the question why you haven't added memory_order_seq_cst?
Looking at all the platform code that adds the unused "order" parameter
... I would not be surprised if the forthcoming compiler upgrades result
in some additional "unused" warnings. But I guess we'll just deal with
them as they are discovered.
Otherwise all seems okay.
Thanks,
David
> Best regards,
> Martin
>
>
> -----Original Message-----
> From: Robbin Ehn [mailto:robbin.ehn at oracle.com]
> Sent: Donnerstag, 3. Mai 2018 14:29
> To: Doerr, Martin <martin.doerr at sap.com>; Schmidt, Lutz <lutz.schmidt at sap.com>; David Holmes <david.holmes at oracle.com>; Erik Österlund <erik.osterlund at oracle.com>; hotspot-runtime-dev at openjdk.java.net; Aleksey Shipilev <shade at redhat.com>; Lindenmaier, Goetz <goetz.lindenmaier at sap.com>; Michihiro Horie (HORIE at jp.ibm.com) <HORIE at jp.ibm.com>; Andrew Haley (aph at redhat.com) <aph at redhat.com>; John Paul Adrian Glaubitz <glaubitz at physik.fu-berlin.de>
> Subject: Re: RFR(M): 8202080: Introduce ordering semantics for Atomic::add and other RMW atomics
>
> On 2018-05-03 12:50, Doerr, Martin wrote:
>> Hi Lutz,
>>
>> thanks for reviewing.
>>
>> Can I get more reviews, please?
>
> I think this looks good, thanks for fixing!
>
> /Robbin
>
>>
>> Best regards,
>> Martin
>>
>>
>> -----Original Message-----
>> From: Schmidt, Lutz
>> Sent: Mittwoch, 2. Mai 2018 16:20
>> To: Doerr, Martin <martin.doerr at sap.com>; David Holmes <david.holmes at oracle.com>; Erik Österlund <erik.osterlund at oracle.com>; hotspot-runtime-dev at openjdk.java.net; Aleksey Shipilev <shade at redhat.com>; Lindenmaier, Goetz <goetz.lindenmaier at sap.com>; Michihiro Horie (HORIE at jp.ibm.com) <HORIE at jp.ibm.com>; Andrew Haley (aph at redhat.com) <aph at redhat.com>; John Paul Adrian Glaubitz <glaubitz at physik.fu-berlin.de>
>> Subject: Re: RFR(M): 8202080: Introduce ordering semantics for Atomic::add and other RMW atomics
>>
>> Hi Martin,
>>
>> your changes look good.
>>
>> For the additional synchronization on s390 in particular, I do not expect a serious performance impact. The checkpoint synchronization part has always been the expensive, but rarely required, part. PPC may be another story. We knoow that a full-blown sync really hurts. We will see...
>>
>> Thanks,
>> Lutz
>>
>> On 26.04.18, 16:23, "hotspot-runtime-dev on behalf of Doerr, Martin" <hotspot-runtime-dev-bounces at openjdk.java.net on behalf of martin.doerr at sap.com> wrote:
>>
>> Hi,
>>
>> I have renamed "cmpxchg_memory_order" to "atomic_memory_order" and added support to all Read-Modify-Write atomics with support for all C++11 semantics except seq_cst. The latter has issues on PPC64 so we're currently using our own memory_order_conservative instead, which is the default.
>>
>> Please review my new webrev:
>> http://cr.openjdk.java.net/~mdoerr/8202080_atomic_add/webrev.01/
>>
>> We'll test Windows, MacOS, linux x86+ppc64+s390, AIX and Solaris SPARC.
>> It'd be great if somebody could check arm/aarch64 and zero.
>>
>> This change may enable optimizations for arm/aarch64 (not yet included).
>>
>> Best regards,
>> Martin
>>
>>
>> -----Original Message-----
>> From: Doerr, Martin
>> Sent: Donnerstag, 26. April 2018 11:20
>> To: 'David Holmes' <david.holmes at oracle.com>; Erik Österlund <erik.osterlund at oracle.com>; hotspot-runtime-dev at openjdk.java.net; Aleksey Shipilev <shade at redhat.com>; Lindenmaier, Goetz <goetz.lindenmaier at sap.com>; Michihiro Horie (HORIE at jp.ibm.com) <HORIE at jp.ibm.com>
>> Subject: RE: RFR(M): 8202080: Introduce ordering semantics for Atomic::add
>>
>> Hi David,
>>
>> sounds like we are on the same page, now. I think we should have some kind of summary of what was analyzed. But that belongs to the other thread (JDK- 8154736).
>>
>> > The bugs in this kind of code are very subtle and rarely exposed through normal levels of testing.
>> Right. We have experienced this often enough. So it is definitely in our interest to have correct memory barriers. Mistakes will hit us (PPC64). So I appreciate that you insist on careful analysis.
>>
>> I'll prepare a new webrev with conservative semantics for all read-modify-write atomics by default.
>>
>> Best regards,
>> Martin
>>
>>
>>
More information about the hotspot-runtime-dev
mailing list