[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 1/2] atomics: do not use __atomic primitives for
From: |
Emilio G. Cota |
Subject: |
Re: [Qemu-devel] [PATCH 1/2] atomics: do not use __atomic primitives for RCU atomics |
Date: |
Mon, 23 May 2016 11:55:10 -0400 |
User-agent: |
Mutt/1.5.23 (2014-03-12) |
On Mon, May 23, 2016 at 16:21:36 +0200, Paolo Bonzini wrote:
> On 21/05/2016 22:42, Emilio G. Cota wrote:
> > Commit a0aa44b4 ("include/qemu/atomic.h: default to __atomic functions")
> > set all atomics to default (on recent GCC versions) to __atomic primitives.
> >
> > In the process, the atomic_rcu_read/set were converted to implement
> > consume/release semantics, respectively. This is inefficient; for
> > correctness and maximum performance we only need an smp_barrier_depends
> > for reads, and an smp_wmb for writes. Fix it by using the original
> > definition of these two primitives for all compilers.
>
> Indeed most compilers implement consume the same as acquire, which is
> inefficient.
> However, isn't in practice atomic_thread_fence(release) +
> atomic_store(relaxed) the same as atomic_store(release)?
Yes. However this is not the issue I'm addressing with the patch.
The performance regression I measured is due to using load-acquire vs.
load+smp_read_barrier_depends(). In the latter case only Alpha will
emit a fence; in the former we always emit store-release, which
is "stronger" (i.e. more constraining.)
A similar thing applies to atomic_rcu_write, although I haven't
measured its impact. We only need smp_wmb+store, yet we emit a
store-release, which is again "stronger".
E.
- [Qemu-devel] [PATCH 0/2] atomics: fix small RCU perf. regression + update documentation, Emilio G. Cota, 2016/05/21
- [Qemu-devel] [PATCH 1/2] atomics: do not use __atomic primitives for RCU atomics, Emilio G. Cota, 2016/05/21
- Re: [Qemu-devel] [PATCH 1/2] atomics: do not use __atomic primitives for RCU atomics, Alex Bennée, 2016/05/22
- Re: [Qemu-devel] [PATCH 1/2] atomics: do not use __atomic primitives for RCU atomics, Paolo Bonzini, 2016/05/23
- Re: [Qemu-devel] [PATCH 1/2] atomics: do not use __atomic primitives for RCU atomics,
Emilio G. Cota <=
- Re: [Qemu-devel] [PATCH 1/2] atomics: do not use __atomic primitives for RCU atomics, Richard Henderson, 2016/05/23
- Re: [Qemu-devel] [PATCH 1/2] atomics: do not use __atomic primitives for RCU atomics, Emilio G. Cota, 2016/05/23
- Re: [Qemu-devel] [PATCH 1/2] atomics: do not use __atomic primitives for RCU atomics, Paolo Bonzini, 2016/05/24
- Re: [Qemu-devel] [PATCH 1/2] atomics: do not use __atomic primitives for RCU atomics, Emilio G. Cota, 2016/05/24
- Re: [Qemu-devel] [PATCH 1/2] atomics: do not use __atomic primitives for RCU atomics, Sergey Fedorov, 2016/05/24
- Re: [Qemu-devel] [PATCH 1/2] atomics: do not use __atomic primitives for RCU atomics, Alex Bennée, 2016/05/25
- Re: [Qemu-devel] [PATCH 1/2] atomics: do not use __atomic primitives for RCU atomics, Sergey Fedorov, 2016/05/25
[Qemu-devel] [PATCH 2/2] docs/atomics: update atomic_read/set comparison with Linux, Emilio G. Cota, 2016/05/21