All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Michael S. Tsirkin" <mst@redhat.com>
To: Fam Zheng <famz@redhat.com>
Cc: Kevin Wolf <kwolf@redhat.com>,
	qemu-devel@nongnu.org, Amit Shah <amit.shah@redhat.com>,
	"Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>,
	Stefan Hajnoczi <stefanha@redhat.com>,
	Cornelia Huck <cornelia.huck@de.ibm.com>,
	Paolo Bonzini <pbonzini@redhat.com>
Subject: Re: [Qemu-devel] [PATCH 00/18] virtio-blk: Support "VIRTIO_CONFIG_S_NEEDS_RESET"
Date: Tue, 21 Apr 2015 11:59:30 +0200	[thread overview]
Message-ID: <20150421115819-mutt-send-email-mst@redhat.com> (raw)
In-Reply-To: <20150421091653.GI21030@fam-t430.nay.redhat.com>

On Tue, Apr 21, 2015 at 05:16:53PM +0800, Fam Zheng wrote:
> On Tue, 04/21 11:08, Cornelia Huck wrote:
> > On Tue, 21 Apr 2015 16:38:31 +0800
> > Fam Zheng <famz@redhat.com> wrote:
> > 
> > > On Tue, 04/21 10:04, Cornelia Huck wrote:
> > > > On Tue, 21 Apr 2015 15:44:02 +0800
> > > > Fam Zheng <famz@redhat.com> wrote:
> > > > 
> > > > > On Mon, 04/20 17:13, Cornelia Huck wrote:
> > > > > > On Fri, 17 Apr 2015 15:59:15 +0800
> > > > > > Fam Zheng <famz@redhat.com> wrote:
> > > > > > 
> > > > > > > Currently, virtio code chooses to kill QEMU if the guest passes any invalid
> > > > > > > data with vring. That has drawbacks such as losing unsaved data (e.g. when
> > > > > > > guest user is writing a very long email), or possible denial of service in
> > > > > > > a nested vm use case where virtio device is passed through.
> > > > > > > 
> > > > > > > virtio-1 has introduced a new status bit "NEEDS RESET" which could be used to
> > > > > > > improve this by communicating the error state between virtio devices and
> > > > > > > drivers. The device notifies guest upon setting the bit, then the guest driver
> > > > > > > should detect this bit and report to userspace, or recover the device by
> > > > > > > resetting it.
> > > > > > > 
> > > > > > > This series makes necessary changes in virtio core code, based on which
> > > > > > > virtio-blk is converted. Other devices now keep the existing behavior by
> > > > > > > passing in "error_abort". They will be converted in following series. The Linux
> > > > > > > driver part will also be worked on.
> > > > > > > 
> > > > > > > One concern with this behavior change is that it's now harder to notice the
> > > > > > > actual driver bug that caused the error, as the guest continues to run.  To
> > > > > > > address that, we could probably add a new error action option to virtio
> > > > > > > devices,  similar to the "read/write werror" in block layer, so the vm could be
> > > > > > > paused and the management will get an event in QMP like pvpanic.  This work can
> > > > > > > be done on top.
> > > > > > 
> > > > > > In principle, this looks nice; I'm not sure however how this affects
> > > > > > non-virtio-1 devices.
> > > > > > 
> > > > > > If a device is operating in virtio-1 mode, everything is clearly
> > > > > > specified: The guest is notified and if it is aware of the NEEDS_RESET
> > > > > > bit, it can react accordingly.
> > > > > > 
> > > > > > But what about legacy devices? Even if they are notified, they don't
> > > > > > know to check for NEEDS_RESET - and I'm not sure if the undefined
> > > > > > behaviour after NEEDS_RESET might lead to bigger trouble than killing
> > > > > > off the guest.
> > > > > > 
> > > > > 
> > > > > The device should become unresponsive to VQ output until guest issues a reset
> > > > > through bus commands.  Do you have an example of "big trouble" in mind?
> > > > 
> > > > I'm not sure what's supposed to happen if NEEDS_RESET is set but not
> > > > everything is fenced off. The guest may see that queues have become
> > > > unresponsive, but if we don't stop ioeventfds and fence off
> > > > notifications, it may easily get into an undefined state internally.
> > > 
> > > Yeah, disabling ioeventfds and notifications is a good idea.
> > > 
> > > > And if it is connected to other guests via networking, having it limp
> > > > on may be worse than just killing it off. (Which parts of the data have
> > > > been cleanly written to disk and which haven't?
> > > 
> > > Well, we don't know that even without this series, do we?
> > 
> > We know it hasn't, as the guest is dead :)
> > 
> > > 
> > > > How is it going to get
> > > > out of that pickle if it has no good idea of what is wrong?
> > > 
> > > If it's virtio-1 compatible, it can reset the device or mark the device
> > > ususable, either way guest gets a chance to save the work.
> > 
> > My problem is not with virtio-1 devices; although data certainly can't
> > be written if the device has become unusable.
> > 
> > > 
> > > If it's not, it's merely an unresponsive device, and guest user can
> > > reboot/shutdown.
> > 
> > But how does any management software know? If I'm logged into a system
> > and I notice that saving my data doesn't complete, I can trigger an
> > action (although reboot/shutdown may not work anymore if too many
> > threads are waiting on writeback), but how can an automation system
> > know? It is probably more useful for those setups to have a hard stop
> > if recovery is not possible - and for legacy systems, that means
> > killing the guest afaics.
> > 
> > > 
> > > > 
> > > > If I have to debug a non-working guest, I prefer a crashed one with a
> > > > clean state over one that has continued running after the error
> > > > occurred.
> > > 
> > > For debugging purpose, crashing is definitely fine (even better :), but only
> > > because we won't have critical applications in guest. 
> > 
> > I would argue even for critical applications. They should have a second
> > guest as backup :)
> > 
> > > It makes sense to user to
> > > avoid the overkiller "exit(1)"'s in QEMU. They don't even generate a core file.
> > 
> > Let's keep dying, but use abort? Would that help?
> > 
> > > And even if they do, it would be much more painful to recover an unsaved
> > > libreoffice document from a memory core.
> > 
> > See my reply above.
> > 
> > My concern is mainly about legacy setups that aren't used interactively.
> > 
> 
> How about pausing guest and generating an QMP event?
> 
> Fam

