[PATCH v3 2/3] eal: increase memzone name size to 64
Morten Brørup
mb at smartsharesystems.com
Fri Oct 16 22:11:48 CEST 2026
A few minor comments inline below.
With our without suggested changes:
Acked-by: Morten Brørup <mb at smartsharesystems.com>
> From: Stephen Hemminger [mailto:stephen at networkplumber.org]
> Sent: Friday, 16 October 2026 17.39
>
> Memzone names are limited to 31 characters, and ring, mempool and
> stack names lose the length of their prefixes on top of that.
> A mempool name is limited to 25 characters, which leaves little room
> for libraries such as rib and fib that derive names from the name
> given by the application.
>
> Increase RTE_MEMZONE_NAMESIZE to 64. The derived ring, mempool,
> stack and RCU defer queue sizes follow.
>
> Reorder struct rte_ring and struct rte_mempool so the larger name
> does not push datapath fields into another cache line.
>
> For rte_ring, flags and the size fields come first, followed by the
> memzone pointer and the name. The cache alignment moves from the
> first field to the structure itself. struct rte_ring grows by one
> cache line.
>
> For rte_mempool the fields used in the datapath are gathered at the
> start: pool_data/pool_id, local_cache, ops_index and cache_size.
Add sizeof_cache_per_lcore after local_cache.
> The remaining fields, along with pool_config, mz and name, follow.
> Previously local_cache and ops_index were in the second cache line.
> struct rte_mempool stays 192 bytes.
>
> Signed-off-by: Stephen Hemminger <stephen at networkplumber.org>
> ---
> doc/guides/rel_notes/release_26_11.rst | 21 ++++++++++++++++++
> lib/eal/include/rte_memzone.h | 2 +-
> lib/mempool/rte_mempool.h | 30 ++++++++++++++------------
> lib/ring/rte_ring_core.h | 9 ++++----
> 4 files changed, 42 insertions(+), 20 deletions(-)
>
> diff --git a/doc/guides/rel_notes/release_26_11.rst
> b/doc/guides/rel_notes/release_26_11.rst
> index be758a0c02..0d9465c9e2 100644
> --- a/doc/guides/rel_notes/release_26_11.rst
> +++ b/doc/guides/rel_notes/release_26_11.rst
> @@ -567,6 +567,27 @@ ABI Changes
> * cryptodev: The struct ``rte_crypto_rsa_op_param``
> was updated to include ``pss_salt``.
>
> +* **Increased memzone maximum name size.**
> +
> + ``RTE_MEMZONE_NAMESIZE`` was increased from 32 to 64,
> + and the derived ``RTE_RING_NAMESIZE``, ``RTE_MEMPOOL_NAMESIZE``,
> + ``RTE_STACK_NAMESIZE`` and ``RTE_RCU_QSBR_DQ_NAMESIZE`` grew
> accordingly.
> + This impacts the following structures:
> +
> + * ``struct rte_memzone`` grew by 32 bytes.
> +
> + * ``struct rte_ring`` grew by one cache line,
> + and ``memzone`` and ``name`` were moved after the size fields
> + to keep the datapath fields in the first cache line.
> +
> + * ``struct rte_mempool`` is unchanged in size,
> + but the fields were reordered so the datapath fields
> + (``pool_data``/``pool_id``, ``local_cache``, ``ops_index``
Add ``sizeof_cache_per_lcore`` after ``local_cache``.
> + and ``cache_size``) come first,
> + and ``name``, ``pool_config`` and ``mz`` were moved after them.
> +
> + * ``struct rte_stack`` grew by one cache line.
> +
>
> Known Issues
> ------------
> diff --git a/lib/eal/include/rte_memzone.h
> b/lib/eal/include/rte_memzone.h
> index 5a0e1b8a15..d5c92fe0ec 100644
> --- a/lib/eal/include/rte_memzone.h
> +++ b/lib/eal/include/rte_memzone.h
> @@ -47,7 +47,7 @@ extern "C" {
> */
> struct __rte_packed_begin rte_memzone {
>
> -#define RTE_MEMZONE_NAMESIZE 32 /**< Maximum length of memory
> zone name.*/
> +#define RTE_MEMZONE_NAMESIZE 64 /**< Maximum length of memory
> zone name.*/
> char name[RTE_MEMZONE_NAMESIZE]; /**< Name of the memory zone.
> */
>
> rte_iova_t iova; /**< Start IO address. */
> diff --git a/lib/mempool/rte_mempool.h b/lib/mempool/rte_mempool.h
> index b34cd893b1..1df8dbebf4 100644
> --- a/lib/mempool/rte_mempool.h
> +++ b/lib/mempool/rte_mempool.h
> @@ -237,34 +237,36 @@ struct __rte_cache_aligned rte_mempool_info {
> * The RTE mempool structure.
> */
> struct __rte_cache_aligned rte_mempool {
> - char name[RTE_MEMPOOL_NAMESIZE]; /**< Name of mempool. */
> union {
> void *pool_data; /**< Ring or pool to store
> objects. */
> uint64_t pool_id; /**< External mempool identifier.
> */
> };
> - void *pool_config; /**< optional args for ops
> alloc. */
> - const struct rte_memzone *mz; /**< Memzone where pool is
> alloc'd. */
> + struct rte_mempool_cache *local_cache; /**< Per-lcore local cache
> */
> + uint32_t sizeof_cache_per_lcore; /**< Multiplier for indexing
> into the local cache. */
> + /**
> + * Index into rte_mempool_ops_table array of mempool ops
> + * structs, which contain callback function pointers.
> + * We're using an index here rather than pointers to the
> callbacks
> + * to facilitate any secondary processes that may want to use
> + * this mempool.
> + */
> + int32_t ops_index;
> + uint32_t cache_size;
> + /**< Size of per-lcore default local cache. */
No need to wrap before comment; it fits on the same line, like before moving it.
> +
> unsigned int flags; /**< Flags of the mempool. */
> int socket_id; /**< Socket id passed at create.
> */
> uint32_t size; /**< Max size of the mempool. */
> - uint32_t cache_size; /**< Size of per-lcore default
> local cache. */
>
> uint32_t elt_size; /**< Size of an element. */
> uint32_t header_size; /**< Size of header (before
> elt). */
> uint32_t trailer_size; /**< Size of trailer (after
> elt). */
>
> unsigned private_data_size; /**< Size of private data. */
> - /**
> - * Index into rte_mempool_ops_table array of mempool ops
> - * structs, which contain callback function pointers.
> - * We're using an index here rather than pointers to the
> callbacks
> - * to facilitate any secondary processes that may want to use
> - * this mempool.
> - */
> - int32_t ops_index;
>
> - struct rte_mempool_cache *local_cache; /**< Per-lcore local cache
> */
> - uint32_t sizeof_cache_per_lcore; /**< Multiplier for indexing
> into the local cache. */
> + void *pool_config; /**< optional args for ops
> alloc. */
> + const struct rte_memzone *mz; /**< Memzone where pool is
> alloc'd. */
> + char name[RTE_MEMPOOL_NAMESIZE]; /**< Name of mempool. */
>
> uint32_t populated_size; /**< Number of populated
> objects. */
> struct rte_mempool_objhdr_list elt_list; /**< List of objects in
> pool */
> diff --git a/lib/ring/rte_ring_core.h b/lib/ring/rte_ring_core.h
> index 6cd6ce9884..5425cdcef2 100644
> --- a/lib/ring/rte_ring_core.h
> +++ b/lib/ring/rte_ring_core.h
> @@ -113,15 +113,14 @@ struct rte_ring_hts_headtail {
> * values in a modulo-32bit base: that's why the overflow of the
> indexes is not
> * a problem.
> */
> -struct rte_ring {
> - alignas(RTE_CACHE_LINE_SIZE) char name[RTE_RING_NAMESIZE];
> - /**< Name of the ring. */
> +struct __rte_cache_aligned rte_ring {
> int flags; /**< Flags supplied at creation. */
> - const struct rte_memzone *memzone;
> - /**< Memzone, if any, containing the rte_ring */
> uint32_t size; /**< Size of ring. */
> uint32_t mask; /**< Mask (size-1) of ring. */
> uint32_t capacity; /**< Usable size of ring */
> + const struct rte_memzone *memzone;
> + /**< Memzone, if any, containing the rte_ring */
> + char name[RTE_RING_NAMESIZE]; /**< Name of the ring. */
>
> RTE_CACHE_GUARD;
>
> --
> 2.53.0
More information about the dev
mailing list