[dpdk-dev] [PATCH 0/7] vhost: support selective datapath
Zhihong Wang
zhihong.wang at intel.com
Sat Feb 3 00:28:50 CET 2018
This patch set introduces support for selective datapath in DPDK vhost-user
lib. vDPA stands for vhost Data Path Acceleration. The idea is to enable
various types of virtio-compatible devices to do data transfer with virtio
driver directly to enable acceleration.
The default datapath is the existing software implementation, more options
will be available when new engines are added.
Design details
====
An engine is a group of virtio-compatible devices. The definition of engine
is as follows:
struct rte_vdpa_eng_addr {
union {
uint8_t __dummy[64];
struct {
struct rte_pci_addr pci_addr;
};
};
};
struct rte_vdpa_eng_info {
char name[MAX_VDPA_NAME_LEN];
struct rte_vdpa_eng_addr *addr;
};
struct rte_vdpa_dev_ops {
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;
};
struct rte_vdpa_eng_ops {
vdpa_eng_init_t eng_init;
vdpa_eng_uninit_t eng_uninit;
vdpa_info_query_t info_query;
};
struct rte_vdpa_eng_driver {
const char *name;
struct rte_vdpa_eng_ops eng_ops;
struct rte_vdpa_dev_ops dev_ops;
} __rte_cache_aligned;
struct rte_vdpa_engine {
struct rte_vdpa_eng_info eng_info;
struct rte_vdpa_eng_driver *eng_drv;
} __rte_cache_aligned;
A set of engine ops is defined in rte_vdpa_eng_ops for engine init, uninit,
and attributes reporting. The attributes are defined as follows:
struct rte_vdpa_eng_attr {
uint64_t features;
uint64_t protocol_features;
uint32_t queue_num;
uint32_t dev_num;
};
A set of device ops is defined in rte_vdpa_dev_ops for each virtio device
in the engine to do device specific operations.
Changes to the current vhost-user lib are:
====
1. Make vhost device capabilities configurable to adopt various engines.
Such capabilities include supported features, protocol features, queue
number. APIs are introduced to let app configure these capabilities.
2. In addition to the existing vhost framework, a set of callbacks is
added for vhost to call the driver for device operations at the right
time:
a. dev_conf: Called to configure the actual device when the virtio
device becomes ready.
b. dev_close: Called to close the actual device when the virtio device
is stopped.
c. vring_state_set: Called to change the state of the vring in the
actual device when vring state changes.
d. feature_set: Called to set the negotiated features to device.
e. migration_done: Called to allow the device to response to RARP
sending.
3. To make vhost aware of its own type, an engine id (eid) and a device
id (did) are added into the vhost data structure to identify the actual
device. APIs are introduced to let app configure them. When the default
software datapath is used, eid and did are set to -1. When alternative
datapath is used, eid and did are set by app to specify which device to
use. Each vhost-user socket can have only 1 connection in this case.
Working process:
====
1. Register driver during DPDK initialization.
2. Register engine with driver name and address.
3. Get engine attributes.
4. For vhost device creation:
a. Register vhost-user socket.
b. Set eid and did of the vhost-user socket.
c. Set attributes of the vhost-user socket.
d. Register vhost-user callbacks.
e. Start to wait for connection.
4. When connection comes and virtio device data structure is negotiated,
configure the device with all needed info.
Zhihong Wang (7):
vhost: make capabilities configurable
vhost: expose vhost feature definitions
vhost: support selective datapath
vhost: add apis for datapath configuration
vhost: adapt vhost lib for selective datapath
vhost: get callfd before device setup
vhost: expose new apis
lib/librte_vhost/Makefile | 4 +-
lib/librte_vhost/rte_vdpa.h | 119 +++++++++++++++++++++++++++
lib/librte_vhost/rte_vhost.h | 136 +++++++++++++++++++++++++++++++
lib/librte_vhost/rte_vhost_version.map | 18 ++++
lib/librte_vhost/socket.c | 145 +++++++++++++++++++++++++++++++++
lib/librte_vhost/vdpa.c | 125 ++++++++++++++++++++++++++++
lib/librte_vhost/vhost.c | 49 +++++++++++
lib/librte_vhost/vhost.h | 14 +++-
lib/librte_vhost/vhost_user.c | 108 +++++++++++++++++++-----
lib/librte_vhost/vhost_user.h | 20 ++---
10 files changed, 700 insertions(+), 38 deletions(-)
create mode 100644 lib/librte_vhost/rte_vdpa.h
create mode 100644 lib/librte_vhost/vdpa.c
--
2.7.5
More information about the dev
mailing list