All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mark McLoughlin <markmc@redhat.com>
To: Emmanuel Lacour <elacour@easter-eggs.com>
Cc: kvm@vger.kernel.org
Subject: Re: virtio_net hang
Date: Wed, 19 Nov 2008 19:03:09 +0000	[thread overview]
Message-ID: <1227121389.3698.136.camel@blaa> (raw)
In-Reply-To: <1227100432.3698.47.camel@blaa>

On Wed, 2008-11-19 at 13:13 +0000, Mark McLoughlin wrote:
> On Tue, 2008-11-18 at 19:37 +0100, Emmanuel Lacour wrote:
> > On Fri, Nov 14, 2008 at 06:26:44PM +0000, Mark McLoughlin wrote:
> > > 
> > > Right, the tap device tx queue is full because kvm-userspace isn't
> > > reading packets from it.
> > > 
> > > This could be because kvm-userspace has just stopped noticing that
> > > there's data available from the tapfd or because virtio_net in the guest
> > > has stopped noticing that packets are available in the ring.
> > > 
> > > One thing you could easily check is whether:
> > > 
> > >   ip link set eth0 down
> > >   ip link set eth0 up
> > > 
> > > in the host is sufficient to fix it? If it is, then it points to a guest
> > > driver issue.
> > > 
> > 
> > I made the test, putting link down then up fix it.
> 
> Thanks, that's very interesting.
> 
> Since bringing the interface up and down basically just causes the
> driver to re-schedule itself with NAPI, all I can see as a possibility
> is that we somehow (e.g. a race condition) had gotten ourselves into a
> state where we have rx ring interrupts disabled and we're not scheduled
> with NAPI.
> 
> We synchronise around the NAPI_STATE_SCHED bit with atomic operations
> and all the logic looks correct ... so I'm stumped, really.

I had a look at Emmanuel's strace log and it shows that qemu isn't
selecting on the tapfd, presumably because virtio_net_can_receive() sees
that we've exhausted all available receive buffers.

When qemu does poll the tapfd (after an ifdown/ifup in the guest), there
are a load of packets waiting in the queue and things proceed as normal.

That still jives with the theory that we're somehow getting into a state
where NAPI polling is de-scheduled while guest rx interrupts are also
disabled.

> Is it possible for you to try a newer guest kernel?

If you can try a newer kernel, or even try some debugging patches, that
would help a lot.

Cheers,
Mark.



  reply	other threads:[~2008-11-19 19:04 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-11-13 12:27 virtio_net hang Emmanuel Lacour
2008-11-13 13:04 ` Daniel P. Berrange
2008-11-13 13:15   ` Emmanuel Lacour
2008-11-13 15:12 ` Mark McLoughlin
2008-11-13 15:24   ` Emmanuel Lacour
2008-11-14  9:23     ` Emmanuel Lacour
2008-11-14 18:26       ` Mark McLoughlin
2008-11-18 18:37         ` Emmanuel Lacour
2008-11-18 18:48           ` Emmanuel Lacour
2008-11-19 13:13           ` Mark McLoughlin
2008-11-19 19:03             ` Mark McLoughlin [this message]
2008-11-20 11:36               ` Emmanuel Lacour
2008-11-21  8:38                 ` Emmanuel Lacour
2008-11-22 14:20                   ` Emmanuel Lacour
2008-11-21 14:44                 ` Guido Günther
2008-11-20 11:34             ` Emmanuel Lacour
2008-11-13 18:27 ` Fabio Coatti

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=1227121389.3698.136.camel@blaa \
    --to=markmc@redhat.com \
    --cc=elacour@easter-eggs.com \
    --cc=kvm@vger.kernel.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.