[PATCH v7 3/7] mbuf: record mbuf operations history

Thomas Monjalon thomas at monjalon.net
Fri Oct 17 09:32:17 CEST 2025


17/10/2025 00:29, Morten Brørup:
> > +	/* Calculate total allocated mbufs */
> > +	uint64_t total_allocated = 0;
> > +	for (enum rte_mbuf_history_op op = RTE_MBUF_HISTORY_OP_LIB_ALLOC;
> > +			op < RTE_MBUF_HISTORY_OP_MAX; op++)
> > +		total_allocated += stats[op];
> 
> I might be overly cautious here, but the app (or driver) might have a bug, and mark the mbuf with OP_APP_FREE (or OP_PMD_FREE) without actually freeing the mbuf back to the mempool.

Yes

> So you should only trust the mempool library (OP_LIB_FREE) to mark the mbuf as actually freed. I.e. start the loop at op = RTE_MBUF_HISTORY_OP_LIB_FREE.

We cannot because these statistics are about the latest state.
So if the app marks the mbuf as freed after the library,
they should be reported as non allocated.

> The app/driver should eventually call rte_mbuf_raw_free_bulk() or similar to release the mbuf back to the mempool.

Because we don't know in which order the mbufs are marked
in the call stack, we must trust these free ops.

I really think there is room for improvements in the details of the marks
and their usage. I suggest we merge and play with this experimental feature,
and discuss in the next cycle how to improve the markers.




More information about the dev mailing list