[v4,2/5] bpf: use bulk free on filtered packets

Message ID 20251104160843.304044-3-stephen@networkplumber.org (mailing list archive)
State Superseded
Delegated to: Thomas Monjalon
Headers
Series BPF enhancements |

Checks

Context Check Description
ci/checkpatch success coding style OK

Commit Message

Stephen Hemminger Nov. 4, 2025, 4:07 p.m. UTC
When rte_pktmbuf_free_bulk is faster because it does single
mempool operation rather than per-packet.

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
 lib/bpf/bpf_pkt.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)
  

Comments

Konstantin Ananyev Nov. 6, 2025, 7:25 a.m. UTC | #1
> When rte_pktmbuf_free_bulk is faster because it does single
> mempool operation rather than per-packet.
> 
> Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
> ---
>  lib/bpf/bpf_pkt.c | 3 +--
>  1 file changed, 1 insertion(+), 2 deletions(-)
> 
> diff --git a/lib/bpf/bpf_pkt.c b/lib/bpf/bpf_pkt.c
> index 01f813c56b..087ac0f244 100644
> --- a/lib/bpf/bpf_pkt.c
> +++ b/lib/bpf/bpf_pkt.c
> @@ -177,8 +177,7 @@ apply_filter(struct rte_mbuf *mb[], const uint64_t rc[],
> uint32_t num,
> 
>  	if (drop != 0) {
>  		/* free filtered out mbufs */
> -		for (i = 0; i != k; i++)
> -			rte_pktmbuf_free(dr[i]);
> +		rte_pktmbuf_free_bulk(dr, k);
>  	} else {
>  		/* copy filtered out mbufs beyond good ones */
>  		for (i = 0; i != k; i++)
> --

Acked-by: Konstantin Ananyev <konstantin.ananyev@huawei.com>

> 2.51.0
  
Marat Khalili Nov. 7, 2025, 5:36 p.m. UTC | #2
> -----Original Message-----
> From: Stephen Hemminger <stephen@networkplumber.org>
> Sent: Tuesday 4 November 2025 16:07
> To: dev@dpdk.org
> Cc: Stephen Hemminger <stephen@networkplumber.org>; Konstantin Ananyev <konstantin.ananyev@huawei.com>
> Subject: [PATCH v4 2/5] bpf: use bulk free on filtered packets
> 
> When rte_pktmbuf_free_bulk is faster because it does single
> mempool operation rather than per-packet.
> 
> Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
> ---
>  lib/bpf/bpf_pkt.c | 3 +--
>  1 file changed, 1 insertion(+), 2 deletions(-)
> 
> diff --git a/lib/bpf/bpf_pkt.c b/lib/bpf/bpf_pkt.c
> index 01f813c56b..087ac0f244 100644
> --- a/lib/bpf/bpf_pkt.c
> +++ b/lib/bpf/bpf_pkt.c
> @@ -177,8 +177,7 @@ apply_filter(struct rte_mbuf *mb[], const uint64_t rc[], uint32_t num,
> 
>  	if (drop != 0) {
>  		/* free filtered out mbufs */
> -		for (i = 0; i != k; i++)
> -			rte_pktmbuf_free(dr[i]);
> +		rte_pktmbuf_free_bulk(dr, k);
>  	} else {
>  		/* copy filtered out mbufs beyond good ones */
>  		for (i = 0; i != k; i++)
> --
> 2.51.0

Reviewed-by: Marat Khalili <marat.khalili@huawei.com>
  

Patch

diff --git a/lib/bpf/bpf_pkt.c b/lib/bpf/bpf_pkt.c
index 01f813c56b..087ac0f244 100644
--- a/lib/bpf/bpf_pkt.c
+++ b/lib/bpf/bpf_pkt.c
@@ -177,8 +177,7 @@  apply_filter(struct rte_mbuf *mb[], const uint64_t rc[], uint32_t num,
 
 	if (drop != 0) {
 		/* free filtered out mbufs */
-		for (i = 0; i != k; i++)
-			rte_pktmbuf_free(dr[i]);
+		rte_pktmbuf_free_bulk(dr, k);
 	} else {
 		/* copy filtered out mbufs beyond good ones */
 		for (i = 0; i != k; i++)