[dpdk-dev] [PATCH v2 1/8] net/memif: do not update local copy of tail in tx function

Honnappa Nagarahalli Honnappa.Nagarahalli at arm.com
Wed Oct 7 19:08:19 CEST 2020


Hi Jakub,
	Appreciate if you could review this series and provide any comments you might have.

Thank you,
Honnappa

> -----Original Message-----
> From: Honnappa Nagarahalli <honnappa.nagarahalli at arm.com>
> Sent: Monday, September 28, 2020 2:03 PM
> To: dev at dpdk.org; Honnappa Nagarahalli <Honnappa.Nagarahalli at arm.com>;
> Phil Yang <Phil.Yang at arm.com>; jgrajcia at cisco.com; ferruh.yigit at intel.com
> Cc: nd <nd at arm.com>; stable at dpdk.org
> Subject: [PATCH v2 1/8] net/memif: do not update local copy of tail in tx
> function
> 
> In the case of S2M queues, the receiver synchronizes with the sender (i.e.
> informs of the packets it has received) using ring->tail.
> Hence, the sender does not need to update last_tail.
> 
> In the case of M2S queues, the receiver uses last_tail to keep track of the
> descriptors it has received. The sender is not required to update the last_tail.
> Updating the last_tail makes it a shared variable between the transmitter and
> receiver affecting the performance.
> 
> Fixes: 09c7e63a71f9 ("net/memif: introduce memory interface PMD")
> Cc: jgrajcia at cisco.com
> Cc: stable at dpdk.org
> 
> Signed-off-by: Honnappa Nagarahalli <honnappa.nagarahalli at arm.com>
> Reviewed-by: Phil Yang <phil.yang at arm.com>
> Reviewed-by: Ruifeng Wang <ruifeng.wang at arm.com>
> ---
>  drivers/net/memif/rte_eth_memif.c | 6 ++----
>  1 file changed, 2 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/net/memif/rte_eth_memif.c
> b/drivers/net/memif/rte_eth_memif.c
> index a19c0f3e6..130099f2e 100644
> --- a/drivers/net/memif/rte_eth_memif.c
> +++ b/drivers/net/memif/rte_eth_memif.c
> @@ -580,12 +580,10 @@ eth_memif_tx(void *queue, struct rte_mbuf **bufs,
> uint16_t nb_pkts)
>  	ring_size = 1 << mq->log2_ring_size;
>  	mask = ring_size - 1;
> 
> -	n_free = __atomic_load_n(&ring->tail, __ATOMIC_ACQUIRE) - mq-
> >last_tail;
> -	mq->last_tail += n_free;
> -
>  	if (type == MEMIF_RING_S2M) {
>  		slot = __atomic_load_n(&ring->head, __ATOMIC_ACQUIRE);
> -		n_free = ring_size - slot + mq->last_tail;
> +		n_free = ring_size - slot +
> +				__atomic_load_n(&ring->tail,
> __ATOMIC_ACQUIRE);
>  	} else {
>  		slot = __atomic_load_n(&ring->tail, __ATOMIC_ACQUIRE);
>  		n_free = __atomic_load_n(&ring->head, __ATOMIC_ACQUIRE)
> - slot;
> --
> 2.17.1



More information about the dev mailing list