Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp1803781imu; Wed, 21 Nov 2018 02:08:05 -0800 (PST) X-Google-Smtp-Source: AFSGD/X7J4aJzRFw1X9tG2dTC5zDFvAE/LR9VU4KCwNfkFTSaBd4fbrlC+hJ4F/nBKr2oWwNzX8f X-Received: by 2002:a63:fb46:: with SMTP id w6mr5407056pgj.321.1542794885767; Wed, 21 Nov 2018 02:08:05 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1542794885; cv=none; d=google.com; s=arc-20160816; b=TvoZrT5obQudgi2jtbtCCf993Fd4q16JXR+N1vLH/rIH0yuQ/JeQp4TezxAzGazAZU mCh+5d+tf2zOM5qLe/Ffvmh1zwVxlNmb7TFePDmqpFv96GZkD8ki2Oh+A4V9xWS43SHt nOZS1Z2kq/J1huturDgE7r8repNy+eZLCK8h1d/spgeSBKb/s3fNb2Q5WWnlXOEI+jBm LNUZhzbDR2ZDTYL8vBxIpjyxPfwOq1tSLbNoxuijJ6cynFMwP36ANEmXJhA+5D2k1UQz 6EfcvlZXz1140Ro4380ZiYUStbnRtllwJOXoUkQP9gL867W7k7AcUXXQXbe3GOAtmusG cnIA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from; bh=TcWxL19E4+tOjYfe4UMl0JJT9saxBZin4sOC1F43KVM=; b=qSXusGUf/RN1EbMBaGXf0Ze7Le8ShaTVG5SyWWwFU9aZT2YBbCD1tTehe/mdMJKSin s05s3SCci1aHDe1j+a7C0n4Yjm2nugJn4Nc8gv7EBMM7fswuWZwGYsaRHVSGQsANMtt+ K16KmrqMP09JWlIdcq62wJoJNr5kzMMr7eZbzQc4AabY/rnrH2yyNcR7i/eCv6kKmHdl kC4Abk24hngM8nMoinndydJFXwf1xlQ7lWDr1gZLhyDve8O2RCmwqZH3XW5t3T2LFcey 9ab3T7Hx7mZr7hYPBt2L4SOOUSencdZDZnKf8QYSMalkrQBw2XIVUUTgeJDtdrR6ujMk veXw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id p9-v6si53830217pfe.76.2018.11.21.02.07.49; Wed, 21 Nov 2018 02:08:05 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729357AbeKUUjN (ORCPT + 99 others); Wed, 21 Nov 2018 15:39:13 -0500 Received: from mga18.intel.com ([134.134.136.126]:14789 "EHLO mga18.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727046AbeKUUjM (ORCPT ); Wed, 21 Nov 2018 15:39:12 -0500 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga005.jf.intel.com ([10.7.209.41]) by orsmga106.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 21 Nov 2018 02:05:23 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.56,260,1539673200"; d="scan'208";a="275726999" Received: from btwcube1.sh.intel.com ([10.67.104.173]) by orsmga005.jf.intel.com with ESMTP; 21 Nov 2018 02:05:21 -0800 From: Tiwei Bie 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 Message-Id: <20181121100330.24846-1-tiwei.bie@intel.com> X-Mailer: git-send-email 2.14.5 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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