[V2] net/memif: fix extra mbuf refcnt update in zero copy Tx
Checks
Commit Message
The refcnt update of stored mbufs in memif driver is redundant since
those mbufs are only freed in eth_memif_tx_zc(). No other place can
free those stored mbufs quietly. By removing this redundant update
single core dpdk memif performance can be improved by 7.5%.
testpmd stats on Arm Neoverse N1 (Ampere Altra)
+-----------------------------+-----------------------+
| | With refcnt update | Without refcnt update |
+--------+--------------------+-----------------------+
| Rx-pps | 2748851 | 2955487 |
+--------+--------------------+-----------------------+
| Tx-pps | 2748812 | 2955436 |
+--------+--------------------+-----------------------+
Fixes: 43b815d88188 ("net/memif: support zero-copy slave")
Cc: jgrajcia@cisco.com
Signed-off-by: Liangxing Wang <liangxing.wang@arm.com>
Signed-off-by: Wathsala Vithanage <wathsala.vithanage@arm.com>
Reviewed-by: Ruifeng Wang <ruifeng.wang@arm.com>
---
.mailmap | 2 ++
drivers/net/memif/rte_eth_memif.c | 6 ------
2 files changed, 2 insertions(+), 6 deletions(-)
Comments
On 2/14/2024 12:36 AM, Wathsala Vithanage wrote:
> The refcnt update of stored mbufs in memif driver is redundant since
> those mbufs are only freed in eth_memif_tx_zc(). No other place can
> free those stored mbufs quietly. By removing this redundant update
> single core dpdk memif performance can be improved by 7.5%.
>
> testpmd stats on Arm Neoverse N1 (Ampere Altra)
> +-----------------------------+-----------------------+
> | | With refcnt update | Without refcnt update |
> +--------+--------------------+-----------------------+
> | Rx-pps | 2748851 | 2955487 |
> +--------+--------------------+-----------------------+
> | Tx-pps | 2748812 | 2955436 |
> +--------+--------------------+-----------------------+
>
> Fixes: 43b815d88188 ("net/memif: support zero-copy slave")
> Cc: stable@dpdk.org
>
> Signed-off-by: Liangxing Wang <liangxing.wang@arm.com>
> Signed-off-by: Wathsala Vithanage <wathsala.vithanage@arm.com>
> Reviewed-by: Ruifeng Wang <ruifeng.wang@arm.com>
>
Acked-by: Ferruh Yigit <ferruh.yigit@amd.com>
Applied to dpdk-next-net/main, thanks.
@@ -791,6 +791,7 @@ Liang Ma <liangma@bytedance.com> <liangma@liangbit.com> <liang.j.ma@intel.com>
Liang-Min Larry Wang <liang-min.wang@intel.com>
Liang Xu <liang.xu@cinfotech.cn>
Liang Zhang <zhangliang@bigo.sg>
+Liangxing Wang <liangxing.wang@arm.com>
Li Feng <fengli@smartx.com>
Li Han <han.li1@zte.com.cn>
Lihong Ma <lihongx.ma@intel.com>
@@ -1506,6 +1507,7 @@ Vlad Zolotarov <vladz@cloudius-systems.com>
Vlastimil Kosar <kosar@rehivetech.com>
Volodymyr Fialko <vfialko@marvell.com>
Vu Pham <vuhuong@mellanox.com>
+Wathsala Vithanage <wathsala.vithanage@arm.com>
Wajeeh Atrash <atrwajee@amazon.com>
Walter Heymans <walter.heymans@corigine.com>
Wang Sheng-Hui <shhuiw@gmail.com>
@@ -265,8 +265,6 @@ memif_free_stored_mbufs(struct pmd_process_private *proc_private, struct memif_q
cur_tail = __atomic_load_n(&ring->tail, __ATOMIC_ACQUIRE);
while (mq->last_tail != cur_tail) {
RTE_MBUF_PREFETCH_TO_FREE(mq->buffers[(mq->last_tail + 1) & mask]);
- /* Decrement refcnt and free mbuf. (current segment) */
- rte_mbuf_refcnt_update(mq->buffers[mq->last_tail & mask], -1);
rte_pktmbuf_free_seg(mq->buffers[mq->last_tail & mask]);
mq->last_tail++;
}
@@ -825,10 +823,6 @@ memif_tx_one_zc(struct pmd_process_private *proc_private, struct memif_queue *mq
next_in_chain:
/* store pointer to mbuf to free it later */
mq->buffers[slot & mask] = mbuf;
- /* Increment refcnt to make sure the buffer is not freed before server
- * receives it. (current segment)
- */
- rte_mbuf_refcnt_update(mbuf, 1);
/* populate descriptor */
d0 = &ring->desc[slot & mask];
d0->length = rte_pktmbuf_data_len(mbuf);