virtualization.lists.linux-foundation.org archive mirror
 help / color / mirror / Atom feed
From: "Michael S. Tsirkin" <mst@redhat.com>
To: Eric Dumazet <eric.dumazet@gmail.com>
Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org,
	virtualization@lists.linux-foundation.org,
	Stephen Hemminger <shemminger@vyatta.com>
Subject: Re: [PATCH] virtio-net: fix a race on 32bit arches
Date: Wed, 6 Jun 2012 19:57:55 +0300	[thread overview]
Message-ID: <20120606165754.GA19357@redhat.com> (raw)
In-Reply-To: <1338995944.26966.6.camel@edumazet-glaptop>

On Wed, Jun 06, 2012 at 05:19:04PM +0200, Eric Dumazet wrote:
> On Wed, 2012-06-06 at 17:49 +0300, Michael S. Tsirkin wrote:
> > On Wed, Jun 06, 2012 at 03:10:10PM +0200, Eric Dumazet wrote:
> > > On Wed, 2012-06-06 at 14:13 +0300, Michael S. Tsirkin wrote:
> > > 
> > > > We currently do all stats either on napi callback or from
> > > > start_xmit callback.
> > > > This makes them safe, yes?
> > > 
> > > Hmm, then _bh() variant is needed in virtnet_stats(), as explained in
> > > include/linux/u64_stats_sync.h section 6)
> > > 
> > >  * 6) If counter might be written by an interrupt, readers should block interrupts.
> > >  *    (On UP, there is no seqcount_t protection, a reader allowing interrupts could
> > >  *     read partial values)
> > > 
> > > Yes, its tricky...
> > 
> > Sounds good, but I have a question: this realies on counters
> > being atomic on 64 bit.
> > Would not it be better to always use a seqlock even on 64 bit?
> > This way counters would actually be correct and in sync.
> > As it is if we want e.g. average packet size,
> > we can not rely e.g. on it being bytes/packets.
> 
> When this stuff was discussed, we chose to have a nop on 64bits.
> 
> Your point has little to do with 64bit stats, it was already like that
> with 'long int' counters.
> 
> Consider average driver doing :
> 
> dev->stats.rx_bytes += skb->len;
> dev->stats.rx_packets++;
> 
> A concurrent reader can read an updated rx_bytes and a 'previous'
> rx_packets one.
> 
> 'fixing' this requires a lot of work and memory barriers (in all
> drivers), for a very litle gain (at most one packet error)
> 
> u64_stats_sync was really meant to be 0-cost on 64bit arches.
> 



So for virtio since all counters get incremented from bh we can
ensure they are read atomically, simply but reading them
from the correct CPU with bh disabled.
And then we don't need u64_stats_sync at all.

-- 
MST

  parent reply	other threads:[~2012-06-06 16:57 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-06-06  8:35 [PATCH] virtio-net: fix a race on 32bit arches Eric Dumazet
2012-06-06  8:45 ` Eric Dumazet
2012-06-06  9:37   ` Jason Wang
2012-06-06 11:13   ` Michael S. Tsirkin
2012-06-06 13:10     ` Eric Dumazet
2012-06-06 14:49       ` Michael S. Tsirkin
2012-06-06 15:14         ` Stephen Hemminger
2012-06-06 15:19         ` Eric Dumazet
2012-06-06 16:17           ` Michael S. Tsirkin
2012-06-06 17:13             ` Eric Dumazet
     [not found]             ` <1339002782.26966.22.camel@edumazet-glaptop>
2012-06-06 18:43               ` Michael S. Tsirkin
2012-06-06 20:06                 ` Eric Dumazet
2012-06-06 20:19                   ` Michael S. Tsirkin
2012-06-06 16:57           ` Michael S. Tsirkin [this message]
2012-06-06 20:00             ` Eric Dumazet
     [not found]         ` <20120606081432.6b602065@nehalam.linuxnetplumber.net>
2012-06-06 18:51           ` Michael S. Tsirkin
2012-06-06 19:54             ` Eric Dumazet
     [not found]             ` <1339012441.26966.48.camel@edumazet-glaptop>
2012-06-06 19:58               ` Michael S. Tsirkin
2012-06-06 20:08                 ` Eric Dumazet
2012-06-06 20:16                   ` Michael S. Tsirkin
2012-06-06 20:24                     ` Eric Dumazet
2012-06-06 20:38                       ` Eric Dumazet
2012-06-06 20:35                     ` Ben Hutchings
2012-06-06 20:43                       ` Michael S. Tsirkin
2012-06-06 20:19                   ` Ben Hutchings
     [not found]                   ` <1339013979.2836.52.camel@bwh-desktop.uk.solarflarecom.com>
2012-06-06 20:25                     ` Eric Dumazet
2012-06-10  6:36   ` Rusty Russell
2012-06-10  7:03     ` Michael S. Tsirkin
2012-06-10 10:21       ` Eric Dumazet
2012-06-10 10:22         ` Michael S. Tsirkin
2012-06-10 10:25 ` Michael S. Tsirkin
2012-06-11  3:23   ` David Miller

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=20120606165754.GA19357@redhat.com \
    --to=mst@redhat.com \
    --cc=eric.dumazet@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=shemminger@vyatta.com \
    --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).