On Mon, Aug 31, 2026 at 06:20:19PM +0000, Randy Tice (rtice) wrote: > Hi, > > I would like to get feedback on a proposed mbuf change before sending > patches. > > Some deployments need a guaranteed private-data reservation in every > packet mbuf, across multiple mbuf pools and across different consumers > of the mbuf APIs. > > Today, each pktmbuf pool can request a private size when the pool is > created. That works when the application owns all pool creation policy > directly. However, not all relevant mbuf pools are necessarily created > by application code. Some pools may be created by libraries, drivers, > or other components outside direct application control. > > One example already in DPDK is vhost crypto, which creates its own mbuf > pool and supplies a private size for struct vhost_crypto_data_req. > There are also driver-created pktmbuf-style pools, such as cnxk inline > meta pools and TAP GSO context pools. These are examples of > pool-creation paths where the application may not directly control the > private-size value used at creation time. >
My 2c. Rather than having a fixed build-time, or a configurable runtime set private mbuf data size, I think the main thing to be fixed here is to ensure that all cases where mbuf pools are created, the private data size is configurable in those cases. /Bruce > A PMD-specific devarg could solve one instance of this problem, such as > a single driver-created pool, but that seems too narrow if the > requirement is not inherently PMD-specific. A deployment with multiple > drivers, libraries, or other pool-creation paths outside application > control could need the same base private-size adjustment. In that case, > configuring the same value independently through component-specific > options would be fragile and easy to get wrong. > > The proposed generic model is to add a configurable base private size > for pktmbuf pools. The effective private size would be: > > align(pool_requested_priv_size + application_base_priv_size, > RTE_MBUF_PRIV_ALIGN) > > The tentative EAL option name is: > > --mbuf-base-priv-size=<size> > > The intent is: > * default behavior remains unchanged when the option is not used; > * the configured base size is added to the private size requested by > each pktmbuf pool; > * the final effective private size remains aligned to > RTE_MBUF_PRIV_ALIGN; > * pool-specific private-data requests still work as they do today; > * DPDK centralizes the policy so pools created outside application > control can reserve the same base private-data space as > application-created pools. > > This is not intended to define ownership or layout of the private area. > It only ensures that a deployment can reserve a common base amount of > private data consistently. Applications, drivers, libraries, or > components would still be responsible for their own interpretation of > the reserved private area. > > Questions for the list: > 1. Is a deployment-wide pktmbuf base private-size reservation > something DPDK would consider acceptable? > 2. Is --mbuf-base-priv-size=<size> a reasonable name, or would another > name better describe the intent? > 3. Should DPDK expose the effective-size calculation as a helper so > pool-creation paths outside application control can apply the same > rule? > 4. Would maintainers prefer consumer updates in the same series as > example users, or as follow-up patches after the generic mbuf/EAL > change is accepted? > 5. Would maintainers prefer this to remain component-specific, even if > more than one driver, library, or pool-creation path may need to > apply the same base reservation? > > The main goal is to avoid downstream mbuf layout changes and avoid > component-specific configuration drift, while still allowing > deployments to reserve a consistent private-data area across all packet > mbuf pools, including pools created outside direct application control. > > Thanks, > Randy

