DPDK patches and discussions
 help / color / mirror / Atom feed
From: Jiayu Hu <jiayu.hu@intel.com>
To: dev@dpdk.org
Cc: tiwei.bie@intel.com, maxime.coquelin@redhat.com,
	zhihong.wang@intel.com, bruce.richardson@intel.com,
	Jiayu Hu <jiayu.hu@intel.com>
Subject: [dpdk-dev] [RFC v2 0/2] Add a PMD for DMA-accelerated vhost-user
Date: Fri,  1 Nov 2019 04:54:08 -0400	[thread overview]
Message-ID: <1572598450-245091-1-git-send-email-jiayu.hu@intel.com> (raw)
In-Reply-To: <1569507973-247570-1-git-send-email-jiayu.hu@intel.com>

In vhost-user enqueue and dequeue operations, where data movement is
heavily involved, performing large memory copies usually takes up a
major part of CPU cycles and becomes the hot spot. To offload expensive
memory operations from the CPU, this patch set proposes to leverage DMA
engines, e.g., I/OAT, a DMA engine in the Intel's processor, to accelerate
large copies for vhost-user.

We implement a new PMD for the DMA accelerated vhost-user, called
vhost-dma. This PMD leverages librte_vhost to handle vhost messages,
but implements own vring's enqueue and dequeue operations. It offloads
large memory copies to the DMA in an asynchronous mode; that is, the CPU
just submits copy jobs to the DMA but without waiting for its
completion. Thus, there is no CPU intervention during data transfer;
we can save precious CPU cycles and improve the overall throughput for
vhost-user based applications, like OVS.

The PMD provides basic functionality of packet reception and
transmission. During packet reception and transmission, it offloads
large copies to the DMA and performs small copies by the CPU, due to
startup overheads associated with the DMA.

The PMD is able to support various DMA engines to accelrate data
movements in enqueue and dequeue operations; currently, the supported
DMA engine is I/OAT. The PMD just supports I/OAT acceleration in the
PMD's transmit data path (i.e. vring's enqueue operation); it still
uses the CPU to perform all copies in the PMD's receive data path (i.e.
vring's dequeue operation). In addition, the PMD just supports split ring.

Users can explicitly assign a DMA device to a TX queue by the
parameter 'dmas'. But currently, one DMA device can only be used by
one queue and a queue can use one DMA device at a time. In addition,
the PMD supports multiqueue and both client and server modes. Users can
specify the queue number and client/server mode by 'queues' and 'client'
parameters.

We measure the performance of vhost-dma in testpmd. With 1024 bytes
packets, compared with vhost-user PMD, vhost-dma can improve the throughput
for host testpmd around 20%~30% in the VM2VM and PVP cases; with larger
packets, the throughput improvement will be higher.

Change log
==========
v2:
- provide DMA-accelerated vhost-user PMD to support various DMA engines.

Jiayu Hu (2):
  vhost: populate guest memory for DMA-accelerated vhost-user
  net/vhost_dma: add vHost DMA driver

 config/common_base                                 |    2 +
 config/common_linux                                |    1 +
 drivers/Makefile                                   |    2 +-
 drivers/net/Makefile                               |    1 +
 drivers/net/vhost_dma/Makefile                     |   31 +
 drivers/net/vhost_dma/eth_vhost.c                  | 1495 ++++++++++++++++++++
 drivers/net/vhost_dma/eth_vhost.h                  |  264 ++++
 drivers/net/vhost_dma/internal.h                   |  225 +++
 .../net/vhost_dma/rte_pmd_vhost_dma_version.map    |    4 +
 drivers/net/vhost_dma/virtio_net.c                 | 1234 ++++++++++++++++
 lib/librte_vhost/rte_vhost.h                       |    1 +
 lib/librte_vhost/socket.c                          |   11 +
 lib/librte_vhost/vhost.h                           |    2 +
 lib/librte_vhost/vhost_user.c                      |    3 +-
 mk/rte.app.mk                                      |    1 +
 15 files changed, 3275 insertions(+), 2 deletions(-)
 create mode 100644 drivers/net/vhost_dma/Makefile
 create mode 100644 drivers/net/vhost_dma/eth_vhost.c
 create mode 100644 drivers/net/vhost_dma/eth_vhost.h
 create mode 100644 drivers/net/vhost_dma/internal.h
 create mode 100644 drivers/net/vhost_dma/rte_pmd_vhost_dma_version.map
 create mode 100644 drivers/net/vhost_dma/virtio_net.c

-- 
2.7.4


  parent reply	other threads:[~2019-11-01  2:13 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-09-26 14:26 [dpdk-dev] [RFC 0/2] Add a PMD for I/OAT accelerated vhost-user Jiayu Hu
2019-09-26 14:26 ` [dpdk-dev] [RFC 1/2] vhost: populate guest memory for DMA-accelerated vhost-user Jiayu Hu
2019-12-17  7:18   ` Maxime Coquelin
2019-09-26 14:26 ` [dpdk-dev] [RFC 2/2] net/vhost_ioat: add vhost I/OAT driver Jiayu Hu
2019-11-01  8:54 ` Jiayu Hu [this message]
2019-11-01  8:54   ` [dpdk-dev] [RFC v2 1/2] vhost: populate guest memory for DMA-accelerated vhost-user Jiayu Hu
2019-11-01  8:54   ` [dpdk-dev] [RFC v2 2/2] net/vhost_dma: add vHost DMA driver Jiayu Hu
2019-12-17  8:27     ` Maxime Coquelin
2019-12-17 10:20       ` Maxime Coquelin
2019-12-18  2:51         ` Hu, Jiayu
2019-12-18  3:11       ` Hu, Jiayu

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=1572598450-245091-1-git-send-email-jiayu.hu@intel.com \
    --to=jiayu.hu@intel.com \
    --cc=bruce.richardson@intel.com \
    --cc=dev@dpdk.org \
    --cc=maxime.coquelin@redhat.com \
    --cc=tiwei.bie@intel.com \
    --cc=zhihong.wang@intel.com \
    /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).