From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by dpdk.org (Postfix) with ESMTP id 813244B4B for ; Fri, 30 Mar 2018 12:00:57 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga102.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 30 Mar 2018 03:00:56 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.48,381,1517904000"; d="scan'208";a="43494306" Received: from unknown (HELO dpdk99.sh.intel.com) ([10.67.110.156]) by orsmga001.jf.intel.com with ESMTP; 30 Mar 2018 03:00:54 -0700 From: Zhihong Wang To: dev@dpdk.org Cc: jianfeng.tan@intel.com, tiwei.bie@intel.com, maxime.coquelin@redhat.com, yliu@fridaylinux.org, cunming.liang@intel.com, xiao.w.wang@intel.com, dan.daly@intel.com, Zhihong Wang Message-Id: <20180310100148.12030-1-zhihong.wang@intel.com> X-Mailer: git-send-email 2.13.6 In-Reply-To: <1517614137-62926-1-git-send-email-zhihong.wang@intel.com> References: <1517614137-62926-1-git-send-email-zhihong.wang@intel.com> Subject: [dpdk-dev] [PATCH v4 0/5] vhost: support selective datapath X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Date: Fri, 30 Mar 2018 10:00:58 -0000 X-Original-Date: Sat, 10 Mar 2018 18:01:43 +0800 X-List-Received-Date: Fri, 30 Mar 2018 10:00:58 -0000 This patch set introduces support for selective datapath in DPDK vhost-user lib. vDPA stands for vhost Data Path Acceleration. The idea is to support virtio ring compatible devices to serve virtio driver directly to enable datapath acceleration. Design details ==== A vDPA device is a virtio ring compatible backend. It's defined as follows: struct rte_vdpa_dev_addr { enum vdpa_addr_type type; union { uint8_t __dummy[64]; struct rte_pci_addr pci_addr; }; }; struct rte_vdpa_dev_ops { vdpa_dev_queue_num_get_t queue_num_get; vdpa_dev_feature_get_t feature_get; vdpa_dev_feature_get_t protocol_feature_get; vdpa_dev_conf_t dev_conf; vdpa_dev_close_t dev_close; vdpa_vring_state_set_t vring_state_set; vdpa_feature_set_t feature_set; vdpa_migration_done_t migration_done; vdpa_get_vfio_group_fd_t get_vfio_group_fd; vdpa_get_vfio_device_fd_t get_vfio_device_fd; vdpa_get_notify_area_t get_notify_area; }; struct rte_vdpa_device { struct rte_vdpa_dev_addr addr; struct rte_vdpa_dev_ops *ops; } __rte_cache_aligned; Changes to the current vhost-user lib are: ==== 1. Make vhost device capabilities configurable to adopt various devices. Such capabilities include supported features, protocol features, queue number. APIs are introduced to configure these capabilities. 2. A set of device ops is defined for device specific operations: a. queue_num_get: Called to get supported queue number of the device. b. feature_get: Called to get supported features of the device. c. protocol_feature_get: Called to get supported protocol features of the device. d. dev_conf: Called to configure the actual device when the virtio device becomes ready. e. dev_close: Called to close the actual device when the virtio device is stopped. f. vring_state_set: Called to change the state of the vring in the actual device when vring state changes. g. feature_set: Called to set the negotiated features to device. h. migration_done: Called to allow the device to response to RARP sending. i. get_vfio_group_fd: Called to get the VFIO group fd of the device. j. get_vfio_device_fd: Called to get the VFIO device fd of the device. k. get_notify_area: Called to get the notify area info of the queue. 3. To make vhost aware of its datapath type, an device id (did) is added into the vhost data structure to identify the actual device. APIs are introduced to configure it. When the default software datapath is used, did is set to -1. When alternative datapath is used, did should be set to specify which device to use, and each vhost-user socket can have only 1 connection in this case. Working process: ==== 1. Register vDPA device with address and device ops, and get a did. 2. For vhost device creation: a. Register vhost-user socket. b. Set did of the vhost-user socket. c. Register vhost-user callbacks. d. Start to wait for connection. 3. When connection comes and virtio device data structure is negotiated, the device will be configured with all needed info. --- Changes in v4: 1. Remove the "engine" concept in the lib. --- Changes in v3: 1. Keep macro names the same as in the spec. 2. Export new APIs where they're introduced. --- Changes in v2: 1. Ensure negotiated capabilities are supported in vhost-user lib. 2. Add APIs for live migration. 3. Configure the data path at the right time. 4. Add VFIO related vDPA device ops. 5. Rebase on dpdk-next-virtio. Zhihong Wang (5): vhost: export vhost feature definitions vhost: support selective datapath vhost: add apis for datapath configuration vhost: adapt vhost lib for selective datapath vhost: add apis for live migration lib/librte_vhost/Makefile | 4 +- lib/librte_vhost/rte_vdpa.h | 94 ++++++++++++++++++++++ lib/librte_vhost/rte_vhost.h | 143 +++++++++++++++++++++++++++++++++ lib/librte_vhost/rte_vhost_version.map | 14 ++++ lib/librte_vhost/socket.c | 130 ++++++++++++++++++++++++++++-- lib/librte_vhost/vdpa.c | 96 ++++++++++++++++++++++ lib/librte_vhost/vhost.c | 91 +++++++++++++++++++++ lib/librte_vhost/vhost.h | 13 ++- lib/librte_vhost/vhost_user.c | 54 +++++++++++-- lib/librte_vhost/vhost_user.h | 7 -- 10 files changed, 625 insertions(+), 21 deletions(-) create mode 100644 lib/librte_vhost/rte_vdpa.h create mode 100644 lib/librte_vhost/vdpa.c -- 2.13.6