From patchwork Mon Jul 2 13:56:33 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marvin Liu X-Patchwork-Id: 42054 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 90D892D13; Mon, 2 Jul 2018 08:11:09 +0200 (CEST) Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by dpdk.org (Postfix) with ESMTP id CB6142D13 for ; Mon, 2 Jul 2018 08:11:07 +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 fmsmga102.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 01 Jul 2018 23:11:05 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.51,298,1526367600"; d="scan'208";a="237141536" Received: from dpdk-test32.sh.intel.com ([10.67.119.193]) by orsmga005.jf.intel.com with ESMTP; 01 Jul 2018 23:11:04 -0700 From: Marvin Liu To: maxime.coquelin@redhat.com, tiwei.bie@intel.com Cc: zhihong.wang@intel.com, dev@dpdk.org, Marvin Liu Date: Mon, 2 Jul 2018 21:56:33 +0800 Message-Id: <20180702135642.52577-1-yong.liu@intel.com> X-Mailer: git-send-email 2.17.0 MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v5 0/9] support 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 reduce virtio accesses to used ring. 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. 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.0Mpps |24.2Mpps |26.0Mpps | |Normal |12.1Mpps |18.5Mpps |18.9Mpps | +--------------+----------+----------+---------+ +--------------+----------+----------------+---------+ |Virtio->Vhost |1 Queue |2 Queues |4 Queues | +--------------+----------+----------------+---------+ |Inorder |13.8Mpps |10.7 ~ 15.2Mpps |11.5Mpps | |Normal |13.3Mpps |9.8 ~ 14Mpps |10.5Mpps | +--------------+----------+----------------+---------+ +---------+----------+----------------+----------------+ |Loopback |1 Queue |2 Queues |4 Queues | +---------+----------+----------------+----------------+ |Inorder |7.4Mpps |9.1 ~ 11.6Mpps |10.5 ~ 11.3Mpps | +---------+----------+----------------+----------------+ |Normal |7.5Mpps |7.7 ~ 9.0Mpps |7.6 ~ 7.8Mpps | +---------+----------+----------------+----------------+ v5: - disable simple Tx when in-order negotiated - doc update v4: - disable simple [RT]x function for ARM - squash doc update into relevant patches - fix git-check-log and checkpatch errors v3: - refine [RT]x function selection logic - fix in-order mergeable packets index error - combine unsupport mask patch - doc virtio in-order update - fix checkpatch error v2: - merge to latest dpdk-net-virtio - not use in_direct for normal xmit packets - update available ring for each descriptor - clean up IN_ORDER xmit function - unmask feature bits when disabled in_order or mgr_rxbuf - extract common part between IN_ORDER and normal functions - update performance result Marvin Liu (9): vhost: advertise support in-order feature net/virtio: add in-order feature bit definition net/virtio-user: add unsupported features mask net/virtio-user: add mrg-rxbuf and in-order vdev parameters net/virtio: free in-order descriptors before device start net/virtio: extract common part for in-order functions net/virtio: support in-order Rx and Tx net/virtio: add in-order Rx/Tx into selection net/virtio: advertise support in-order feature doc/guides/nics/virtio.rst | 23 +- drivers/net/virtio/virtio_ethdev.c | 32 +- drivers/net/virtio/virtio_ethdev.h | 7 + drivers/net/virtio/virtio_pci.h | 8 + drivers/net/virtio/virtio_rxtx.c | 639 ++++++++++++++++-- .../net/virtio/virtio_user/virtio_user_dev.c | 30 +- .../net/virtio/virtio_user/virtio_user_dev.h | 4 +- drivers/net/virtio/virtio_user_ethdev.c | 47 +- drivers/net/virtio/virtqueue.c | 8 + drivers/net/virtio/virtqueue.h | 2 + lib/librte_vhost/socket.c | 6 + lib/librte_vhost/vhost.h | 10 +- 12 files changed, 736 insertions(+), 80 deletions(-)