From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by dpdk.org (Postfix) with ESMTP id D5A325F24 for ; Mon, 25 Jun 2018 09:31:11 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by orsmga104.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 25 Jun 2018 00:31:10 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.51,269,1526367600"; d="scan'208";a="240338521" Received: from dpdk-test32.sh.intel.com ([10.67.119.193]) by fmsmga006.fm.intel.com with ESMTP; 25 Jun 2018 00:31:09 -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, 25 Jun 2018 23:17:02 +0800 Message-Id: <20180625151710.29437-1-yong.liu@intel.com> X-Mailer: git-send-email 2.17.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Subject: [dpdk-dev] [PATCH v2 0/8] 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: , X-List-Received-Date: Mon, 25 Jun 2018 07:31:12 -0000 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 | +---------+----------+----------------+----------------+ 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 (8): vhost: announce VIRTIO_F_IN_ORDER support net/virtio: add VIRTIO_F_IN_ORDER definition 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: 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 | 635 ++++++++++++++++-- .../net/virtio/virtio_user/virtio_user_dev.c | 14 +- .../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 | 6 + lib/librte_vhost/vhost.h | 10 +- 11 files changed, 688 insertions(+), 69 deletions(-) -- 2.17.0