RFR: 8275718: Relax memory constraint on exception counter updates
David Holmes
david.holmes at oracle.com
Wed Nov 3 12:09:52 UTC 2021
On 1/11/2021 7:16 pm, Aleksey Shipilev wrote:
> On Thu, 21 Oct 2021 15:16:28 GMT, Zhengyu Gu <zgu at openjdk.org> wrote:
>
>> This is another instance of counter updates that only need atomic guarantee.
>
> (I am not arguing in favor or against this particular change, but I think we can talk a bit about generic stuff here...)
>
>> I don't know where this guarantee is coming from. Two r-m-w atomic ops must have some guarantee via coherence for the atomic op to actually work. And an implementation could make any atomic r-m-w implementation ensure global immediate visibility. But you cannot assume this is guaranteed for all hardware. Even for a given platform this would need to be a specified guarantee in the architecture manual, not just something deduced/inferred by reasoning.
>
> Hotspot's `memory_order_relaxed` is [aligned](https://github.com/openjdk/jdk/blob/5bb1992b8408a0d196b1afa308bc00d007458dbd/src/hotspot/share/runtime/atomic.hpp#L44-L45) with C++11 atomics semantics. C++11 atomic semantics for relaxed atomic ops requires [single modification order consistency](https://en.cppreference.com/w/cpp/atomic/memory_order#Relaxed_ordering), which implies [coherence](https://en.cppreference.com/w/cpp/atomic/memory_order#Modification_order).
>
> All known hardware platforms provide coherence out of the box (they are, indeed, cache-coherent platforms), that's why it is easy to implement in C++ (`mo_relaxed`) and in Java (`VarHandles.(get|set)opaque`).
>
> I am always confused by "immediate global visibility". The problem with statements that include "immediate", "before", "after" is that they leak in the notion of time, which is ill-defined for a single memory location without any reference to other variables. Maybe you can expand your concern with the example?
Let me back up to be clear. I stated that memory-order-conservative
might lower the chances (in a general platform-agnostic way) of seeing a
stale value, compared to memory-order-relaxed, due to the stronger
memory fence/barrier operation it implies. The response to that was:
"value updated via atomic r-m-w operation should be visible to other
threads guaranteed by coherence protocol"
claiming that visibility guarantees were inherently present due to
coherence regardless of what kind of memory fence/barrier were
associated with the r-m-w atomic operation. I'm not sure if that is
actually true. If it is true then we would not need any memory-order
parameter on the r-m-w atomic operations because they would be all be
the same due to this underlying coherence property.
When I said "immediate global visibility" I was referring to a situation
where once the write in the r-m-w atomic op had occurred then all
subsequent reads would see the value of that write. It is true that such
a thing may not require "immediacy" in a temporal sense, but the net
effect is the same.
David
-----
> -------------
>
> PR: https://git.openjdk.java.net/jdk/pull/6065
>
More information about the hotspot-dev
mailing list