From patchwork Fri Jun 8 09:07:17 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Marvin Liu X-Patchwork-Id: 40793 Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 97FB91B03D; Fri, 8 Jun 2018 03:20:56 +0200 (CEST) Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by dpdk.org (Postfix) with ESMTP id 87D007CC9 for ; Fri, 8 Jun 2018 03:20:54 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga005.jf.intel.com ([10.7.209.41]) by orsmga101.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 07 Jun 2018 18:20:51 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.49,488,1520924400"; d="scan'208";a="230856596" Received: from dpdk-test32.sh.intel.com ([10.67.119.57]) by orsmga005.jf.intel.com with ESMTP; 07 Jun 2018 18:20:50 -0700 From: Marvin Liu To: maxime.coquelin@redhat.com, tiwei.bie@intel.com Cc: zhihong.wang@intel.com, dev@dpdk.org, Marvin Liu Date: Fri, 8 Jun 2018 17:07:17 +0800 Message-Id: <20180608090724.20855-1-yong.liu@intel.com> X-Mailer: git-send-email 2.17.0 MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH 0/7] support VIRTIO_F_IN_ORDER feature 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" In latest virtio-spec, new feature bit VIRTIO_F_IN_ORDER was introduced. When this feature has been negotiated, virtio driver will use descriptors in ring order: starting from offset 0 in the table, and wrapping around at the end of the table. Vhost devices will always use descriptors in the same order in which they have been made available. This can simplify vhost and device code as desc/used/avail ring are using same index. Based on updated virtio-spec, this series realized IN_ORDER prototype in virtio driver. Due to new [RT]x path added into selection, also add two new parameters mrg_rx and in_order into virtio-user vdev parameters list. This will allow user to configure feature bits thus can impact [RT]x path selection. IN_ORDER can improve virtio/vhost performance. This patch implement virtio driver part only, we can see significant gain there. As a result it impacts vhost performance a little since there’s no dedicated Rx/Tx implementation on vhost side. This can be added in another patch later. Performance of virtio user with IN_ORDER feature: Platform: Purely CPU: Intel(R) Xeon(R) Platinum 8160 CPU @ 2.10GHz DPDK baseline: 18.05 Setup: testpmd with vhost vdev + testpmd with virtio vdev +--------------+----------+----------+---------+ |Vhost->Virtio |1 Queue |2 Queues |4 Queues | +--------------+----------+----------+---------+ |Inorder |12.9Mpps |25.4Mpps |31.6Mpps | |Normal |12.1Mpps |18.5Mpps |18.9Mpps | +--------------+----------+----------+---------+ +--------------+----------+----------------+---------+ |Virtio->Vhost |1 Queue |2 Queues |4 Queues | +--------------+----------+----------------+---------+ |Inorder |16.4Mpps |11.9 ~ 19.5Mpps |11.8Mpps | |Normal |13.3Mpps |9.8 ~ 14Mpps |10.5Mpps | +--------------+----------+----------------+---------+ +---------+----------+----------------+----------------+ |Loopback |1 Queue |2 Queues |4 Queues | +---------+----------+----------------+----------------+ |Inorder |6.2Mpps |9.5 ~ 11.9Mpps |10.6 ~ 11.3Mpps | +---------+----------+----------------+----------------+ Marvin Liu (7): vhost: announce VIRTIO_F_IN_ORDER support net/virtio: add VIRTIO_F_IN_ORDER definition net/virtio-user: add mgr_rxbuf and in_order vdev parameters net/virtio: free IN_ORDER descriptors net/virtio: support IN_ORDER Rx and Tx net/virtio: add IN_ORDER Rx/Tx into selection net/virtio: annouce VIRTIO_F_IN_ORDER support drivers/net/virtio/virtio_ethdev.c | 31 +- drivers/net/virtio/virtio_ethdev.h | 7 + drivers/net/virtio/virtio_pci.h | 8 + drivers/net/virtio/virtio_rxtx.c | 618 ++++++++++++++++-- .../net/virtio/virtio_user/virtio_user_dev.c | 10 +- .../net/virtio/virtio_user/virtio_user_dev.h | 3 +- drivers/net/virtio/virtio_user_ethdev.c | 33 +- drivers/net/virtio/virtqueue.c | 8 + drivers/net/virtio/virtqueue.h | 2 + lib/librte_vhost/socket.c | 4 + lib/librte_vhost/vhost.h | 10 +- 11 files changed, 668 insertions(+), 66 deletions(-)