From: marcandre.lureau@redhat.com
To: qemu-devel@nongnu.org
Cc: mukawa@igel.co.jp,
"Marc-André Lureau" <marcandre.lureau@redhat.com>,
mst@redhat.com
Subject: [Qemu-devel] [PATCH RFC 00/14] vhost-user: shutdown and reconnection
Date: Wed, 9 Sep 2015 01:09:52 +0200 [thread overview]
Message-ID: <1441753806-14225-1-git-send-email-marcandre.lureau@redhat.com> (raw)
From: Marc-André Lureau <marcandre.lureau@redhat.com>
In a previous series "Add feature to start QEMU without vhost-user
backend", Tetsuya Mukawa proposed to allow the vhost-user backend to
disconnect and reconnect. However, Michael Tsirkin pointed out that
you can't do that without extra care, because the guest and hypervisor
don't know the slave ring manipulation state, there might be pending
replies for example that could be lost, and suggested to reset the
guest queues, but this requires kernel changes, and it may have to
clear the ring and lose queued packets.
The following series starts from the idea that the slave can request a
"managed" shutdown instead and later recover (I guess the use case for
this is to allow for example to update static dispatching/filter rules
etc)
In order to do it, the slave must be in a good state, that is it
should flush all pending buffers so that resume after
VHOST_SET_VRING_BASE is enough to resume where it lefts. The guest is
made aware of virtio-net disconnection thanks to VIRTIO_NET_S_LINK_UP
status, so communication can be stopped.
Unfortunately, vhost-user protocol isn't bidirectional, so a new
optional communication channel is added for the slave to make request
to the master, such as a the new shutdown request.
I have done some testing with modified vapp and linux 4.2, it seems to
work just fine. But more intensive testing and review are required, as
I am not sure this approach can be made solid enough. Before going
further, I would welcome any comment or testing suggestions!
The series is based on top of pending vhost-user migration series, but
for easier testing you may just use the following git repo:
https://github.com/elmarco/qemu vhost-user-reconnect branch
Marc-André Lureau (12):
vhost-user: remove useless is_server field
qemu-char: avoid potential double-free
qemu-char: remove all msgfds on disconnect
qemu-char: make tcp_chr_disconnect() reentrant-safe
vhost-net: keep VIRTIO_NET_F_STATUS for vhost-user
virtio-net: enable tx notification if up and vhost started
vhost: add vhost_dev stop callback
vhost-user: add vhost_user to hold the chr
qemu-char: add qemu_chr_free()
vhost-user: add slave-fd support
vhost-user: add shutdown support
test: start vhost-user reconnect test
Tetsuya Mukawa (2):
vhost-user: Add ability to know vhost-user backend disconnection
qemu-char: Add qemu_chr_disconnect to close a fd accepted by listen fd
docs/specs/vhost-user.txt | 38 +++++++++++
hw/net/vhost_net.c | 14 +++-
hw/net/virtio-net.c | 4 ++
hw/virtio/vhost-user.c | 120 +++++++++++++++++++++++++++++++--
include/hw/virtio/vhost.h | 4 ++
include/sysemu/char.h | 17 ++++-
net/vhost-user.c | 20 +++++-
qemu-char.c | 23 ++++++-
tests/Makefile | 2 +-
tests/vhost-user-test.c | 168 ++++++++++++++++++++++++++++++++++++++++++----
10 files changed, 384 insertions(+), 26 deletions(-)
--
2.4.3
next reply other threads:[~2015-09-08 23:10 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-09-08 23:09 marcandre.lureau [this message]
2015-09-08 23:09 ` [Qemu-devel] [PATCH RFC 01/14] vhost-user: Add ability to know vhost-user backend disconnection marcandre.lureau
2015-09-08 23:09 ` [Qemu-devel] [PATCH RFC 02/14] vhost-user: remove useless is_server field marcandre.lureau
2015-09-08 23:09 ` [Qemu-devel] [PATCH RFC 03/14] qemu-char: avoid potential double-free marcandre.lureau
2015-09-08 23:09 ` [Qemu-devel] [PATCH RFC 04/14] qemu-char: remove all msgfds on disconnect marcandre.lureau
2015-09-08 23:09 ` [Qemu-devel] [PATCH RFC 05/14] qemu-char: make tcp_chr_disconnect() reentrant-safe marcandre.lureau
2015-09-08 23:09 ` [Qemu-devel] [PATCH RFC 06/14] vhost-net: keep VIRTIO_NET_F_STATUS for vhost-user marcandre.lureau
2015-09-08 23:09 ` [Qemu-devel] [PATCH RFC 07/14] virtio-net: enable tx notification if up and vhost started marcandre.lureau
2015-09-08 23:10 ` [Qemu-devel] [PATCH RFC 08/14] vhost: add vhost_dev stop callback marcandre.lureau
2015-09-08 23:10 ` [Qemu-devel] [PATCH RFC 09/14] vhost-user: add vhost_user to hold the chr marcandre.lureau
2015-09-08 23:10 ` [Qemu-devel] [PATCH RFC 10/14] qemu-char: add qemu_chr_free() marcandre.lureau
2015-09-08 23:10 ` [Qemu-devel] [PATCH RFC 11/14] vhost-user: add slave-fd support marcandre.lureau
2015-09-08 23:10 ` [Qemu-devel] [PATCH RFC 12/14] vhost-user: add shutdown support marcandre.lureau
2015-09-08 23:10 ` [Qemu-devel] [PATCH RFC 13/14] qemu-char: Add qemu_chr_disconnect to close a fd accepted by listen fd marcandre.lureau
2015-09-08 23:10 ` [Qemu-devel] [PATCH RFC 14/14] test: start vhost-user reconnect test marcandre.lureau
2015-11-26 10:33 ` [Qemu-devel] [PATCH RFC 00/14] vhost-user: shutdown and reconnection Michael S. Tsirkin
2016-02-23 18:00 ` Marc-André Lureau
2016-03-02 6:44 ` Michael S. Tsirkin
2016-03-24 7:10 ` Yuanhan Liu
2016-03-25 18:00 ` Marc-André Lureau
2016-03-28 1:53 ` Tetsuya Mukawa
2016-03-28 2:06 ` Tetsuya Mukawa
2016-03-29 8:10 ` Yuanhan Liu
2016-03-29 10:52 ` Marc-André Lureau
2016-03-29 14:28 ` Yuanhan Liu
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=1441753806-14225-1-git-send-email-marcandre.lureau@redhat.com \
--to=marcandre.lureau@redhat.com \
--cc=mst@redhat.com \
--cc=mukawa@igel.co.jp \
--cc=qemu-devel@nongnu.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).