From patchwork Wed Jun 6 12:31:23 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxime Coquelin X-Patchwork-Id: 40691 Return-Path: Received: from mx1.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by dpdk.org (Postfix) with ESMTP id A6EEFAA90 for ; Wed, 6 Jun 2018 14:31:43 +0200 (CEST) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 0AB4B40BC068; Wed, 6 Jun 2018 12:31:43 +0000 (UTC) Received: from localhost.localdomain (ovpn-112-47.ams2.redhat.com [10.36.112.47]) by smtp.corp.redhat.com (Postfix) with ESMTP id 5FF8963F7F; Wed, 6 Jun 2018 12:31:39 +0000 (UTC) From: Maxime Coquelin To: zhihong.wang@intel.com, tiwei.bie@intel.com, dev@dpdk.org Cc: Maxime Coquelin Date: Wed, 6 Jun 2018 14:31:23 +0200 Message-Id: <20180606123128.7868-1-maxime.coquelin@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.11.54.5 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.7]); Wed, 06 Jun 2018 12:31:43 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.7]); Wed, 06 Jun 2018 12:31:43 +0000 (UTC) for IP:'10.11.54.5' DOMAIN:'int-mx05.intmail.prod.int.rdu2.redhat.com' HELO:'smtp.corp.redhat.com' FROM:'maxime.coquelin@redhat.com' RCPT:'' Subject: [dpdk-dev] [PATCH v2 0/5] net/virtio: Tx path selection and offload improvements 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: Wed, 06 Jun 2018 12:31:44 -0000 This series addresses a problem seen when running benchmars, where we see a big difference in Tx performance depending on whether Rx mergeable is enabled or not. With patch 1, Tx simple path is selected even when Rx-mrg is negotiated. Digging a bit further, I found that Tx simple path could be selected even when offload features had been negotiated. With patch 2, guest does not try to negotiate Tx offload features that haven't been selected by the application. It means that without restarting the guest, we can now switch from Tx simple path when application do no request offloads, to Tx standard path when the application request offloads. Note that to do so, one must stop the port first [0]. Another advantage of doing this than using Tx simple path when guest application does not use offload features, is that on host side, the virtio net header parsing is skipped in dequeue function. Patch 3 fixes an issue with Rx offload, as simple path was be used if application requested TCP LRO only. Finally, patch 4 aims at improving the offload feature checks in the standard paths. Below are benchmarks results when offloads are enabled at device level and simple Tx is disabled (default). Rx-mrg=off benchmarks: +------------+-------+-------------+-------------+----------+ | Run | PVP | Guest->Host | Host->Guest | Loopback | +------------+-------+-------------+-------------+----------+ | v18.05 | 14.47 | 17.02 | 17.57 | 13.15 | | + series | 11.73 | 13.90 | 17.50 | 13.19 | +------------+-------+-------------+-------------+----------+ Rx-mrg=on benchmarks: +------------+-------+-------------+-------------+----------+ | Run | PVP | Guest->Host | Host->Guest | Loopback | +------------+-------+-------------+-------------+----------+ | v18.05 | 9.53 | 13.80 | 16.70 | 13.11 | | + series | 9.58 | 13.93 | 16.70 | 13.11 | +------------+-------+-------------+-------------+----------+ Below are benchmarks results when offloads are enabled at device level and simple Tx is unlocked (with passing 'simple_tx_support=1' as Virtio device devarg). Rx-mrg=off benchmarks: +------------+-------+-------------+-------------+----------+ | Run | PVP | Guest->Host | Host->Guest | Loopback | +------------+-------+-------------+-------------+----------+ | v18.05 | 14.47 | 17.02 | 17.57 | 13.15 | | + series | 14.88 | 19.64 | 17.50 | 13.14 | +------------+-------+-------------+-------------+----------+ Rx-mrg=on benchmarks: +------------+-------+-------------+-------------+----------+ | Run | PVP | Guest->Host | Host->Guest | Loopback | +------------+-------+-------------+-------------+----------+ | v18.05 | 9.53 | 13.80 | 16.70 | 13.11 | | + series | 12.62 | 19.69 | 16.70 | 13.11 | +------------+-------+-------------+-------------+----------+ [0]: testpmd> port start 0 EAL: Error disabling MSI-X interrupts for fd 17 set_rxtx_funcs(): virtio: using mergeable buffer Rx path on port 0 set_rxtx_funcs(): virtio: using simple Tx path on port 0 Port 0: 52:54:00:58:D7:01 Checking link statuses... Done testpmd> show port 0 tx_offload capabilities Tx Offloading Capabilities of port 0 : Per Queue : Per Port : VLAN_INSERT UDP_CKSUM TCP_CKSUM TCP_TSO MULTI_SEGS testpmd> show port 0 tx_offload configuration Tx Offloading Configuration of port 0 : Port : Queue[ 0] : testpmd> port stop 0 Stopping ports... Checking link statuses... Done testpmd> csum set tcp hw 0 Parse tunnel is off IP checksum offload is sw UDP checksum offload is sw TCP checksum offload is hw SCTP checksum offload is sw Outer-Ip checksum offload is sw testpmd> port start 0 Configuring Port 0 (socket 0) EAL: Error disabling MSI-X interrupts for fd 17 set_rxtx_funcs(): virtio: using mergeable buffer Rx path on port 0 set_rxtx_funcs(): virtio: using standard Tx path on port 0 Port 0: 52:54:00:58:D7:01 Checking link statuses... Done testpmd> show port 0 tx_offload configuration Tx Offloading Configuration of port 0 : Port : TCP_CKSUM Queue[ 0] : Changes in v2: ============== - Introduce a devarg to disable simple Tx path by default (Tiwei) - Use standard PATH if VLAN strip or insert offloads are requested (Tiwei) - Use boolean instead of int/uint8_t for has_tx/rx_offload (Tiwei) Maxime Coquelin (5): net/virtio: prevent simple Tx path selection by default net/virtio: use simple path for Tx even if Rx mergeable net/vhost: improve Tx path selection net/virtio: don't use simple Rx if TCP LRO or VLAN strip requested net/virtio: improve offload check performance doc/guides/nics/virtio.rst | 9 +++ drivers/net/virtio/virtio_ethdev.c | 117 +++++++++++++++++++++++++++++++++++-- drivers/net/virtio/virtio_ethdev.h | 3 - drivers/net/virtio/virtio_pci.h | 4 ++ drivers/net/virtio/virtio_rxtx.c | 31 ++-------- 5 files changed, 130 insertions(+), 34 deletions(-)