This can be an option, default should be backeards-compatible though.

-- 
MST

  parent reply	other threads:[~2015-04-21  9:59 UTC|newest]

Thread overview: 54+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-04-17  7:59 [Qemu-devel] [PATCH 00/18] virtio-blk: Support "VIRTIO_CONFIG_S_NEEDS_RESET" Fam Zheng
2015-04-17  7:59 ` [Qemu-devel] [PATCH 01/18] virtio: Return error from virtqueue_map_sg Fam Zheng
2015-04-17  7:59 ` [Qemu-devel] [PATCH 02/18] virtio: Return error from virtqueue_num_heads Fam Zheng
2015-04-17  7:59 ` [Qemu-devel] [PATCH 03/18] virtio: Return error from virtqueue_get_head Fam Zheng
2015-04-21  6:27   ` Michael S. Tsirkin
2015-04-17  7:59 ` [Qemu-devel] [PATCH 04/18] virtio: Return error from virtqueue_next_desc Fam Zheng
2015-04-21  6:37   ` Michael S. Tsirkin
2015-04-21  7:30     ` Fam Zheng
2015-04-21  9:56       ` Michael S. Tsirkin
2015-04-17  7:59 ` [Qemu-devel] [PATCH 05/18] virtio: Return error from virtqueue_get_avail_bytes Fam Zheng
2015-04-17  7:59 ` [Qemu-devel] [PATCH 06/18] virtio: Return error from virtqueue_pop Fam Zheng
2015-04-21  6:49   ` Michael S. Tsirkin
2015-04-21  7:24     ` Fam Zheng
2015-04-21  9:51       ` Michael S. Tsirkin
2015-04-17  7:59 ` [Qemu-devel] [PATCH 07/18] virtio: Return error from virtqueue_avail_bytes Fam Zheng
2015-04-17  7:59 ` [Qemu-devel] [PATCH 08/18] virtio: Return error from virtio_add_queue Fam Zheng
2015-04-17  7:59 ` [Qemu-devel] [PATCH 09/18] virtio: Return error from virtio_del_queue Fam Zheng
2015-04-17  7:59 ` [Qemu-devel] [PATCH 10/18] virtio: Add macro for VIRTIO_CONFIG_S_NEEDS_RESET Fam Zheng
2015-04-17  7:59 ` [Qemu-devel] [PATCH 11/18] virtio: Add "needs_reset" flag to virtio device Fam Zheng
2015-04-17  7:59 ` [Qemu-devel] [PATCH 12/18] virtio: Return -EINVAL if the vdev needs reset in virtqueue_pop Fam Zheng
2015-04-17  7:59 ` [Qemu-devel] [PATCH 13/18] virtio-blk: Graceful error handling of virtqueue_pop Fam Zheng
2015-04-17  7:59 ` [Qemu-devel] [PATCH 14/18] qtest: Add "QTEST_FILTER" to filter test cases Fam Zheng
2015-04-17  7:59 ` [Qemu-devel] [PATCH 15/18] qtest: virtio-blk: Extract "setup" for future reuse Fam Zheng
2015-04-17  7:59 ` [Qemu-devel] [PATCH 16/18] libqos: Add qvirtio_needs_reset Fam Zheng
2015-04-17  7:59 ` [Qemu-devel] [PATCH 17/18] qtest: Add test case for "needs reset" of virtio-blk Fam Zheng
2015-04-17  7:59 ` [Qemu-devel] [PATCH 18/18] qtest: virtio-blk: Suppress virtio error messages in "make check" Fam Zheng
2015-04-20 15:13 ` [Qemu-devel] [PATCH 00/18] virtio-blk: Support "VIRTIO_CONFIG_S_NEEDS_RESET" Cornelia Huck
2015-04-21  7:44   ` Fam Zheng
2015-04-21  8:04     ` Cornelia Huck
2015-04-21  8:38       ` Fam Zheng
2015-04-21  9:08         ` Cornelia Huck
2015-04-21  9:16           ` Fam Zheng
2015-04-21  9:55             ` Cornelia Huck
2015-04-21  9:59             ` Michael S. Tsirkin [this message]
2015-04-20 17:36 ` Michael S. Tsirkin
2015-04-20 17:36   ` [Qemu-devel] " Michael S. Tsirkin
2015-04-20 19:10   ` Paolo Bonzini
2015-04-20 19:10     ` [Qemu-devel] " Paolo Bonzini
2015-04-20 20:34     ` Michael S. Tsirkin
2015-04-20 20:34       ` [Qemu-devel] " Michael S. Tsirkin
2015-04-21  2:39       ` Fam Zheng
2015-04-21  2:39         ` [Qemu-devel] " Fam Zheng
2015-04-21  6:52       ` Paolo Bonzini
2015-04-21  6:52         ` [Qemu-devel] " Paolo Bonzini
2015-04-21  6:58         ` Michael S. Tsirkin
2015-04-21  6:58           ` [Qemu-devel] " Michael S. Tsirkin
2015-04-21  2:37   ` Fam Zheng
2015-04-21  2:37     ` Fam Zheng
2015-04-21  5:22     ` Michael S. Tsirkin
2015-04-21  5:22       ` Michael S. Tsirkin
2015-04-21  5:50       ` Fam Zheng
2015-04-21  5:50         ` Fam Zheng
2015-04-21  6:09         ` Michael S. Tsirkin
2015-04-21  6:09           ` 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=20150421115819-mutt-send-email-mst@redhat.com \
    --to=mst@redhat.com \
    --cc=amit.shah@redhat.com \
    --cc=aneesh.kumar@linux.vnet.ibm.com \
    --cc=cornelia.huck@de.ibm.com \
    --cc=famz@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@redhat.com \
    /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.