qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Michael S. Tsirkin" <mst@redhat.com>
To: Peter Zijlstra <peterz@infradead.org>
Cc: qemu-devel@nongnu.org, Jason Wang <jasowang@redhat.com>,
	linux-kernel@vger.kernel.org,
	virtualization@lists.linux-foundation.org
Subject: Re: [Qemu-devel] [PATCH] virtio_ring: use smp_store_mb
Date: Thu, 17 Dec 2015 15:26:29 +0200	[thread overview]
Message-ID: <20151217151705-mutt-send-email-mst@redhat.com> (raw)
In-Reply-To: <20151217112222.GC6375@twins.programming.kicks-ass.net>

On Thu, Dec 17, 2015 at 12:22:22PM +0100, Peter Zijlstra wrote:
> On Thu, Dec 17, 2015 at 12:32:53PM +0200, Michael S. Tsirkin wrote:
> > Seems to give a speedup on my box but I'm less sure about this one.  E.g. as
> > xchng faster than mfence on all/most intel CPUs? Anyone has an opinion?
> 
> Would help if you Cc people who would actually know this :-)

Good point. Glad you still saw this. Thanks!

> Yes, we've recently established that xchg is indeed faster than mfence
> on at least recent machines, see:
> 
>   lkml.kernel.org/r/CA+55aFynbkeuUGs9s-q+fLY6MeRBA6MjEyWWbbe7A5AaqsAknw@mail.gmail.com
> 
> > +static inline void virtio_store_mb(bool weak_barriers,
> > +				   __virtio16 *p, __virtio16 v)
> > +{
> > +#ifdef CONFIG_SMP
> > +	if (weak_barriers)
> > +		smp_store_mb(*p, v);
> > +	else
> > +#endif
> > +	{
> > +		WRITE_ONCE(*p, v);
> > +		mb();
> > +	}
> > +}
> 
> Note that virtio_mb() is weirdly inconsistent with virtio_[rw]mb() in
> that they use dma_* ops for weak_barriers, while virtio_mb() uses
> smp_mb().

It's a hack really. I think I'll clean it up a bit to
make it more consistent.

To simplify things, you may consider things before
the optimization brought in by
	commit 9e1a27ea42691429e31f158cce6fc61bc79bb2e9
	Author: Alexander Duyck <alexander.h.duyck@redhat.com>
	Date:   Mon Apr 13 21:03:49 2015 +0930

	    virtio_ring: Update weak barriers to use dma_wmb/rmb

> As previously stated, smp_mb() does not cover the same memory domains as
> dma_mb() would.

I know.  We used to consistently do the right thing on SMP,
but on UP Linux does not have good portable APIs for us
to use. So we hack around with what's available which is
typically stronger than what's really needed.

I guess no one cares about UP that much.

The Alexander came and tried to optimize UP using
dma_wmb/dma_rmb. I guess he did not find dma_mb so
left it as is.

Maybe we should make virtio depend on SMP, and be done with it,
but the amount of code to maintain !SMP is small enough
to not be worth the potential pain to users (if any).



-- 
MST

  reply	other threads:[~2015-12-17 13:26 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-12-17 10:32 [Qemu-devel] [PATCH] virtio_ring: use smp_store_mb Michael S. Tsirkin
2015-12-17 10:52 ` Peter Zijlstra
2015-12-17 13:16   ` Michael S. Tsirkin
2015-12-17 13:57     ` Peter Zijlstra
2015-12-17 14:33       ` Michael S. Tsirkin
2015-12-17 14:39         ` Peter Zijlstra
2015-12-17 14:43           ` Michael S. Tsirkin
2015-12-20  9:25           ` [Qemu-devel] new barrier type for paravirt (was Re: [PATCH] virtio_ring: use smp_store_mb) Michael S. Tsirkin
2015-12-20 17:07             ` [Qemu-devel] [Xen-devel] " Andrew Cooper
2015-12-20 19:59               ` Peter Zijlstra
2015-12-21  7:10                 ` Michael S. Tsirkin
2015-12-21  7:22                   ` [Qemu-devel] [PATCH RFC] smp_store_mb should use smp_mb Michael S. Tsirkin
2015-12-21 10:47             ` [Qemu-devel] [Xen-devel] new barrier type for paravirt (was Re: [PATCH] virtio_ring: use smp_store_mb) David Vrabel
2015-12-21 11:52               ` Michael S. Tsirkin
2015-12-21 14:50               ` Stefano Stabellini
2015-12-17 11:22 ` [Qemu-devel] [PATCH] virtio_ring: use smp_store_mb Peter Zijlstra
2015-12-17 13:26   ` Michael S. Tsirkin [this message]
2015-12-17 14:02     ` Peter Zijlstra
2015-12-17 14:34       ` Michael S. Tsirkin
2015-12-17 15:09         ` Peter Zijlstra
2015-12-17 15:52           ` Will Deacon
2015-12-17 19:21             ` Michael S. Tsirkin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20151217151705-mutt-send-email-mst@redhat.com \
    --to=mst@redhat.com \
    --cc=jasowang@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=peterz@infradead.org \
    --cc=qemu-devel@nongnu.org \
    --cc=virtualization@lists.linux-foundation.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).