On Sun, Oct 6, 2024 at 6:39 PM Alan Beadle <ab.bea...@gmail.com> wrote: > > Hi everyone, > > Based on my thread from last week, I am using rte_mbuf_refcnt_update() > to increment the mbuf refcnts so that the driver will not free buffers > before my local readers are done with them. > I am also maintaining a queue of mbufs that local readers are finished > with, and periodically using rte_mbuf_refcnt_read() to see if the > refcnt is 1 yet, so that they can be freed or reused. > > An aside: Is there any problem with reuse of mbufs? Without actually > freeing and re-allocating it, that is? I plan to do this in order to > avoid having to link new mbufs to other reused data structures in my > application. > > The current problem is as follows: My application has a separate > unrelated heap (special purpose and bounded in size) and this heap > runs out of memory after a brief time because of having to track so > many unfreed mbufs. It appears that none of the mbufs are being freed
Would it help to store this per-mbuf tracking context into a private area? You can ask for a per-mbuf private area at the mempool creation, see priv_size. https://doc.dpdk.org/api/rte__mbuf_8h.html#a593921f13307803b94bbb4e0932db962 > by the driver after being sent, and it looks like it won't free them > until it runs out of descriptors, which is too long for my situation. > > I have confirmed that the packets are being sent (received on other PC > with wireshark) and should be freeable. Is there a way to force the > driver to free sent mbufs earlier than when it runs out of > descriptors? -- David Marchand