All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jens Freimann <jfreimann@redhat.com>
To: dev@dpdk.org
Cc: tiwei.bie@intel.com, maxime.coquelin@redhat.com, Gavin.Hu@arm.com
Subject: [PATCH v13 00/10] implement packed virtqueues
Date: Fri, 14 Dec 2018 16:59:06 +0100	[thread overview]
Message-ID: <20181214155916.1142-1-jfreimann@redhat.com> (raw)


This is a basic implementation of packed virtqueues as specified in the
Virtio 1.1 draft. A compiled version of the current draft is available
at https://github.com/oasis-tcs/virtio-docs.git (or as .pdf at
https://github.com/oasis-tcs/virtio-docs/blob/master/virtio-v1.1-packed-wd10.pdf

A packed virtqueue is different from a split virtqueue in that it
consists of only a single descriptor ring that replaces available and
used ring, index and descriptor pointers.

Each descriptor is readable and writable and has a flags field. These flags
will mark if a descriptor is available or used.  To detect new available descriptors
even after the ring has wrapped, device and driver each have a
single-bit wrap counter that is flipped from 0 to 1 and vice versa every time
the last descriptor in the ring is used/made available.

With this patch set I see performance equal or slightly better (+2-3%) in a PVP
scenario compared to split virtqueues (v18.11 in host) 

regards,
Jens 

v12->v13:
 * re-order patches 1-3 to address Maximes comment. Move all defines and
   data structures to patch one, all helpers to patch 2.  
 * build-tested and ran checkpatch on all patches again
 * add split/packed versions for virtio_enable_intr()
 * remove redundant changes from split vq code
 * just return -1 when cq is enabled for packed vqs in virtio-user 

v11->v12:
 * add a patch to disable control vq when packed vq is enabled.
   I have a patch to support this but it needs a bit more work
   and I think it shouldn't stop this series from being applied
 * rework mergeable receive buffer code to be more efficient, by
   batching descriptor refill, similar to what Maxime proposed for
   split virtqueues
 * removed unnecessary checks in virtio_recv_mergeable_pkts_packed
   (Maxime) 
 * Did not merge receive functions as Maxime suggested because it seemed
   to cause a small performance regression
 * Move event_flags_shadow from patch 3 to 1 (Maxime)
 * Did not merge xmit functions and call _split/_packed functions from
   there because it seemed to cause small performance drop (-0.5%)
   (Maxime)

v10-v11:
 * this version includes some fixes from Tiwei, so I added his
   Signed-off-by to some of the patches
 * fix hang with mergable rx buffers (Tiwei)
 * clean-up code and simplify buffer handling (Tiwei)
 * rebase to current virtio-next master branch

v9-v10:
 * don't mix index into buffer list and descriptors
 * whitespace and formatting issues
 * remove "VQ:" in dump virtqueue patch
 * add extra packed vring struct to virtqueue and change function
   prototypes and code accordingly
 * move wrap_counters to virtqueue
 * make if-conditions for packed and !packed more clear in
   set_rxtx_funcs()
 * initialize wrap counters in first patch, instead of rx and tx
   implementation patch
 * make virtio-user not supported with packed virtqueues, to
   be fixed in other patch set?

v8-v9:
 * fix virtio_ring_free_chain_packed() to handle descriptors
   correctly in case of out-of-order
 * fix check in virtqueue_xmit_cleanup_packed() to improve performance

v7->v8:
 * move desc_is_used change to correct patch
 * remove trailing newline
 * correct xmit code, flags update and memory barrier
 * move packed desc init to dedicated function, split
   and packed variant


Jens Freimann (9):
  net/virtio: add packed virtqueue defines
  net/virtio: add packed virtqueue helpers
  net/virtio: vring init for packed queues
  net/virtio: dump packed virtqueue data
  net/virtio: implement transmit path for packed queues
  net/virtio: implement receive path for packed queues
  net/virtio: add virtio send command packed queue support
  net/virtio-user: fail if q used with packed vq
  net/virtio: enable packed virtqueues by default

Yuanhan Liu (1):
  net/virtio-user: add option to use packed queues

 drivers/net/virtio/virtio_ethdev.c            | 221 +++++--
 drivers/net/virtio/virtio_ethdev.h            |   8 +
 drivers/net/virtio/virtio_pci.h               |   7 +
 drivers/net/virtio/virtio_ring.h              |  64 +-
 drivers/net/virtio/virtio_rxtx.c              | 611 +++++++++++++++++-
 .../net/virtio/virtio_user/virtio_user_dev.c  |  27 +-
 .../net/virtio/virtio_user/virtio_user_dev.h  |   2 +-
 drivers/net/virtio/virtio_user_ethdev.c       |  14 +-
 drivers/net/virtio/virtqueue.c                |  43 +-
 drivers/net/virtio/virtqueue.h                | 128 +++-
 10 files changed, 1059 insertions(+), 66 deletions(-)

-- 
2.17.2

             reply	other threads:[~2018-12-14 15:59 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-12-14 15:59 Jens Freimann [this message]
2018-12-14 15:59 ` [PATCH v13 01/10] net/virtio: add packed virtqueue defines Jens Freimann
2018-12-17 15:45   ` Maxime Coquelin
2018-12-14 15:59 ` [PATCH v13 02/10] net/virtio: add packed virtqueue helpers Jens Freimann
2018-12-17 16:09   ` Maxime Coquelin
2018-12-17 16:30   ` Maxime Coquelin
2018-12-14 15:59 ` [PATCH v13 03/10] net/virtio: vring init for packed queues Jens Freimann
2018-12-17 16:15   ` Maxime Coquelin
2018-12-14 15:59 ` [PATCH v13 04/10] net/virtio: dump packed virtqueue data Jens Freimann
2018-12-14 15:59 ` [PATCH v13 05/10] net/virtio: implement transmit path for packed queues Jens Freimann
2018-12-17 16:35   ` Maxime Coquelin
2018-12-14 15:59 ` [PATCH v13 06/10] net/virtio: implement receive " Jens Freimann
2018-12-17 16:46   ` Maxime Coquelin
2018-12-14 15:59 ` [PATCH v13 07/10] net/virtio: add virtio send command packed queue support Jens Freimann
2018-12-17 16:48   ` Maxime Coquelin
2018-12-14 15:59 ` [PATCH v13 08/10] net/virtio-user: add option to use packed queues Jens Freimann
2018-12-17 16:49   ` Maxime Coquelin
2018-12-14 15:59 ` [PATCH v13 09/10] net/virtio-user: fail if q used with packed vq Jens Freimann
2018-12-17 16:52   ` Maxime Coquelin
2018-12-17 19:27     ` Jens Freimann
2018-12-14 15:59 ` [PATCH v13 10/10] net/virtio: enable packed virtqueues by default Jens Freimann
2018-12-17 16:52   ` Maxime Coquelin

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=20181214155916.1142-1-jfreimann@redhat.com \
    --to=jfreimann@redhat.com \
    --cc=Gavin.Hu@arm.com \
    --cc=dev@dpdk.org \
    --cc=maxime.coquelin@redhat.com \
    --cc=tiwei.bie@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.