[PATCH v3 1/1] mbuf: add optional no-copy dynamic field storage

Morten Brørup mb at smartsharesystems.com
Tue Sep 29 09:15:28 CEST 2026


Yes, this is the solution I was looking for. Thank you.

Nitpicking...

Could you use with a more meaningful name than dynfield3, e.g. dynfield_nc or dynfield_no_copy.

A few minor clarifications suggested inline below.

With or without suggested changes,
Reviewed-by: Morten Brørup <mb at smartsharesystems.com>


> --- a/doc/guides/prog_guide/mbuf_lib.rst
> +++ b/doc/guides/prog_guide/mbuf_lib.rst
> @@ -234,6 +234,15 @@ The dynamic fields and flags are managed with the
> functions ``rte_mbuf_dyn*``.
> 
>  It is not possible to unregister fields or flags.
> 
> +The build option ``mbuf_dynfield3_size`` can add extra cache-line-
> aligned
> +dynamic field storage to ``struct rte_mbuf``.  This increases every
> mbuf by

"increases every mbuf" -> "increases the size of every mbuf"

> +the configured amount and changes the mbuf layout, so applications and
> +secondary processes must be built with the same value as the primary
> process.
> +The option defaults to ``0``.  The extra storage is reserved for
> dynamic
> +fields registered with ``RTE_MBUF_DYNFIELD_F_NO_COPY``.  These fields
> are not
> +copied by mbuf copy and clone operations.  Dynamic fields registered
> without
> +this flag continue to use the existing copied dynamic-field storage.
> +
>  .. _direct_indirect_buffer:
> 
>  Direct and Indirect Buffers
> diff --git a/doc/guides/rel_notes/release_26_11.rst
> b/doc/guides/rel_notes/release_26_11.rst
> index dec96ccbc7..cff68d7034 100644
> --- a/doc/guides/rel_notes/release_26_11.rst
> +++ b/doc/guides/rel_notes/release_26_11.rst
> @@ -60,6 +60,22 @@ New Features
>    Added the experimental ``rte_cpu_socket_id()`` function
>    to map an OS logical CPU ID to the NUMA socket containing that CPU.
> 
> +* **Added optional extra mbuf dynamic field storage.**
> +
> +  Added ``mbuf_dynfield3_size`` build option to enable a
> +  cache-line-aligned ``dynfield3`` area in ``struct rte_mbuf``.
> +  The configured size is defined as ``RTE_MBUF_DYNFIELD3_SIZE``
> +  in ``rte_build_config.h``.
> +  The extra storage is reserved for dynamic fields registered with
> +  ``RTE_MBUF_DYNFIELD_F_NO_COPY``.
> +  These fields are not copied by generic mbuf copy and clone
> operations.
> +  Dynamic fields registered without this flag continue to use the
> existing
> +  copied dynamic-field storage.
> +  Applications and secondary processes must be built with the same
> +  non-zero value as the primary process.

"with the same non-zero value" ->"with the same value"


> --- a/meson_options.txt
> +++ b/meson_options.txt
> @@ -44,6 +44,8 @@ option('max_numa_nodes', type: 'string', value:
> 'default', description:
>         'Set the highest NUMA node supported by EAL; "default" is
> different per-arch, "detect" detects the highest NUMA node on the build
> machine.')
>  option('enable_iova_as_pa', type: 'boolean', value: true, description:
>         'Support the use of physical addresses for IO addresses, such
> as used by UIO or VFIO in no-IOMMU mode. When disabled, DPDK can only
> run with IOMMU support for address mappings, but will have more space
> available in the mbuf structure.')
> +option('mbuf_dynfield3_size', type: 'integer', min: 0, value: 0,
> description:
> +       'Size of optional extra mbuf dynamic field area, in bytes.')

The description of this option should mention that the area is for mbuf dynamic fields with the no-copy property.

>  option('mbuf_refcnt_atomic', type: 'boolean', value: true,
> description:
>         'Atomically access the mbuf refcnt.')
>  option('platform', type: 'string', value: 'native', description:
> --
> 2.35.6



More information about the dev mailing list