From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by dpdk.org (Postfix) with ESMTP id 640146A72 for ; Tue, 7 Jun 2016 06:04:16 +0200 (CEST) Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga102.fm.intel.com with ESMTP; 06 Jun 2016 21:04:15 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.26,431,1459839600"; d="scan'208";a="996647171" Received: from yliu-dev.sh.intel.com ([10.239.67.162]) by fmsmga002.fm.intel.com with ESMTP; 06 Jun 2016 21:04:14 -0700 From: Yuanhan Liu To: dev@dpdk.org Cc: huawei.xie@intel.com, Traynor Kevin , marcandre.lureau@redhat.com, Yuanhan Liu Date: Tue, 7 Jun 2016 12:05:02 +0800 Message-Id: <1465272308-3572-1-git-send-email-yuanhan.liu@linux.intel.com> X-Mailer: git-send-email 1.9.0 In-Reply-To: <1463120192-24200-1-git-send-email-yuanhan.liu@linux.intel.com> References: <1463120192-24200-1-git-send-email-yuanhan.liu@linux.intel.com> Subject: [dpdk-dev] [PATCH v3 0/6] vhost: add vhost-user client mode and reconnect ability X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 07 Jun 2016 04:04:16 -0000 v3: - make the "reconnect" feature be default for client mode, as it's good to handle guest OS restart with less effort. - fix var not-initilized error pointed out by Rich NOTE: I created a branch at dpdk.org [0] for more convenient testing: [0]: git://dpdk.org/next/dpdk-next-virtio for-testing When the DPDK vhost-user application (such as OVS) restarts (due to crash, or update), the vhost-user connection between DPDK and QEMU won't be established automatically again. In another word, the virtio net is broken. The reason it doesn't work is that DPDK just acts as server only. A restart of the server needs a reconnection from the client (QEMU). However, reconnect from QEMU is not supported from QEMU. Adding the support of client mode and let DPDK be the client somehow would resolve above issue a bit easier: a restart of DPDK would naturally try to connect to the server (QEMU) automatically. Therefore, this patchset implements the DPDK vhost-user client mode, by introducing a new arg (flags) for API rte_vhost_driver_register(). And the client mode is enabled when RTE_VHOST_USER_CLIENT is given. Note that this implies an API breakage. However, since this release deals with ABI/API refactoring, it should not be an issue. Another interesting thing to make it work is that you not only have to consider that case the DPDK vhost-user app might restart, but also have to think that QEMU might restart as well: guest OS sometimes just reboots. In such case, when the server is down, the client has to keep reconnecting with the server until the server is back and the connection is established again. And that's what "reconnect" patch for. Note that current QEMU doesn't not support a second time connection from client, thus a restart of DPDK vhost-user will not work. This is because current QEMU won't be able to detect the disconnect from restart, thus it will not listen for later connections. Patches [1] have been sent, it's just not merged yet. But unlike the vhost-user mulitple queue case, that we have critical depends on QEMU implementation, here we have no such dependency, therefore, I think it's okay to make DPDK be ready for the "reconnect" stuff first. (note that I also mentioned this fact in the release doc). [1]: http://lists.nongnu.org/archive/html/qemu-devel/2016-05/msg01507.html v2: - added release doc - do not remove socket file for the client mode - create one thread ony to handle all reconnects Thanks. --yliu --- Yuanhan Liu (6): vhost: rename structs for enabling client mode vhost: add vhost-user client mode vhost: add reconnect ability vhost: workaround stale vring base examples/vhost: add client option vhost: add pmd client option doc/guides/rel_notes/release_16_07.rst | 21 ++ drivers/net/vhost/rte_eth_vhost.c | 38 ++- examples/vhost/main.c | 12 +- lib/librte_vhost/rte_virtio_net.h | 12 +- lib/librte_vhost/vhost_cuse/vhost-net-cdev.c | 8 +- lib/librte_vhost/vhost_user/vhost-net-user.c | 403 ++++++++++++++++++--------- lib/librte_vhost/vhost_user/vhost-net-user.h | 6 - lib/librte_vhost/virtio-net.c | 9 + 8 files changed, 361 insertions(+), 148 deletions(-) -- 1.9.0