netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Tiwei Bie <tiwei.bie@intel.com>
To: mst@redhat.com, jasowang@redhat.com,
	virtualization@lists.linux-foundation.org,
	linux-kernel@vger.kernel.org, netdev@vger.kernel.org,
	virtio-dev@lists.oasis-open.org
Cc: wexu@redhat.com, jfreimann@redhat.com,
	maxime.coquelin@redhat.com, tiwei.bie@intel.com
Subject: [PATCH net-next v3 00/13] virtio: support packed ring
Date: Wed, 21 Nov 2018 18:03:17 +0800	[thread overview]
Message-ID: <20181121100330.24846-1-tiwei.bie@intel.com> (raw)

Hi,

This patch set implements packed ring support in virtio driver.

A performance test between pktgen (pktgen_sample03_burst_single_flow.sh)
and DPDK vhost (testpmd/rxonly/vhost-PMD) has been done, I saw
~30% performance gain in packed ring in this case.

To make this patch set work with below patch set for vhost,
some hacks are needed to set the _F_NEXT flag in indirect
descriptors (this should be fixed in vhost):

https://lkml.org/lkml/2018/7/3/33

v2 -> v3:
- Use leXX instead of virtioXX (MST);
- Refactor split ring first (MST);
- Add debug helpers (MST);
- Put split/packed ring specific fields in sub structures (MST);
- Handle normal descriptors and indirect descriptors differently (MST);
- Track the DMA addr/len related info in a separate structure (MST);
- Calculate AVAIL/USED flags only when wrap counter wraps (MST);
- Define a struct/union to read event structure (MST);
- Define a macro for wrap counter bit in uapi (MST);
- Define the AVAIL/USED bits as shifts instead of values (MST);
- s/_F_/_FLAG_/ in VRING_PACKED_EVENT_* as they are values (MST);
- Drop the notify workaround for QEMU's tx-timer in packed ring (MST);

v1 -> v2:
- Use READ_ONCE() to read event off_wrap and flags together (Jason);
- Add comments related to ccw (Jason);

RFC v6 -> v1:
- Avoid extra virtio_wmb() in virtqueue_enable_cb_delayed_packed()
  when event idx is off (Jason);
- Fix bufs calculation in virtqueue_enable_cb_delayed_packed() (Jason);
- Test the state of the desc at used_idx instead of last_used_idx
  in virtqueue_enable_cb_delayed_packed() (Jason);
- Save wrap counter (as part of queue state) in the return value
  of virtqueue_enable_cb_prepare_packed();
- Refine the packed ring definitions in uapi;
- Rebase on the net-next tree;

RFC v5 -> RFC v6:
- Avoid tracking addr/len/flags when DMA API isn't used (MST/Jason);
- Define wrap counter as bool (Jason);
- Use ALIGN() in vring_init_packed() (Jason);
- Avoid using pointer to track `next` in detach_buf_packed() (Jason);
- Add comments for barriers (Jason);
- Don't enable RING_PACKED on ccw for now (noticed by Jason);
- Refine the memory barrier in virtqueue_poll();
- Add a missing memory barrier in virtqueue_enable_cb_delayed_packed();
- Remove the hacks in virtqueue_enable_cb_prepare_packed();

RFC v4 -> RFC v5:
- Save DMA addr, etc in desc state (Jason);
- Track used wrap counter;

RFC v3 -> RFC v4:
- Make ID allocation support out-of-order (Jason);
- Various fixes for EVENT_IDX support;

RFC v2 -> RFC v3:
- Split into small patches (Jason);
- Add helper virtqueue_use_indirect() (Jason);
- Just set id for the last descriptor of a list (Jason);
- Calculate the prev in virtqueue_add_packed() (Jason);
- Fix/improve desc suppression code (Jason/MST);
- Refine the code layout for XXX_split/packed and wrappers (MST);
- Fix the comments and API in uapi (MST);
- Remove the BUG_ON() for indirect (Jason);
- Some other refinements and bug fixes;

RFC v1 -> RFC v2:
- Add indirect descriptor support - compile test only;
- Add event suppression supprt - compile test only;
- Move vring_packed_init() out of uapi (Jason, MST);
- Merge two loops into one in virtqueue_add_packed() (Jason);
- Split vring_unmap_one() for packed ring and split ring (Jason);
- Avoid using '%' operator (Jason);
- Rename free_head -> next_avail_idx (Jason);
- Add comments for virtio_wmb() in virtqueue_add_packed() (Jason);
- Some other refinements and bug fixes;


