RFR(M): 8154736: enhancement of cmpxchg and copy_to_survivor for ppc64
David Holmes
david.holmes at oracle.com
Mon May 21 02:16:12 UTC 2018
Hi Michihiro,
An initial question ...
Can you clarify the assumptions/expectations with regard to
Release-Consume given it has been deprecated by the C++ committee?
memory_order_release is expected to be C++ compatible.
Thanks,
David
On 19/05/2018 1:12 AM, Michihiro Horie wrote:
> Dear all,
>
> I update the webrev: http://cr.openjdk.java.net/~mhorie/8154736/webrev.09/
>
> With the release barrier before the CAS, new_obj can be observed from
> other threads. If the CAS succeeds, the current thread can use new_obj
> without barriers. If the CAS fails, "o->forwardee()" is ordered with
> respect to CAS by accessing the same memory location "_mark", so no
> barriers needed. The order of (1) access to the forwardee and (2) access
> to forwardee's fields is preserved due to Release-Consume ordering on
> supported platforms. (The ordering between "new_obj = o->forwardee();"
> and logging or other usages is not changed.)
>
> Regarding the maintainability, the requirement is
> CAS(memory_order_release) as Release-Consume to be consistent with
> C++11. This requirement is necessary when a weaker platform like DEC
> Alpha is to be supported. On currently supported platforms, code change
> can be safe if the code meats this requirement (and the order of (1)
> access to the forwardee and (2) access to forwardee's fields is the
> natural way of coding).
>
>
> oop PSPromotionManager::copy_to_survivor_space(oop o) {
> oop new_obj = NULL;
> markOop test_mark = o->mark_raw();
>
> if (!test_mark->is_marked()) { // The same test as "o->is_forwarded()"
> :
> Copy::aligned_disjoint_words((HeapWord*)o, (HeapWord*)new_obj, ...);
>
> if (o->cas_forward_to(new_obj, test_mark)) { // CAS succeeds
> :
> new_obj->push_contents(this);
>
> } else { // CAS fails
> :
> new_obj = o->forwardee();
> }
> } else {
> :
> new_obj = o->forwardee();
> }
>
> log_develop_trace(gc, scavenge)(..., new_obj->klass()->internal_name(),
> p2i((void *)o), p2i((void *)new_obj), new_obj->size());
> return new_obj;
> }
>
>
> Best regards,
> --
> Michihiro,
> IBM Research - Tokyo
>
>
> ----- Original message -----
> From: Kim Barrett <kim.barrett at oracle.com>
> To: David Holmes <david.holmes at oracle.com>
> Cc: Michihiro Horie <HORIE at jp.ibm.com>,
> ppc-aix-port-dev at openjdk.java.net, hotspot-dev at openjdk.java.net,
> hotspot-gc-dev at openjdk.java.net, Hiroshi H Horii <HORII at jp.ibm.com>
> Subject: Re: RFR(M): 8154736: enhancement of cmpxchg and
> copy_to_survivor for ppc64
> Date: Fri, Apr 27, 2018 6:03 AM
>
> > On Apr 25, 2018, at 8:45 AM, David Holmes <david.holmes at oracle.com>
> wrote:
> >
> > Hi Michihiro,
> >
> > On 23/04/2018 8:33 PM, Michihiro Horie wrote:
> >> Dear all,
> >> I would like to ask reviews on 8154736 “enhancement of cmpxchg and
> >> copy_to_survivor”. The change adds options to avoid expensive syncs with
> >> compare-and-exchange. An experiment by using SPECjbb2015 showed 6%
> >> improvement in critical-jOPS. This change focuses on ppc64 but would be
> >> potentially beneficial for aarch64.
> >> Although discussions stopped at
> >>
> _http://mail.openjdk.java.net/pipermail/ppc-aix-port-dev/2016-October/002718.html_
> >> , I would like to restart the review by taking over Hiroshi's work
> if the
> >> discussion is still open.
> >
> > So the very last comment there was about not implicitly assuming
> memory_order_consume, yet that has not been addressed in the proposal.
> >
> > Further the discussion on hotspot-runtime-dev through September and
> October was far more illuminating. I think my post here:
> >
> >
> _http://mail.openjdk.java.net/pipermail/hotspot-runtime-dev/2016-October/021617.html_
> >
> > and the closely following one from Thomas Schatzl summed up the
> concerns about the proposed changes.
> >
> > AFAICS the restarted proposal addresses none of those concerns but
> simply takes up where the previous implementation suggestion left off.
> >
> > This is a proposal to change the memory ordering semantics of part of
> the shared GC code _not_ just the PPC64 implementation, but I have seen
> no analysis to demonstrate the correctness of such a proposal.
>
> I agree with David here. So far we've seen no such analysis. All we
> have seen is a series of proposed changes and non-failing test
> results, all of which have then been shown to have holes. (Among other
> things, this suggests the set of tests being applied is inadequate.)
> Part of the author's job is to convince reviewers that the proposed
> change is correct. I'm not expecting a formal proof, but I am
> expecting a lot more than has been provided so far.
>
> In this latest proposal, the conditional acquire doesn't look right to
> me. If the logging is disabled so there is no acquire, the object is
> then returned to the callers, who might do what with it? Is that safe?
> For all callers? And is it stable through future maintenance? This is
> not to say that I think making those acquires unconditional is
> sufficient.
>
>
More information about the ppc-aix-port-dev
mailing list