From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx1.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by dpdk.org (Postfix) with ESMTP id 8E76F1B432 for ; Fri, 29 Jun 2018 10:04:27 +0200 (CEST) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 068E487A81; Fri, 29 Jun 2018 08:04:27 +0000 (UTC) Received: from [10.36.112.15] (unknown [10.36.112.15]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 596DF2026D68; Fri, 29 Jun 2018 08:04:24 +0000 (UTC) To: "Liu, Yong" , "Bie, Tiwei" Cc: "Wang, Zhihong" , "dev@dpdk.org" References: <20180628215235.106069-1-yong.liu@intel.com> <20180628215235.106069-9-yong.liu@intel.com> <86228AFD5BCD8E4EBFD2B90117B5E81E630CDAE9@SHSMSX103.ccr.corp.intel.com> From: Maxime Coquelin Message-ID: <1d68616b-1408-7cf1-2591-72756a7a0cdd@redhat.com> Date: Fri, 29 Jun 2018 10:04:23 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.8.0 MIME-Version: 1.0 In-Reply-To: <86228AFD5BCD8E4EBFD2B90117B5E81E630CDAE9@SHSMSX103.ccr.corp.intel.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.78 on 10.11.54.4 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.1]); Fri, 29 Jun 2018 08:04:27 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.1]); Fri, 29 Jun 2018 08:04:27 +0000 (UTC) for IP:'10.11.54.4' DOMAIN:'int-mx04.intmail.prod.int.rdu2.redhat.com' HELO:'smtp.corp.redhat.com' FROM:'maxime.coquelin@redhat.com' RCPT:'' Subject: Re: [dpdk-dev] [PATCH v3 08/11] net/virtio: add in-order Rx/Tx into selection 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: Fri, 29 Jun 2018 08:04:27 -0000 On 06/28/2018 05:39 PM, Liu, Yong wrote: > > >> -----Original Message----- >> From: Maxime Coquelin [mailto:maxime.coquelin@redhat.com] >> Sent: Thursday, June 28, 2018 11:16 PM >> To: Liu, Yong ; Bie, Tiwei >> Cc: Wang, Zhihong ; dev@dpdk.org >> Subject: Re: [PATCH v3 08/11] net/virtio: add in-order Rx/Tx into >> selection >> >> >> >> On 06/28/2018 11:52 PM, Marvin Liu wrote: >>> After IN_ORDER Rx/Tx paths added, need to update Rx/Tx path selection >>> logic. >>> >>> Rx path select logic: If IN_ORDER is disabled will select normal Rx >>> path. If IN_ORDER is enabled, Rx offload and merge-able are disabled >>> will select simple Rx path. Otherwise will select IN_ORDER Rx path. >>> >>> Tx path select logic: If IN_ORDER is disabled will select normal Tx >>> path. If IN_ORDER is enabled and merge-able is disabled will select >>> simple Tx path. Otherwise will select IN_ORDER Tx path. >>> >>> Signed-off-by: Marvin Liu >>> >>> diff --git a/drivers/net/virtio/virtio_ethdev.c >> b/drivers/net/virtio/virtio_ethdev.c >>> index df50a571a..2b3d65f80 100644 >>> --- a/drivers/net/virtio/virtio_ethdev.c >>> +++ b/drivers/net/virtio/virtio_ethdev.c >>> @@ -1320,6 +1320,11 @@ set_rxtx_funcs(struct rte_eth_dev *eth_dev) >>> PMD_INIT_LOG(INFO, "virtio: using simple Rx path on port %u", >>> eth_dev->data->port_id); >>> eth_dev->rx_pkt_burst = virtio_recv_pkts_vec; >>> + } else if (hw->use_inorder_rx) { >>> + PMD_INIT_LOG(INFO, >>> + "virtio: using inorder mergeable buffer Rx path on >> port %u", >>> + eth_dev->data->port_id); >>> + eth_dev->rx_pkt_burst = &virtio_recv_mergeable_pkts_inorder; >>> } else if (vtpci_with_feature(hw, VIRTIO_NET_F_MRG_RXBUF)) { >>> PMD_INIT_LOG(INFO, >>> "virtio: using mergeable buffer Rx path on port %u", >>> @@ -1335,6 +1340,10 @@ set_rxtx_funcs(struct rte_eth_dev *eth_dev) >>> PMD_INIT_LOG(INFO, "virtio: using simple Tx path on port %u", >>> eth_dev->data->port_id); >>> eth_dev->tx_pkt_burst = virtio_xmit_pkts_simple; >>> + } else if (hw->use_inorder_tx) { >>> + PMD_INIT_LOG(INFO, "virtio: using inorder Tx path on port %u", >>> + eth_dev->data->port_id); >>> + eth_dev->tx_pkt_burst = virtio_xmit_pkts_inorder; >>> } else { >>> PMD_INIT_LOG(INFO, "virtio: using standard Tx path on port %u", >>> eth_dev->data->port_id); >>> @@ -1871,24 +1880,24 @@ virtio_dev_configure(struct rte_eth_dev *dev) >>> >>> rte_spinlock_init(&hw->state_lock); >>> >>> - hw->use_simple_rx = 1; >>> - hw->use_simple_tx = 1; >>> - >>> #if defined RTE_ARCH_ARM64 || defined RTE_ARCH_ARM >>> if (!rte_cpu_get_flag_enabled(RTE_CPUFLAG_NEON)) { >>> hw->use_simple_rx = 0; >>> hw->use_simple_tx = 0; >>> } >>> #endif >>> - if (vtpci_with_feature(hw, VIRTIO_NET_F_MRG_RXBUF)) { >>> - hw->use_simple_rx = 0; >>> - hw->use_simple_tx = 0; >>> + if (vtpci_with_feature(hw, VIRTIO_F_IN_ORDER)) { >>> + if (vtpci_with_feature(hw, VIRTIO_NET_F_MRG_RXBUF)) { >>> + hw->use_inorder_rx = 1; >>> + hw->use_inorder_tx = 1; >>> + } else { >>> + hw->use_simple_tx = 1; >>> + if (!(rx_offloads & (DEV_RX_OFFLOAD_UDP_CKSUM | >>> + DEV_RX_OFFLOAD_TCP_CKSUM))) >>> + hw->use_simple_rx = 1; >>> + } >> >> It seems to be wrong. >> For example if IN_ORDER hasn't been negotiated, we might want to use the >> simple path if no rx offload have been requested by the application. >> >> It was the case before the patch if I'm not mistaken. > > Maxime, > IN_ORDER is the prerequisite for selection simple rx/tx path. So when IN_ORDER + mergeable off + no rx offload will chose simple rx path. Ok, I wonder in that case if I could just remove the simple Tx path in my series as it is not compliant with IN_ORDER. Tiwei, what's your take on this? Also, I wonder if it would make sense to backport the vhost patch that advertize IN_ORDER features to the LTS, as no functional changes, except that it prevents using "simple/inorder" path with dequeue zero copy, which is a good thing. Any thoughts? >> >> Also, with ARM platform, we force not to use simple path, but in case >> IN_ORDER has been negotiated but not MRG_RXBUF, it gets re-enabled. > > Will move ARM force action behind normal selection, thus can satisfy ARM. I can change when applying. Thanks, Maxime > Thanks, > Marvin > >> >>> } >>> >>> - if (rx_offloads & (DEV_RX_OFFLOAD_UDP_CKSUM | >>> - DEV_RX_OFFLOAD_TCP_CKSUM)) >>> - hw->use_simple_rx = 0; >>> - >>> return 0; >>> } >>> >>>