Tiwei Bie (13):
  virtio: add packed ring types and macros
  virtio_ring: add _split suffix for split ring functions
  virtio_ring: put split ring functions together
  virtio_ring: put split ring fields in a sub struct
  virtio_ring: introduce debug helpers
  virtio_ring: introduce helper for indirect feature
  virtio_ring: allocate desc state for split ring separately
  virtio_ring: extract split ring handling from ring creation
  virtio_ring: cache whether we will use DMA API
  virtio_ring: introduce packed ring support
  virtio_ring: leverage event idx in packed ring
  virtio_ring: disable packed ring on unsupported transports
  virtio_ring: advertize packed ring layout

 drivers/misc/mic/vop/vop_main.c        |   13 +
 drivers/remoteproc/remoteproc_virtio.c |   13 +
 drivers/s390/virtio/virtio_ccw.c       |   14 +
 drivers/virtio/virtio_ring.c           | 1811 +++++++++++++++++++++++++-------
 include/uapi/linux/virtio_config.h     |    3 +
 include/uapi/linux/virtio_ring.h       |   52 +
 6 files changed, 1530 insertions(+), 376 deletions(-)

-- 
2.14.5

             reply	other threads:[~2018-11-21 10:03 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-11-21 10:03 Tiwei Bie [this message]
2018-11-21 10:03 ` [PATCH net-next v3 01/13] virtio: add packed ring types and macros Tiwei Bie
2018-11-30  8:10   ` Jason Wang
2018-11-30  9:53     ` Tiwei Bie
2018-11-30 12:47       ` Michael S. Tsirkin
2018-11-30 13:01         ` Maxime Coquelin
2018-11-30 13:52           ` Michael S. Tsirkin
2018-11-30 15:37             ` Tiwei Bie
2018-11-30 15:53               ` Michael S. Tsirkin
2018-11-30 16:24                 ` Tiwei Bie
2018-11-30 16:46                   ` Michael S. Tsirkin
2018-12-01  2:03                     ` Tiwei Bie
2018-11-21 10:03 ` [PATCH net-next v3 02/13] virtio_ring: add _split suffix for split ring functions Tiwei Bie
2018-11-21 10:03 ` [PATCH net-next v3 03/13] virtio_ring: put split ring functions together Tiwei Bie
2018-11-21 10:03 ` [PATCH net-next v3 04/13] virtio_ring: put split ring fields in a sub struct Tiwei Bie
2018-11-21 10:03 ` [PATCH net-next v3 05/13] virtio_ring: introduce debug helpers Tiwei Bie
2018-11-21 10:03 ` [PATCH net-next v3 06/13] virtio_ring: introduce helper for indirect feature Tiwei Bie
2018-11-21 10:03 ` [PATCH net-next v3 07/13] virtio_ring: allocate desc state for split ring separately Tiwei Bie
2018-11-21 10:03 ` [PATCH net-next v3 08/13] virtio_ring: extract split ring handling from ring creation Tiwei Bie
2018-11-21 10:03 ` [PATCH net-next v3 09/13] virtio_ring: cache whether we will use DMA API Tiwei Bie
2018-11-21 10:03 ` [PATCH net-next v3 10/13] virtio_ring: introduce packed ring support Tiwei Bie
2018-11-21 10:03 ` [PATCH net-next v3 11/13] virtio_ring: leverage event idx in packed ring Tiwei Bie
2018-11-21 10:03 ` [PATCH net-next v3 12/13] virtio_ring: disable packed ring on unsupported transports Tiwei Bie
2018-11-21 10:03 ` [PATCH net-next v3 13/13] virtio_ring: advertize packed ring layout Tiwei Bie
2018-11-21 12:20 ` [PATCH net-next v3 00/13] virtio: support packed ring Michael S. Tsirkin
2018-11-21 12:42   ` Tiwei Bie
2018-11-21 13:46     ` Jason Wang
2018-11-21 17:37   ` David Miller
2018-11-27  6:08 ` Michael S. Tsirkin
2018-11-27  6:18   ` David Miller

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=20181121100330.24846-1-tiwei.bie@intel.com \
    --to=tiwei.bie@intel.com \
    --cc=jasowang@redhat.com \
    --cc=jfreimann@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=maxime.coquelin@redhat.com \
    --cc=mst@redhat.com \
    --cc=netdev@vger.kernel.org \
    --cc=virtio-dev@lists.oasis-open.org \
    --cc=virtualization@lists.linux-foundation.org \
    --cc=wexu@redhat.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).