From patchwork Thu Sep 10 06:43:48 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Jiang, Cheng1" X-Patchwork-Id: 77112 X-Patchwork-Delegate: maxime.coquelin@redhat.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 2BAD9A04B5; Thu, 10 Sep 2020 08:52:16 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 093DE1C0CA; Thu, 10 Sep 2020 08:52:16 +0200 (CEST) Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by dpdk.org (Postfix) with ESMTP id 922F31B9B7 for ; Thu, 10 Sep 2020 08:52:14 +0200 (CEST) IronPort-SDR: QH9u39xOormUx0dc4Uroi/XS3R8RRETv+4VRcbMNvguTk/4fewPHMUv5FlFyXmwMhpt0oZ3YGe izDkOq4zVC4A== X-IronPort-AV: E=McAfee;i="6000,8403,9739"; a="222679631" X-IronPort-AV: E=Sophos;i="5.76,412,1592895600"; d="scan'208";a="222679631" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga005.jf.intel.com ([10.7.209.41]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Sep 2020 23:52:13 -0700 IronPort-SDR: ycacD62PbWUnO10Kxk3yK+vWmBwKvoa1UP7cryVjqLZntHRItJeCHuqOPHI7wqXTGHMBUZgwqS oztA10XqGkHA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.76,412,1592895600"; d="scan'208";a="480771890" Received: from dpdk_jiangcheng.sh.intel.com ([10.67.119.112]) by orsmga005.jf.intel.com with ESMTP; 09 Sep 2020 23:52:11 -0700 From: Cheng Jiang To: maxime.coquelin@redhat.com, chenbo.xia@intel.com, zhihong.wang@intel.com, john.mcnamara@intel.com, marko.kovacevic@intel.com Cc: dev@dpdk.org, patrick.fu@intel.com, Cheng Jiang Date: Thu, 10 Sep 2020 06:43:48 +0000 Message-Id: <20200910064351.35513-2-Cheng1.jiang@intel.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200910064351.35513-1-Cheng1.jiang@intel.com> References: <20200910064351.35513-1-Cheng1.jiang@intel.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v1 1/4] example/vhost: add async vhost driver args parsing function 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" This patch is to add async vhost driver arguments parsing function for CBDMA channel. With these arguments vhost sample can be set to use CBDMA or CPU for enqueue operation and bind vhost device with specific CBDMA channel to accelerate vhost data-path. Signed-off-by: Cheng Jiang --- examples/vhost/main.c | 133 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 131 insertions(+), 2 deletions(-) diff --git a/examples/vhost/main.c b/examples/vhost/main.c index e1578e795..011e3da21 100644 --- a/examples/vhost/main.c +++ b/examples/vhost/main.c @@ -24,6 +24,9 @@ #include #include #include +#include +#include +#include #include "main.h" @@ -58,6 +61,12 @@ /* Maximum long option length for option parsing. */ #define MAX_LONG_OPT_SZ 64 +#define IOAT_RING_SIZE 4096 + +#define MAX_ENQUEUED_SIZE 2048 + +#define MAX_VHOST_DEVICE 1024 + /* mask of enabled ports */ static uint32_t enabled_port_mask = 0; @@ -96,6 +105,21 @@ static int dequeue_zero_copy; static int builtin_net_driver; +static int async_vhost_driver; + +struct dma_info { + struct rte_pci_addr addr; + uint16_t dev_id; + bool is_valid; +}; + +struct dma_for_vhost { + struct dma_info dmas[RTE_MAX_QUEUES_PER_PORT * 2]; + uint16_t nr; +}; + +static struct dma_for_vhost dma_bind[MAX_VHOST_DEVICE]; + /* Specify timeout (in useconds) between retries on RX. */ static uint32_t burst_rx_delay_time = BURST_RX_WAIT_US; /* Specify the number of retries on RX. */ @@ -182,6 +206,97 @@ struct mbuf_table lcore_tx_queue[RTE_MAX_LCORE]; / US_PER_S * BURST_TX_DRAIN_US) #define VLAN_HLEN 4 +static inline int +open_dma(const char *value, void *dma_bind_info) +{ + struct dma_for_vhost *dma_info = dma_bind_info; + char *input = strndup(value, strlen(value) + 1); + char *addrs = input; + char *ptrs[2]; + char *start, *end, *substr; + int64_t vid, vring_id; + struct rte_ioat_rawdev_config config; + struct rte_rawdev_info info = { .dev_private = &config }; + char name[32]; + int dev_id; + int ret = 0; + uint16_t i = 0; + + while (isblank(*addrs)) + addrs++; + if (*addrs == '\0') { + ret = -1; + goto out; + } + + /* process DMA devices within bracket. */ + addrs++; + substr = strtok(addrs, ";]"); + if (!substr) { + ret = -1; + goto out; + } + char *dma_arg[MAX_VHOST_DEVICE]; + rte_strsplit(substr, strlen(substr), dma_arg, MAX_VHOST_DEVICE, ','); + do { + char *arg_temp = dma_arg[i]; + rte_strsplit(arg_temp, strlen(arg_temp), ptrs, 2, '@'); + + start = strstr(ptrs[0], "txd"); + if (start == NULL) { + ret = -1; + goto out; + } + + start += 3; + vid = strtol(start, &end, 0); + if (end == start) { + ret = -1; + goto out; + } + + vring_id = 0 + VIRTIO_RXQ; + if (rte_pci_addr_parse(ptrs[1], + &(dma_info + vid)->dmas[vring_id].addr) < 0) { + ret = -1; + goto out; + } + + rte_pci_device_name(&(dma_info + vid)->dmas[vring_id].addr, + name, sizeof(name)); + dev_id = rte_rawdev_get_dev_id(name); + if (dev_id == (uint16_t)(-ENODEV) || + dev_id == (uint16_t)(-EINVAL)) { + ret = -1; + goto out; + } + + if (rte_rawdev_info_get(dev_id, &info) < 0 || + strstr(info.driver_name, "ioat") == NULL) { + ret = -1; + goto out; + } + + (dma_info + vid)->dmas[vring_id].dev_id = dev_id; + (dma_info + vid)->dmas[vring_id].is_valid = true; + config.ring_size = IOAT_RING_SIZE; + if (rte_rawdev_configure(dev_id, &info) < 0) { + ret = -1; + goto out; + } + rte_rawdev_start(dev_id); + + dma_info->nr++; + + arg_temp = strtok(NULL, ";]"); + i++; + } while (dma_arg[i]); + +out: + free(input); + return ret; +} + /* * Builds up the correct configuration for VMDQ VLAN pool map * according to the pool & queue limits. @@ -485,6 +600,8 @@ us_vhost_parse_args(int argc, char **argv) {"client", no_argument, &client_mode, 1}, {"dequeue-zero-copy", no_argument, &dequeue_zero_copy, 1}, {"builtin-net-driver", no_argument, &builtin_net_driver, 1}, + {"async_vhost_driver", no_argument, &async_vhost_driver, 1}, + {"dmas", required_argument, NULL, 0}, {NULL, 0, 0, 0}, }; @@ -620,13 +737,25 @@ us_vhost_parse_args(int argc, char **argv) "socket-file", MAX_LONG_OPT_SZ)) { if (us_vhost_parse_socket_path(optarg) == -1) { RTE_LOG(INFO, VHOST_CONFIG, - "Invalid argument for socket name (Max %d characters)\n", - PATH_MAX); + "Invalid argument for socket name (Max %d characters)\n", + PATH_MAX); us_vhost_usage(prgname); return -1; } } + if (!strncmp(long_option[option_index].name, + "dmas", MAX_LONG_OPT_SZ)) { + if (open_dma(optarg, &dma_bind) == -1) { + if (*optarg == -1) { + RTE_LOG(INFO, VHOST_CONFIG, + "Wrong DMA args\n"); + us_vhost_usage(prgname); + return -1; + } + } + } + break; /* Invalid option - print options. */ From patchwork Thu Sep 10 06:43:49 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Jiang, Cheng1" X-Patchwork-Id: 77113 X-Patchwork-Delegate: maxime.coquelin@redhat.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 7E9A6A04B5; Thu, 10 Sep 2020 08:52:27 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 50C3C1C0D2; Thu, 10 Sep 2020 08:52:27 +0200 (CEST) Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by dpdk.org (Postfix) with ESMTP id E4EF21C0D0 for ; Thu, 10 Sep 2020 08:52:24 +0200 (CEST) IronPort-SDR: AZv0p4b0XWJJgCTAC9wzO7+Nt6472nVjMsBS1Qphm/7nWR8qKi06JQGBBzcPghPVQKlEVDXUw5 OqIMUJzEuuVQ== X-IronPort-AV: E=McAfee;i="6000,8403,9739"; a="155878248" X-IronPort-AV: E=Sophos;i="5.76,412,1592895600"; d="scan'208";a="155878248" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Sep 2020 23:52:23 -0700 IronPort-SDR: vS9xjReY0fxNE8ICVBE7UMrmdGNe3ZHsCU/xbMBApzUuzKRlAiqnflPr3JcMzbDN6L/bVJZL53 iPM/uIZ/1BBQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.76,412,1592895600"; d="scan'208";a="480771969" Received: from dpdk_jiangcheng.sh.intel.com ([10.67.119.112]) by orsmga005.jf.intel.com with ESMTP; 09 Sep 2020 23:52:21 -0700 From: Cheng Jiang To: maxime.coquelin@redhat.com, chenbo.xia@intel.com, zhihong.wang@intel.com, john.mcnamara@intel.com, marko.kovacevic@intel.com Cc: dev@dpdk.org, patrick.fu@intel.com, Cheng Jiang Date: Thu, 10 Sep 2020 06:43:49 +0000 Message-Id: <20200910064351.35513-3-Cheng1.jiang@intel.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200910064351.35513-1-Cheng1.jiang@intel.com> References: <20200910064351.35513-1-Cheng1.jiang@intel.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v1 2/4] example/vhost: add support for vhost async data path 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" This patch is to implement vhost DMA operation callbacks for CBDMA PMD and add vhost async data-path in vhost sample. With providing callback implementation for CBDMA, vhost sample can leverage CBDMA to accelerate vhost async data-path. Signed-off-by: Cheng Jiang --- examples/vhost/main.c | 129 ++++++++++++++++++++++++++++++++++++++++-- examples/vhost/main.h | 1 + 2 files changed, 124 insertions(+), 6 deletions(-) diff --git a/examples/vhost/main.c b/examples/vhost/main.c index 011e3da21..b2a4e4370 100644 --- a/examples/vhost/main.c +++ b/examples/vhost/main.c @@ -24,6 +24,7 @@ #include #include #include +#include #include #include #include @@ -31,7 +32,7 @@ #include "main.h" #ifndef MAX_QUEUES -#define MAX_QUEUES 128 +#define MAX_QUEUES 512 #endif /* the maximum number of external ports supported */ @@ -165,6 +166,62 @@ static struct rte_eth_conf vmdq_conf_default = { }, }; +static uint32_t +ioat_transfer_data_cb(int vid, uint16_t queue_id, + struct rte_vhost_async_desc *descs, + struct rte_vhost_async_status *opaque_data, uint16_t count) +{ + int ret; + uint32_t i_desc; + + struct rte_vhost_iov_iter *src = NULL; + struct rte_vhost_iov_iter *dst = NULL; + unsigned long i_seg; + + int dev_id = dma_bind[vid].dmas[queue_id * 2 + VIRTIO_RXQ].dev_id; + if (likely(!opaque_data)) { + for (i_desc = 0; i_desc < count; i_desc++) { + src = descs[i_desc].src; + dst = descs[i_desc].dst; + i_seg = 0; + while (i_seg < src->nr_segs) { + ret = rte_ioat_enqueue_copy(dev_id, + (uintptr_t)(src->iov[i_seg].iov_base) + + src->offset, + (uintptr_t)(dst->iov[i_seg].iov_base) + + dst->offset, + src->iov[i_seg].iov_len, + 0, + 0, + 0); + if (ret != 1) + break; + i_seg++; + } + } + } else { + /* Opaque data is not supported */ + return -1; + } + /* ring the doorbell */ + rte_ioat_do_copies(dev_id); + return i_desc; +} + +static uint32_t +ioat_check_completed_copies_cb(int vid, uint16_t queue_id, + struct rte_vhost_async_status *opaque_data, + uint16_t max_packets __rte_unused) +{ + if (!opaque_data) { + uintptr_t dump[255]; + return rte_ioat_completed_copies(dma_bind[vid].dmas[queue_id * 2 + + VIRTIO_RXQ].dev_id, 255, dump, dump); + } else { + /* Opaque data is not supported */ + return -1; + } +} static unsigned lcore_ids[RTE_MAX_LCORE]; static uint16_t ports[RTE_MAX_ETHPORTS]; @@ -206,6 +263,11 @@ struct mbuf_table lcore_tx_queue[RTE_MAX_LCORE]; / US_PER_S * BURST_TX_DRAIN_US) #define VLAN_HLEN 4 +/* + * Builds up the correct configuration for VMDQ VLAN pool map + * according to the pool & queue limits. + */ + static inline int open_dma(const char *value, void *dma_bind_info) { @@ -297,10 +359,6 @@ open_dma(const char *value, void *dma_bind_info) return ret; } -/* - * Builds up the correct configuration for VMDQ VLAN pool map - * according to the pool & queue limits. - */ static inline int get_eth_conf(struct rte_eth_conf *eth_conf, uint32_t num_devices) { @@ -911,9 +969,26 @@ virtio_xmit(struct vhost_dev *dst_vdev, struct vhost_dev *src_vdev, struct rte_mbuf *m) { uint16_t ret; + struct rte_mbuf *m_cpl[1]; if (builtin_net_driver) { ret = vs_enqueue_pkts(dst_vdev, VIRTIO_RXQ, &m, 1); + } else if (async_vhost_driver) { + ret = rte_vhost_submit_enqueue_burst(dst_vdev->vid, VIRTIO_RXQ, + &m, 1); + + if (likely(ret)) { + dst_vdev->nr_async_pkts++; + rte_mbuf_refcnt_update(m, 1); + } + + while (likely(dst_vdev->nr_async_pkts)) { + if (rte_vhost_poll_enqueue_completed(dst_vdev->vid, + VIRTIO_RXQ, m_cpl, 1)) { + dst_vdev->nr_async_pkts--; + rte_pktmbuf_free(*m_cpl); + } + } } else { ret = rte_vhost_enqueue_burst(dst_vdev->vid, VIRTIO_RXQ, &m, 1); } @@ -1162,6 +1237,19 @@ drain_mbuf_table(struct mbuf_table *tx_q) } } +static __rte_always_inline void +complete_async_pkts(struct vhost_dev *vdev, uint16_t qid) +{ + struct rte_mbuf *p_cpl[MAX_PKT_BURST]; + uint16_t complete_count; + + complete_count = rte_vhost_poll_enqueue_completed(vdev->vid, + qid, p_cpl, MAX_PKT_BURST); + vdev->nr_async_pkts -= complete_count; + if (complete_count) + free_pkts(p_cpl, complete_count); +} + static __rte_always_inline void drain_eth_rx(struct vhost_dev *vdev) { @@ -1170,6 +1258,10 @@ drain_eth_rx(struct vhost_dev *vdev) rx_count = rte_eth_rx_burst(ports[0], vdev->vmdq_rx_q, pkts, MAX_PKT_BURST); + + while (likely(vdev->nr_async_pkts)) + complete_async_pkts(vdev, VIRTIO_RXQ); + if (!rx_count) return; @@ -1194,16 +1286,22 @@ drain_eth_rx(struct vhost_dev *vdev) if (builtin_net_driver) { enqueue_count = vs_enqueue_pkts(vdev, VIRTIO_RXQ, pkts, rx_count); + } else if (async_vhost_driver) { + enqueue_count = rte_vhost_submit_enqueue_burst(vdev->vid, + VIRTIO_RXQ, pkts, rx_count); + vdev->nr_async_pkts += enqueue_count; } else { enqueue_count = rte_vhost_enqueue_burst(vdev->vid, VIRTIO_RXQ, pkts, rx_count); } + if (enable_stats) { rte_atomic64_add(&vdev->stats.rx_total_atomic, rx_count); rte_atomic64_add(&vdev->stats.rx_atomic, enqueue_count); } - free_pkts(pkts, rx_count); + if (!async_vhost_driver) + free_pkts(pkts, rx_count); } static __rte_always_inline void @@ -1350,6 +1448,9 @@ destroy_device(int vid) "(%d) device has been removed from data core\n", vdev->vid); + if (async_vhost_driver) + rte_vhost_async_channel_unregister(vid, VIRTIO_RXQ); + rte_free(vdev); } @@ -1364,6 +1465,12 @@ new_device(int vid) uint32_t device_num_min = num_devices; struct vhost_dev *vdev; + struct rte_vhost_async_channel_ops channel_ops = { + .transfer_data = ioat_transfer_data_cb, + .check_completed_copies = ioat_check_completed_copies_cb + }; + struct rte_vhost_async_features f; + vdev = rte_zmalloc("vhost device", sizeof(*vdev), RTE_CACHE_LINE_SIZE); if (vdev == NULL) { RTE_LOG(INFO, VHOST_DATA, @@ -1404,6 +1511,13 @@ new_device(int vid) "(%d) device has been added to data core %d\n", vid, vdev->coreid); + if (async_vhost_driver) { + f.async_inorder = 1; + f.async_threshold = 256; + return rte_vhost_async_channel_register(vid, VIRTIO_RXQ, + f.intval, &channel_ops); + } + return 0; } @@ -1645,6 +1759,9 @@ main(int argc, char *argv[]) /* Register vhost user driver to handle vhost messages. */ for (i = 0; i < nb_sockets; i++) { char *file = socket_files + i * PATH_MAX; + if (async_vhost_driver) + flags = flags | RTE_VHOST_USER_ASYNC_COPY; + ret = rte_vhost_driver_register(file, flags); if (ret != 0) { unregister_drivers(i); diff --git a/examples/vhost/main.h b/examples/vhost/main.h index 7cba0edbf..4317b6ae8 100644 --- a/examples/vhost/main.h +++ b/examples/vhost/main.h @@ -51,6 +51,7 @@ struct vhost_dev { uint64_t features; size_t hdr_len; uint16_t nr_vrings; + uint16_t nr_async_pkts; struct rte_vhost_memory *mem; struct device_statistics stats; TAILQ_ENTRY(vhost_dev) global_vdev_entry; From patchwork Thu Sep 10 06:43:50 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Jiang, Cheng1" X-Patchwork-Id: 77114 X-Patchwork-Delegate: maxime.coquelin@redhat.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 87F71A04B5; Thu, 10 Sep 2020 08:52:37 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 9A86A1C10E; Thu, 10 Sep 2020 08:52:33 +0200 (CEST) Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by dpdk.org (Postfix) with ESMTP id 0951A1C10B for ; Thu, 10 Sep 2020 08:52:31 +0200 (CEST) IronPort-SDR: KJqVT20aKJ1rL00jbOi7aKeQIoeM4d2fP2Sn/FzDLd1FwgTy8ri+AlXozczLnTVtt45gY1ROk6 WCN54dUNBlxg== X-IronPort-AV: E=McAfee;i="6000,8403,9739"; a="243296163" X-IronPort-AV: E=Sophos;i="5.76,412,1592895600"; d="scan'208";a="243296163" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Sep 2020 23:52:31 -0700 IronPort-SDR: o8ylS93fGPdr2m0OTot55SSb++m4cxuucLT6bG7aAAaJ2xNTq3heWxBc8c+ySoBOtVLjRLnq3t ozqf1ITa1XxA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.76,412,1592895600"; d="scan'208";a="480772012" Received: from dpdk_jiangcheng.sh.intel.com ([10.67.119.112]) by orsmga005.jf.intel.com with ESMTP; 09 Sep 2020 23:52:28 -0700 From: Cheng Jiang To: maxime.coquelin@redhat.com, chenbo.xia@intel.com, zhihong.wang@intel.com, john.mcnamara@intel.com, marko.kovacevic@intel.com Cc: dev@dpdk.org, patrick.fu@intel.com, Cheng Jiang Date: Thu, 10 Sep 2020 06:43:50 +0000 Message-Id: <20200910064351.35513-4-Cheng1.jiang@intel.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200910064351.35513-1-Cheng1.jiang@intel.com> References: <20200910064351.35513-1-Cheng1.jiang@intel.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v1 3/4] doc: update vhost sample doc for vhost async data path 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Add vhost async driver arguments information for vhost async data path in vhost sample application. Signed-off-by: Cheng Jiang --- doc/guides/sample_app_ug/vhost.rst | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/doc/guides/sample_app_ug/vhost.rst b/doc/guides/sample_app_ug/vhost.rst index b7ed4f8bd..c8b5c7c9a 100644 --- a/doc/guides/sample_app_ug/vhost.rst +++ b/doc/guides/sample_app_ug/vhost.rst @@ -162,6 +162,16 @@ enabled and cannot be disabled. A very simple vhost-user net driver which demonstrates how to use the generic vhost APIs will be used when this option is given. It is disabled by default. +**--async_vhost_driver** +Async vhost-user net driver which demonstrates how to use the async vhost APIs +will be used when this option is given. It is disabled by default. + +**--dmas** +This parameter is used to specify the assigned DMA device of a vhost device. +For example --dmas [txd0@00:04.0,txd1@00:04.1] means use CBDMA channel 00:04.0 +for vhost device 0 enqueue operation and use CBDMA channel 00:04.1 for vhost +device 1 enqueue operation. + Common Issues ------------- From patchwork Thu Sep 10 06:43:51 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Jiang, Cheng1" X-Patchwork-Id: 77115 X-Patchwork-Delegate: maxime.coquelin@redhat.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id BB67AA04B5; Thu, 10 Sep 2020 08:52:44 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 16C291C0CE; Thu, 10 Sep 2020 08:52:42 +0200 (CEST) Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by dpdk.org (Postfix) with ESMTP id 026FD1BEB3 for ; Thu, 10 Sep 2020 08:52:40 +0200 (CEST) IronPort-SDR: xxYIrTULYvUYTooJxCBiVPHwqbdUGTV8yiLbtWGm6avhB5I1qMw53QYwQpkpqH5UwXW4iPZvmu 2wizK4iQaqzQ== X-IronPort-AV: E=McAfee;i="6000,8403,9739"; a="176541376" X-IronPort-AV: E=Sophos;i="5.76,412,1592895600"; d="scan'208";a="176541376" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Sep 2020 23:52:40 -0700 IronPort-SDR: Bdp5aq6HTYFMdQ1to90IAwxeZ97nTb5dcajSD/NVA15ntbLuAtTotiW7D0420tKwjracA2ow1N qLErgRqvLAEg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.76,412,1592895600"; d="scan'208";a="480772048" Received: from dpdk_jiangcheng.sh.intel.com ([10.67.119.112]) by orsmga005.jf.intel.com with ESMTP; 09 Sep 2020 23:52:38 -0700 From: Cheng Jiang To: maxime.coquelin@redhat.com, chenbo.xia@intel.com, zhihong.wang@intel.com, john.mcnamara@intel.com, marko.kovacevic@intel.com Cc: dev@dpdk.org, patrick.fu@intel.com, Cheng Jiang Date: Thu, 10 Sep 2020 06:43:51 +0000 Message-Id: <20200910064351.35513-5-Cheng1.jiang@intel.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200910064351.35513-1-Cheng1.jiang@intel.com> References: <20200910064351.35513-1-Cheng1.jiang@intel.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v1 4/4] doc: update release notes for vhost sample 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Add release notes for vhost async data path support in vhost sample. Signed-off-by: Cheng Jiang --- doc/guides/rel_notes/release_20_11.rst | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/doc/guides/rel_notes/release_20_11.rst b/doc/guides/rel_notes/release_20_11.rst index df227a177..6e3d09cb2 100644 --- a/doc/guides/rel_notes/release_20_11.rst +++ b/doc/guides/rel_notes/release_20_11.rst @@ -55,6 +55,12 @@ New Features Also, make sure to start the actual text at the margin. ======================================================= +* **Updated vhost sample application.** + + Added vhost asynchronous APIs support, which demonstrated how the application + leverage IOAT DMA channel with vhost asynchronous APIs. + See the :doc:`../sample_app_ug/vhost` for more details. + Removed Items -------------