From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 2E85AA0589; Fri, 27 Mar 2020 10:19:11 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 11E711C0CF; Fri, 27 Mar 2020 10:18:30 +0100 (CET) Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by dpdk.org (Postfix) with ESMTP id 9BECA1C0C6 for ; Fri, 27 Mar 2020 10:18:18 +0100 (CET) IronPort-SDR: 0NX4xYPjh8fqdTXBJKVbYeAjBUacmi8hGkpk8IX4D0Ae4mmU+B3GfL6dziOY2DM2YonXaR7XtC 0hhHooz8u5tA== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Mar 2020 02:18:18 -0700 IronPort-SDR: ySWE7/Cz/jqTuANpsi8I/7dI1z0DEX4FOBQInpvzHeujU8wgQg3PGc3Eh+qdoW1cw+Peh+hnqn DOIbPjNr014w== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.72,311,1580803200"; d="scan'208";a="271508007" Received: from npg-dpdk-virtual-marvin-dev.sh.intel.com ([10.67.119.58]) by fmsmga004.fm.intel.com with ESMTP; 27 Mar 2020 02:18:16 -0700 From: Marvin Liu To: maxime.coquelin@redhat.com, xiaolong.ye@intel.com, zhihong.wang@intel.com Cc: dev@dpdk.org, Marvin Liu Date: Sat, 28 Mar 2020 00:54:11 +0800 Message-Id: <20200327165412.87359-7-yong.liu@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200327165412.87359-1-yong.liu@intel.com> References: <20200313174230.74661-1-yong.liu@intel.com> <20200327165412.87359-1-yong.liu@intel.com> Subject: [dpdk-dev] [PATCH v2 6/7] net/virtio: add election for vectorized datapath 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" Packed ring vectorized datapath will be selected when requirements are fulfilled. 1. AVX512 is allowed in config file and supported by compiler 2. Host cpu support AVX512F 3. ring size is power of two 4. virtio VERSION_1 and in_order features are negotiated 5. LRO and mergeable feature disabled in Rx datapath Signed-off-by: Marvin Liu diff --git a/drivers/net/virtio/virtio_ethdev.c b/drivers/net/virtio/virtio_ethdev.c index f9d0ea70d..21570e5cf 100644 --- a/drivers/net/virtio/virtio_ethdev.c +++ b/drivers/net/virtio/virtio_ethdev.c @@ -1518,9 +1518,12 @@ set_rxtx_funcs(struct rte_eth_dev *eth_dev) if (vtpci_packed_queue(hw)) { PMD_INIT_LOG(INFO, "virtio: using packed ring %s Tx path on port %u", - hw->use_inorder_tx ? "inorder" : "standard", + hw->packed_vec_tx ? "vectorized" : "standard", eth_dev->data->port_id); - eth_dev->tx_pkt_burst = virtio_xmit_pkts_packed; + if (hw->packed_vec_tx) + eth_dev->tx_pkt_burst = virtio_xmit_pkts_packed_vec; + else + eth_dev->tx_pkt_burst = virtio_xmit_pkts_packed; } else { if (hw->use_inorder_tx) { PMD_INIT_LOG(INFO, "virtio: using inorder Tx path on port %u", @@ -1534,7 +1537,13 @@ set_rxtx_funcs(struct rte_eth_dev *eth_dev) } if (vtpci_packed_queue(hw)) { - if (vtpci_with_feature(hw, VIRTIO_NET_F_MRG_RXBUF)) { + if (hw->packed_vec_rx) { + PMD_INIT_LOG(INFO, + "virtio: using packed ring vectorized Rx path on port %u", + eth_dev->data->port_id); + eth_dev->rx_pkt_burst = + &virtio_recv_pkts_packed_vec; + } else if (vtpci_with_feature(hw, VIRTIO_NET_F_MRG_RXBUF)) { PMD_INIT_LOG(INFO, "virtio: using packed ring mergeable buffer Rx path on port %u", eth_dev->data->port_id); @@ -2159,6 +2168,34 @@ virtio_dev_configure(struct rte_eth_dev *dev) hw->use_simple_rx = 1; + if (vtpci_packed_queue(hw)) { +#if defined(RTE_ARCH_X86) && defined(CC_AVX512_SUPPORT) + unsigned int vq_size; + vq_size = VTPCI_OPS(hw)->get_queue_num(hw, 0); + if (!rte_cpu_get_flag_enabled(RTE_CPUFLAG_AVX512F) || + !rte_is_power_of_2(vq_size) || + !vtpci_with_feature(hw, VIRTIO_F_IN_ORDER) || + !vtpci_with_feature(hw, VIRTIO_F_VERSION_1)) { + hw->packed_vec_rx = 0; + hw->packed_vec_tx = 0; + PMD_DRV_LOG(INFO, "disabled packed ring vectorized " + "path for requirements are not met"); + } + + if (vtpci_with_feature(hw, VIRTIO_NET_F_MRG_RXBUF)) { + hw->packed_vec_rx = 0; + PMD_DRV_LOG(ERR, "disabled packed ring vectorized rx " + "path for mrg_rxbuf enabled"); + } + + if (rx_offloads & DEV_RX_OFFLOAD_TCP_LRO) { + hw->packed_vec_rx = 0; + PMD_DRV_LOG(ERR, "disabled packed ring vectorized rx " + "path for TCP_LRO enabled"); + } +#endif + } + if (vtpci_with_feature(hw, VIRTIO_F_IN_ORDER)) { hw->use_inorder_tx = 1; hw->use_inorder_rx = 1; -- 2.17.1