Skip site navigation (1)Skip section navigation (2)

  
 
  

home | help
rte_mempool.h(3)		      DPDK			rte_mempool.h(3)

NAME
     rte_mempool.h

SYNOPSIS
     #include <stdalign.h>
     #include <stdio.h>
     #include <stdint.h>
     #include <inttypes.h>
     #include <rte_compat.h>
     #include <rte_config.h>
     #include <rte_spinlock.h>
     #include <rte_debug.h>
     #include <rte_lcore.h>
     #include <rte_log.h>
     #include <rte_branch_prediction.h>
     #include <rte_ring.h>
     #include <rte_memcpy.h>
     #include <rte_common.h>
     #include 'rte_mempool_trace_fp.h'

   Data Structures
     struct rte_mempool_cache
     struct rte_mempool_objsz
     struct rte_mempool_objhdr
     struct rte_mempool_memhdr
     struct rte_mempool_info
     struct rte_mempool
     struct rte_mempool_ops
     struct rte_mempool_ops_table
     struct rte_mempool_mem_range_info

   Macros
     #define RTE_MEMPOOL_HEADER_COOKIE1   0xbadbadbadadd2e55ULL
     #define RTE_MEMPOOL_HEADER_COOKIE2   0xf2eef2eedadd2e55ULL
     #define RTE_MEMPOOL_TRAILER_COOKIE   0xadd2e55badbadbadULL
     #define RTE_MEMPOOL_ALIGN	 RTE_CACHE_LINE_SIZE
     #define RTE_MEMPOOL_F_NO_SPREAD   0x0001
     #define MEMPOOL_F_NO_SPREAD   RTE_MEMPOOL_F_NO_SPREAD
     #define RTE_MEMPOOL_F_NO_CACHE_ALIGN   0x0002
     #define MEMPOOL_F_NO_CACHE_ALIGN	RTE_MEMPOOL_F_NO_CACHE_ALIGN
     #define RTE_MEMPOOL_F_SP_PUT   0x0004
     #define MEMPOOL_F_SP_PUT	RTE_MEMPOOL_F_SP_PUT
     #define RTE_MEMPOOL_F_SC_GET   0x0008
     #define MEMPOOL_F_SC_GET	RTE_MEMPOOL_F_SC_GET
     #define RTE_MEMPOOL_F_POOL_CREATED   0x0010
     #define RTE_MEMPOOL_F_NO_IOVA_CONTIG   0x0020
     #define MEMPOOL_F_NO_IOVA_CONTIG	RTE_MEMPOOL_F_NO_IOVA_CONTIG
     #define RTE_MEMPOOL_F_NON_IO   0x0040
     #define RTE_MEMPOOL_VALID_USER_FLAGS
     #define RTE_MEMPOOL_OPS_NAMESIZE	32
     #define RTE_MEMPOOL_POPULATE_F_ALIGN_OBJ	0x0001
     #define RTE_MEMPOOL_MAX_OPS_IDX   16
     #define RTE_MEMPOOL_REGISTER_OPS(ops)

   Typedefs
     typedef   void()  rte_mempool_memchunk_free_cb_t(struct  rte_mempool_memhdr
	 *memhdr, void *opaque)
     typedef int(* rte_mempool_alloc_t) (struct rte_mempool *mp)
     typedef void(* rte_mempool_free_t) (struct rte_mempool *mp)
     typedef int(* rte_mempool_enqueue_t) (struct rte_mempool *mp,  void  *const
	 *obj_table, unsigned int n)
     typedef   int(*   rte_mempool_dequeue_t)	(struct  rte_mempool  *mp,  void
	 **obj_table, unsigned int n)
     typedef int(* rte_mempool_dequeue_contig_blocks_t) (struct rte_mempool *mp,
	 void **first_obj_table, unsigned int n)
     typedef unsigned(* rte_mempool_get_count) (const struct rte_mempool *mp)
     typedef ssize_t(* rte_mempool_calc_mem_size_t)  (const  struct  rte_mempool
	 *mp,  uint32_t  obj_num,  uint32_t  pg_shift,	size_t	*min_chunk_size,
	 size_t *align)
     typedef void() rte_mempool_populate_obj_cb_t(struct rte_mempool  *mp,  void
	 *opaque, void *vaddr, rte_iova_t iova)
     typedef int(* rte_mempool_populate_t) (struct rte_mempool *mp, unsigned int
	 max_objs,  void  *vaddr, rte_iova_t iova, size_t len, rte_mempool_popu-
	 late_obj_cb_t *obj_cb, void *obj_cb_arg)
     typedef int(* rte_mempool_get_info_t) (const struct rte_mempool *mp, struct
	 rte_mempool_info *info)
     typedef void() rte_mempool_obj_cb_t(struct rte_mempool *mp,  void	*opaque,
	 void *obj, unsigned obj_idx)
     typedef  void()  rte_mempool_mem_cb_t(struct rte_mempool *mp, void *opaque,
	 struct rte_mempool_memhdr *memhdr, unsigned mem_idx)
     typedef void() rte_mempool_ctor_t(struct rte_mempool *, void *)

   Enumerations
     enum rte_mempool_event { RTE_MEMPOOL_EVENT_READY = 0, RTE_MEMPOOL_EVENT_DE-
	 STROY = 1 }

   Functions
     RTE_STAILQ_HEAD (rte_mempool_objhdr_list, rte_mempool_objhdr)
     RTE_STAILQ_HEAD (rte_mempool_memhdr_list, rte_mempool_memhdr)
     static struct rte_mempool * rte_mempool_from_obj (void *obj)
     ssize_t rte_mempool_op_calc_mem_size_default (const struct rte_mempool *mp,
	 uint32_t obj_num, uint32_t  pg_shift,	size_t	*min_chunk_size,  size_t
	 *align)
     int  rte_mempool_op_populate_default  (struct rte_mempool *mp, unsigned int
	 max_objs, void *vaddr, rte_iova_t iova, size_t  len,  rte_mempool_popu-
	 late_obj_cb_t *obj_cb, void *obj_cb_arg)
     int rte_mempool_ops_get_info (const struct rte_mempool *mp, struct rte_mem-
	 pool_info *info)
     int  rte_mempool_set_ops_byname  (struct rte_mempool *mp, const char *name,
	 void *pool_config)
     int rte_mempool_register_ops (const struct rte_mempool_ops *ops)
     void rte_mempool_free (struct rte_mempool *mp)
     struct rte_mempool * rte_mempool_create (const char *name, unsigned n,  un-
	 signed   elt_size,  unsigned  cache_size,  unsigned  private_data_size,
	 rte_mempool_ctor_t *mp_init,  void  *mp_init_arg,  rte_mempool_obj_cb_t
	 *obj_init,  void  *obj_init_arg,  int	socket_id,  unsigned  int flags)
	 __rte_malloc __rte_dealloc(rte_mempool_free
     struct rte_mempool struct	rte_mempool  *	rte_mempool_create_empty  (const
	 char  *name,  unsigned  int  n,  unsigned  int  elt_size,  unsigned int
	 cache_size, unsigned int private_data_size, int socket_id, unsigned int
	 flags) __rte_malloc __rte_dealloc(rte_mempool_free
     struct rte_mempool struct rte_mempool int rte_mempool_populate_iova (struct
	 rte_mempool *mp, char *vaddr, rte_iova_t  iova,  size_t  len,	rte_mem-
	 pool_memchunk_free_cb_t *free_cb, void *opaque)
     int  rte_mempool_populate_virt  (struct rte_mempool *mp, char *addr, size_t
	 len,  size_t  pg_sz,  rte_mempool_memchunk_free_cb_t	*free_cb,   void
	 *opaque)
     int rte_mempool_populate_default (struct rte_mempool *mp)
     int rte_mempool_populate_anon (struct rte_mempool *mp)
     uint32_t rte_mempool_obj_iter (struct rte_mempool *mp, rte_mempool_obj_cb_t
	 *obj_cb, void *obj_cb_arg)
     uint32_t rte_mempool_mem_iter (struct rte_mempool *mp, rte_mempool_mem_cb_t
	 *mem_cb, void *mem_cb_arg)
     void rte_mempool_dump (FILE *f, struct rte_mempool *mp)
     struct  rte_mempool_cache	*  rte_mempool_cache_create  (uint32_t size, int
	 socket_id)
     void rte_mempool_cache_free (struct rte_mempool_cache *cache)
     static  __rte_always_inline  struct  rte_mempool_cache  *	 rte_mempool_de-
	 fault_cache (struct rte_mempool *mp, unsigned lcore_id)
     static  __rte_always_inline  void	rte_mempool_cache_flush (struct rte_mem-
	 pool_cache *cache, struct rte_mempool *mp)
     static __rte_always_inline void rte_mempool_generic_put (struct rte_mempool
	 *mp, void *const *obj_table, unsigned int n,  struct  rte_mempool_cache
	 *cache)
     static  __rte_always_inline  void	rte_mempool_put_bulk (struct rte_mempool
	 *mp, void *const *obj_table, unsigned int n)
     static __rte_always_inline void rte_mempool_put  (struct  rte_mempool  *mp,
	 void *obj)
     static  __rte_always_inline int rte_mempool_generic_get (struct rte_mempool
	 *mp, void **obj_table, unsigned int n, struct rte_mempool_cache *cache)
     static __rte_always_inline  int  rte_mempool_get_bulk  (struct  rte_mempool
	 *mp, void **obj_table, unsigned int n)
     static  __rte_always_inline  int  rte_mempool_get	(struct rte_mempool *mp,
	 void **obj_p)
     static  __rte_always_inline   int	 rte_mempool_get_contig_blocks	 (struct
	 rte_mempool *mp, void **first_obj_table, unsigned int n)
     unsigned int rte_mempool_avail_count (const struct rte_mempool *mp)
     unsigned int rte_mempool_in_use_count (const struct rte_mempool *mp)
     static int rte_mempool_full (const struct rte_mempool *mp)
     static int rte_mempool_empty (const struct rte_mempool *mp)
     static rte_iova_t rte_mempool_virt2iova (const void *elt)
     void rte_mempool_audit (struct rte_mempool *mp)
     static void * rte_mempool_get_priv (struct rte_mempool *mp)
     void rte_mempool_list_dump (FILE *f)
     struct rte_mempool * rte_mempool_lookup (const char *name)
     uint32_t  rte_mempool_calc_obj_size  (uint32_t  elt_size,	uint32_t  flags,
	 struct rte_mempool_objsz *sz)
     void rte_mempool_walk (void(*func)(struct rte_mempool *, void  *arg),  void
	 *arg)
     __rte_experimental  int rte_mempool_get_mem_range (const struct rte_mempool
	 *mp, struct rte_mempool_mem_range_info *mem_range)
     __rte_experimental  size_t  rte_mempool_get_obj_alignment	 (const   struct
	 rte_mempool *mp)

   Variables
     struct rte_mempool_ops_table rte_mempool_ops_table

Detailed Description
     RTE Mempool.

     A memory pool is an allocator of fixed-size object. It is identified by its
     name,  and  uses  a  ring to store free objects. It provides some other op-
     tional services, like a per-core object cache, and an alignment  helper  to
     ensure  that objects are padded to spread them equally on all RAM channels,
     ranks, and so on.

     Objects owned by a mempool should never be added in another  mempool.  When
     an  object  is freed using rte_mempool_put() or equivalent, the object data
     is not modified; the user can save some meta-data in the  object  data  and
     retrieve them when allocating a new object.

     Note:  the  mempool implementation is not preemptible. An lcore must not be
     interrupted by another task that uses the same mempool (because it  uses  a
     ring which is not preemptible). Also, usual mempool functions like rte_mem-
     pool_get()  or  rte_mempool_put()	are  designed  to  be called from an EAL
     thread due to the internal per-lcore cache. Due to  the  lack  of	caching,
     rte_mempool_get()	or rte_mempool_put() performance will suffer when called
     by unregistered non-EAL  threads.	Instead,  unregistered	non-EAL  threads
     should  call  rte_mempool_generic_get() or rte_mempool_generic_put() with a
     user cache created with rte_mempool_cache_create().

     Definition in file rte_mempool.h.

Macro Definition Documentation
   #define RTE_MEMPOOL_HEADER_COOKIE1	0xbadbadbadadd2e55ULL
     Header cookie.

     Definition at line 59 of file rte_mempool.h.

   #define RTE_MEMPOOL_HEADER_COOKIE2	0xf2eef2eedadd2e55ULL
     Header cookie.

     Definition at line 60 of file rte_mempool.h.

   #define RTE_MEMPOOL_TRAILER_COOKIE	0xadd2e55badbadbadULL
     Trailer cookie.

     Definition at line 61 of file rte_mempool.h.

   #define RTE_MEMPOOL_ALIGN   RTE_CACHE_LINE_SIZE
     Alignment of elements inside mempool.

     Definition at line 139 of file rte_mempool.h.

   #define RTE_MEMPOOL_F_NO_SPREAD   0x0001
     Spreading among memory channels not required.

     Definition at line 275 of file rte_mempool.h.

   #define MEMPOOL_F_NO_SPREAD	 RTE_MEMPOOL_F_NO_SPREAD
     Backward compatibility synonym for RTE_MEMPOOL_F_NO_SPREAD.  To  be  depre-
     cated.

     Definition at line 280 of file rte_mempool.h.

   #define RTE_MEMPOOL_F_NO_CACHE_ALIGN   0x0002
     Do not align objects on cache lines.

     Definition at line 282 of file rte_mempool.h.

   #define MEMPOOL_F_NO_CACHE_ALIGN   RTE_MEMPOOL_F_NO_CACHE_ALIGN
     Backward compatibility synonym for RTE_MEMPOOL_F_NO_CACHE_ALIGN. To be dep-
     recated.

     Definition at line 287 of file rte_mempool.h.

   #define RTE_MEMPOOL_F_SP_PUT   0x0004
     Default put is 'single-producer'.

     Definition at line 289 of file rte_mempool.h.

   #define MEMPOOL_F_SP_PUT   RTE_MEMPOOL_F_SP_PUT
     Backward compatibility synonym for RTE_MEMPOOL_F_SP_PUT. To be deprecated.

     Definition at line 294 of file rte_mempool.h.

   #define RTE_MEMPOOL_F_SC_GET   0x0008
     Default get is 'single-consumer'.

     Definition at line 296 of file rte_mempool.h.

   #define MEMPOOL_F_SC_GET   RTE_MEMPOOL_F_SC_GET
     Backward compatibility synonym for RTE_MEMPOOL_F_SC_GET. To be deprecated.

     Definition at line 301 of file rte_mempool.h.

   #define RTE_MEMPOOL_F_POOL_CREATED	0x0010
     Internal: pool is created.

     Definition at line 303 of file rte_mempool.h.

   #define RTE_MEMPOOL_F_NO_IOVA_CONTIG   0x0020
     Don't need IOVA contiguous objects.

     Definition at line 305 of file rte_mempool.h.

   #define MEMPOOL_F_NO_IOVA_CONTIG   RTE_MEMPOOL_F_NO_IOVA_CONTIG
     Backward compatibility synonym for RTE_MEMPOOL_F_NO_IOVA_CONTIG. To be dep-
     recated.

     Definition at line 310 of file rte_mempool.h.

   #define RTE_MEMPOOL_F_NON_IO   0x0040
     Internal: no object from the pool can be used for device IO (DMA).

     Definition at line 312 of file rte_mempool.h.

   #define RTE_MEMPOOL_VALID_USER_FLAGS
     Value:.PP
	 (RTE_MEMPOOL_F_NO_SPREAD \
	 | RTE_MEMPOOL_F_NO_CACHE_ALIGN \
	 | RTE_MEMPOOL_F_SP_PUT \
	 | RTE_MEMPOOL_F_SC_GET \
	 | RTE_MEMPOOL_F_NO_IOVA_CONTIG \
	 )
     This macro lists all the mempool flags an application may request.

     Definition at line 317 of file rte_mempool.h.

   #define RTE_MEMPOOL_OPS_NAMESIZE   32
     Max length of ops struct name.

     Definition at line 458 of file rte_mempool.h.

   #define RTE_MEMPOOL_POPULATE_F_ALIGN_OBJ   0x0001
     Align objects on addresses multiple of total_elt_sz.

     Definition at line 634 of file rte_mempool.h.

   #define RTE_MEMPOOL_MAX_OPS_IDX   16
     Max registered ops structs

     Definition at line 719 of file rte_mempool.h.

   #define RTE_MEMPOOL_REGISTER_OPS(ops)
     Value:.PP
	 RTE_INIT(mp_hdlr_init_##ops)		     \
	 {			     \
	     rte_mempool_register_ops(&ops);	     \
	 }
     Macro  to	statically  register the ops of a mempool handler. Note that the
     rte_mempool_register_ops  fails  silently	here  when  more  than	RTE_MEM-
     POOL_MAX_OPS_IDX is registered.

     Definition at line 988 of file rte_mempool.h.

Typedef Documentation
   typedef   void()   rte_mempool_memchunk_free_cb_t(struct   rte_mempool_memhdr
     *memhdr, void *opaque)
     Callback used to free a memory chunk

     Definition at line 197 of file rte_mempool.h.

   typedef int(* rte_mempool_alloc_t) (struct rte_mempool *mp)
     Prototype for implementation specific data provisioning function.

     The function should provide the implementation specific memory for  use  by
     the other mempool ops functions in a given mempool ops struct. E.g. the de-
     fault  ops  provides  an instance of the rte_ring for this purpose. it will
     most likely point to a different type of data structure, and will be trans-
     parent  to  the  application   programmer.   This	 function   should   set
     mp->pool_data.

     Definition at line 470 of file rte_mempool.h.

   typedef void(* rte_mempool_free_t) (struct rte_mempool *mp)
     Free the opaque private data pointed to by mp->pool_data pointer.

     Definition at line 475 of file rte_mempool.h.

   typedef  int(*  rte_mempool_enqueue_t)  (struct  rte_mempool *mp, void *const
     *obj_table, unsigned int n)
     Enqueue 'n' objects into the external pool.

     Returns

	 * 0: Success

	 * <0: Error

     Definition at line 483 of file rte_mempool.h.

   typedef int(* rte_mempool_dequeue_t) (struct rte_mempool *mp, void  **obj_ta-
     ble, unsigned int n)
     Dequeue 'n' objects from the external pool.

     Returns

	 * 0: Success

	 * <0: Error

     Definition at line 492 of file rte_mempool.h.

   typedef  int(*  rte_mempool_dequeue_contig_blocks_t) (struct rte_mempool *mp,
     void **first_obj_table, unsigned int n)
     Dequeue a number of contiguous object blocks from the external pool.

     Definition at line 498 of file rte_mempool.h.

   typedef unsigned(* rte_mempool_get_count) (const struct rte_mempool *mp)
     Return the number of available objects in the external pool.

     Definition at line 504 of file rte_mempool.h.

   typedef ssize_t(* rte_mempool_calc_mem_size_t) (const struct rte_mempool *mp,
     uint32_t obj_num, uint32_t pg_shift, size_t *min_chunk_size, size_t *align)

     Calculate memory size required to store given number of objects.

     If mempool objects  are  not  required  to  be  IOVA-contiguous  (the  flag
     RTE_MEMPOOL_F_NO_IOVA_CONTIG is set), min_chunk_size defines virtually con-
     tiguous  chunk  size. Otherwise, if mempool objects must be IOVA-contiguous
     (the flag RTE_MEMPOOL_F_NO_IOVA_CONTIG is	clear),  min_chunk_size  defines
     IOVA-contiguous chunk size.

     Parameters
	 mp Pointer to the memory pool.
	 obj_num Number of objects.
	 pg_shift  LOG2  of  the  physical  pages size. If set to 0, ignore page
	 boundaries.
	 min_chunk_size Location for minimum size of the memory chunk which  may
	 be used to store memory pool objects.
	 align Location for required memory chunk alignment.

     Returns
	 Required memory size.

     Definition at line 529 of file rte_mempool.h.

   typedef  void()  rte_mempool_populate_obj_cb_t(struct  rte_mempool  *mp, void
     *opaque, void *vaddr, rte_iova_t iova)
     Function to be called for each populated object.

     Parameters
	 mp A pointer to the mempool structure.
	 opaque An opaque pointer passed to iterator.
	 vaddr Object virtual address.
	 iova Input/output virtual address of the object or RTE_BAD_IOVA.

     Definition at line 595 of file rte_mempool.h.

   typedef int(* rte_mempool_populate_t) (struct rte_mempool *mp,  unsigned  int
     max_objs,	void  *vaddr,  rte_iova_t  iova,  size_t  len, rte_mempool_popu-
     late_obj_cb_t *obj_cb, void *obj_cb_arg)
     Populate memory pool objects using provided memory chunk.

     Populated objects should be enqueued  to  the  pool,  e.g.  using	rte_mem-
     pool_ops_enqueue_bulk().

     If the given IO address is unknown (iova = RTE_BAD_IOVA), the chunk doesn't
     need  to  be  physically contiguous (only virtually), and allocated objects
     may span two pages.

     Parameters
	 mp A pointer to the mempool structure.
	 max_objs Maximum number of objects to be populated.
	 vaddr The virtual address of memory that should be used  to  store  ob-
	 jects.
	 iova The IO address
	 len The length of memory in bytes.
	 obj_cb Callback function to be executed for each populated object.
	 obj_cb_arg An opaque pointer passed to the callback function.

     Returns
	 The  number of objects added on success. On error, no objects are popu-
	 lated and a negative errno is returned.

     Definition at line 626 of file rte_mempool.h.

   typedef int(* rte_mempool_get_info_t) (const struct rte_mempool  *mp,  struct
     rte_mempool_info *info)
     Get some additional information about a mempool.

     Definition at line 687 of file rte_mempool.h.

   typedef  void()  rte_mempool_obj_cb_t(struct  rte_mempool  *mp, void *opaque,
     void *obj, unsigned obj_idx)
     An object callback function for mempool.

     Used by rte_mempool_create() and rte_mempool_obj_iter().

     Definition at line 999 of file rte_mempool.h.

   typedef void() rte_mempool_mem_cb_t(struct  rte_mempool  *mp,  void	*opaque,
     struct rte_mempool_memhdr *memhdr, unsigned mem_idx)
     A memory callback function for mempool.

     Used by rte_mempool_mem_iter().

     Definition at line 1008 of file rte_mempool.h.

   typedef void() rte_mempool_ctor_t(struct rte_mempool *, void *)
     A mempool constructor callback function.

     Arguments	are  the  mempool  and	the  opaque pointer given by the user in
     rte_mempool_create().

     Definition at line 1018 of file rte_mempool.h.

Enumeration Type Documentation
   enum rte_mempool_event
     Mempool event type.

     Enumerator

     RTE_MEMPOOL_EVENT_READY
	    Occurs after a mempool is fully populated.

     RTE_MEMPOOL_EVENT_DESTROY
	    Occurs before the destruction of a mempool begins.

     Definition at line 1991 of file rte_mempool.h.

Function Documentation
   RTE_STAILQ_HEAD (rte_mempool_objhdr_list, rte_mempool_objhdr)
     A list of object headers type

   RTE_STAILQ_HEAD (rte_mempool_memhdr_list, rte_mempool_memhdr)
     A list of memory where objects are stored

   static struct rte_mempool  *  rte_mempool_from_obj  (void  *  obj)  [inline],
     [static]
     Return a pointer to the mempool owning this object.

     Parameters
	 obj An object that is owned by a pool. If this is not the case, the be-
	 havior is undefined.

     Returns
	 A pointer to the mempool structure.

     Definition at line 392 of file rte_mempool.h.

   ssize_t  rte_mempool_op_calc_mem_size_default (const struct rte_mempool * mp,
     uint32_t obj_num, uint32_t pg_shift,  size_t  *  min_chunk_size,  size_t  *
     align)
     Default  way to calculate memory size required to store given number of ob-
     jects.

     Equivalent to rte_mempool_op_calc_mem_size_helper(mp, obj_num, pg_shift, 0,
     min_chunk_size, align).

   int rte_mempool_op_populate_default (struct rte_mempool *  mp,  unsigned  int
     max_objs,	void  *  vaddr,  rte_iova_t  iova, size_t len, rte_mempool_popu-
     late_obj_cb_t * obj_cb, void * obj_cb_arg)
     Default way to populate memory pool object using provided memory chunk.

     Equivalent to rte_mempool_op_populate_helper(mp, 0, max_objs, vaddr,  iova,
     len, obj_cb, obj_cb_arg).

   int	rte_mempool_ops_get_info (const struct rte_mempool * mp, struct rte_mem-
     pool_info * info)
     Wrapper for mempool_ops get_info callback.

     Parameters
	 mp Pointer to the memory pool.
	 info Pointer to the rte_mempool_info structure

     Returns

	 * 0: Success; The mempool driver supports retrieving supplementary mem-
	   pool information

	 * -ENOTSUP - doesn't support get_info ops (valid case).

   int rte_mempool_set_ops_byname (struct rte_mempool * mp, const char	*  name,
     void * pool_config)
     Set the ops of a mempool.

     This can only be done on a mempool that is not populated, i.e. just after a
     call to rte_mempool_create_empty().

     Parameters
	 mp Pointer to the memory pool.
	 name Name of the ops structure to use for this mempool.
	 pool_config  Opaque  data  that can be passed by the application to the
	 ops functions.

     Returns

	 * 0: Success; the mempool is now using the requested ops functions.

	 * -EINVAL - Invalid ops struct name provided.

	 * -EEXIST - mempool already has an ops struct assigned.

   int rte_mempool_register_ops (const struct rte_mempool_ops * ops)
     Register mempool operations.

     Parameters
	 ops Pointer to an ops structure to register.

     Returns

	 * >=0: Success; return the index of the ops struct in the table.

	 * -EINVAL - some missing callbacks while registering ops struct.

	 * -ENOSPC - the maximum number of ops structs has been reached.

   void rte_mempool_free (struct rte_mempool * mp)
     Free a mempool

     Unlink the mempool from global list, free the memory chunks, and all memory
     referenced by the mempool. The objects must not be used by other  cores  as
     they will be freed.

     Parameters
	 mp  A pointer to the mempool structure. If NULL then, the function does
	 nothing.

   struct rte_mempool * rte_mempool_create (const char * name, unsigned  n,  un-
     signed  elt_size, unsigned cache_size, unsigned private_data_size, rte_mem-
     pool_ctor_t * mp_init, void * mp_init_arg, rte_mempool_obj_cb_t * obj_init,
     void * obj_init_arg, int socket_id, unsigned int flags)
     Create a new mempool named name in memory.

     This function uses rte_memzone_reserve() to allocate memory. The pool  con-
     tains n elements of elt_size. Its size is set to n.

     Parameters
	 name The name of the mempool.
	 n  The number of elements in the mempool. The optimum size (in terms of
	 memory usage) for a mempool is when n is a power of two minus one: n  =
	 (2^q - 1).
	 elt_size The size of each element.
	 cache_size  If cache_size is non-zero, the rte_mempool library will try
	 to limit the accesses to the common lockless  pool,  by  maintaining  a
	 per-lcore  object  cache.  This  argument  must  be  lower  or equal to
	 RTE_MEMPOOL_CACHE_MAX_SIZE and  n  /  1.5.  It  is  advised  to  choose
	 cache_size to have 'n modulo cache_size == 0': if this is not the case,
	 some  elements will always stay in the pool and will never be used. The
	 access to the per-lcore table is of course faster than  the  multi-pro-
	 ducer/consumer  pool. The cache can be disabled if the cache_size argu-
	 ment is set to 0; it can be useful to avoid losing objects in cache.
	 private_data_size The size of the private data appended after the  mem-
	 pool  structure. This is useful for storing some private data after the
	 mempool structure, as is done for rte_mbuf_pool for example.
	 mp_init A function pointer that is called  for  initialization  of  the
	 pool, before object initialization. The user can initialize the private
	 data  in  this  function  if  needed. This parameter can be NULL if not
	 needed.
	 mp_init_arg An opaque pointer to data that can be used in  the  mempool
	 constructor function.
	 obj_init  A function pointer that is called for each object at initial-
	 ization of the pool. The user can set some  meta  data  in  objects  if
	 needed.  This parameter can be NULL if not needed. The obj_init() func-
	 tion takes the mempool pointer, the init_arg, the  object  pointer  and
	 the object number as parameters.
	 obj_init_arg  An opaque pointer to data that can be used as an argument
	 for each call to the object constructor function.
	 socket_id The socket_id argument is the socket identifier in  the  case
	 of  NUMA. The value can be SOCKET_ID_ANY if there is no NUMA constraint
	 for the reserved zone.
	 flags The flags arguments is an OR of following flags:

	 * RTE_MEMPOOL_F_NO_SPREAD: By default, objects addresses are spread be-
	   tween channels in RAM: the pool allocator will  add	padding  between
	   objects depending on the hardware configuration. See Memory alignment
	   constraints for details. If this flag is set, the allocator will just
	   align them to a cache line.

	 * RTE_MEMPOOL_F_NO_CACHE_ALIGN:  By  default,	the returned objects are
	   cache-aligned. This flag removes this constraint, and no padding will
	   be	present   between   objects.   This   flag   implies	RTE_MEM-
	   POOL_F_NO_SPREAD.

	 * RTE_MEMPOOL_F_SP_PUT:  If this flag is set, the default behavior when
	   using rte_mempool_put()  or	rte_mempool_put_bulk()	is  'single-pro-
	   ducer'. Otherwise, it is 'multi-producers'.

	 * RTE_MEMPOOL_F_SC_GET:  If this flag is set, the default behavior when
	   using rte_mempool_get()  or	rte_mempool_get_bulk()	is  'single-con-
	   sumer'. Otherwise, it is 'multi-consumers'.

	 * RTE_MEMPOOL_F_NO_IOVA_CONTIG:  If set, allocated objects won't neces-
	   sarily be contiguous in IO memory.

     Returns
	 The pointer to the new allocated mempool, on  success.  NULL  on  error
	 with rte_errno set appropriately. Possible rte_errno values include:

	 * E_RTE_NO_CONFIG - function could not get pointer to rte_config struc-
	   ture

	 * EINVAL  -  cache  size  provided  is too large or an unknown flag was
	   passed

	 * ENOSPC - the maximum number of memzones has already been allocated

	 * EEXIST - a memzone with the same name already exists

	 * ENOMEM - no appropriate memory area found in which to create memzone

   struct rte_mempool struct rte_mempool * rte_mempool_create_empty (const  char
     * name, unsigned int n, unsigned int elt_size, unsigned int cache_size, un-
     signed int private_data_size, int socket_id, unsigned int flags)
     Create an empty mempool

     The  mempool is allocated and initialized, but it is not populated: no mem-
     ory is allocated for the mempool elements. The user has  to  call	rte_mem-
     pool_populate_*()	to  add  memory  chunks to the pool. Once populated, the
     user may also want to initialize each object with rte_mempool_obj_iter().

     Parameters
	 name The name of the mempool.
	 n The maximum number of elements that can be added in the mempool.  The
	 optimum  size	(in  terms of memory usage) for a mempool is when n is a
	 power of two minus one: n = (2^q - 1).
	 elt_size The size of each element.
	 cache_size Size of the cache. See rte_mempool_create() for details.
	 private_data_size The size of the private data appended after the  mem-
	 pool  structure. This is useful for storing some private data after the
	 mempool structure, as is done for rte_mbuf_pool for example.
	 socket_id The socket_id argument is the socket identifier in  the  case
	 of  NUMA. The value can be SOCKET_ID_ANY if there is no NUMA constraint
	 for the reserved zone.
	 flags Flags controlling the  behavior	of  the  mempool.  See	rte_mem-
	 pool_create() for details.

     Returns
	 The  pointer  to  the	new allocated mempool, on success. NULL on error
	 with rte_errno set appropriately. See rte_mempool_create() for details.

   struct rte_mempool struct rte_mempool int  rte_mempool_populate_iova  (struct
     rte_mempool  *  mp,  char	*  vaddr,  rte_iova_t iova, size_t len, rte_mem-
     pool_memchunk_free_cb_t * free_cb, void * opaque)
     Add physically contiguous memory for objects in the pool at init

     Add a virtually and physically contiguous memory chunk in	the  pool  where
     objects can be instantiated.

     If the given IO address is unknown (iova = RTE_BAD_IOVA), the chunk doesn't
     need  to  be  physically contiguous (only virtually), and allocated objects
     may span two pages.

     Parameters
	 mp A pointer to the mempool structure.
	 vaddr The virtual address of memory that should be used  to  store  ob-
	 jects.
	 iova The IO address
	 len The length of memory in bytes.
	 free_cb  The  callback used to free this chunk when destroying the mem-
	 pool.
	 opaque An opaque argument passed to free_cb.

     Returns
	 The number of objects added on success (strictly positive).  On  error,
	 the  chunk is not added in the memory list of the mempool the following
	 code is returned: (0):  not  enough  room  in	chunk  for  one  object.
	 (-ENOSPC): mempool is already populated. (-ENOMEM): allocation failure.

   int	rte_mempool_populate_virt  (struct rte_mempool * mp, char * addr, size_t
     len, size_t pg_sz, rte_mempool_memchunk_free_cb_t * free_cb, void * opaque)

     Add virtually contiguous memory for objects in the pool at init

     Add a virtually contiguous memory chunk in the pool where	objects  can  be
     instantiated.

     Parameters
	 mp A pointer to the mempool structure.
	 addr  The  virtual  address  of memory that should be used to store ob-
	 jects.
	 len The length of memory in bytes.
	 pg_sz The size of memory pages in this virtual area.
	 free_cb The callback used to free this chunk when destroying  the  mem-
	 pool.
	 opaque An opaque argument passed to free_cb.

     Returns
	 The  number  of objects added on success (strictly positive). On error,
	 the chunk is not added in the memory list of the mempool the  following
	 code  is  returned:  (0):  not  enough  room  in  chunk for one object.
	 (-ENOSPC): mempool is already populated. (-ENOMEM): allocation failure.

   int rte_mempool_populate_default (struct rte_mempool * mp)
     Add memory for objects in the pool at init

     This is the default function used by rte_mempool_create() to  populate  the
     mempool. It adds memory allocated using rte_memzone_reserve().

     Parameters
	 mp A pointer to the mempool structure.

     Returns
	 The  number  of  objects  added  on success. On error, the chunk is not
	 added in the memory list of the mempool and a	negative  errno  is  re-
	 turned.

   int rte_mempool_populate_anon (struct rte_mempool * mp)
     Add memory from anonymous mapping for objects in the pool at init

     This  function  mmap  an  anonymous memory zone that is locked in memory to
     store the objects of the mempool.

     Parameters
	 mp A pointer to the mempool structure.

     Returns
	 The number of objects added  on  success.  On	error,	0  is  returned,
	 rte_errno  is set, and the chunk is not added in the memory list of the
	 mempool.

   uint32_t rte_mempool_obj_iter (struct rte_mempool * mp,  rte_mempool_obj_cb_t
     * obj_cb, void * obj_cb_arg)
     Call a function for each mempool element

     Iterate  across all objects attached to a rte_mempool and call the callback
     function on it.

     Parameters
	 mp A pointer to an initialized mempool.
	 obj_cb A function pointer that is called for each object.
	 obj_cb_arg An opaque pointer passed to the callback function.

     Returns
	 Number of objects iterated.

   uint32_t rte_mempool_mem_iter (struct rte_mempool * mp,  rte_mempool_mem_cb_t
     * mem_cb, void * mem_cb_arg)
     Call a function for each mempool memory chunk

     Iterate  across  all  memory  chunks attached to a rte_mempool and call the
     callback function on it.

     Parameters
	 mp A pointer to an initialized mempool.
	 mem_cb A function pointer that is called for each memory chunk.
	 mem_cb_arg An opaque pointer passed to the callback function.

     Returns
	 Number of memory chunks iterated.

   void rte_mempool_dump (FILE * f, struct rte_mempool * mp)
     Dump the status of the mempool to a file.

     Parameters
	 f A pointer to a file for output
	 mp A pointer to the mempool structure.

   struct  rte_mempool_cache  *  rte_mempool_cache_create  (uint32_t  size,  int
     socket_id)
     Create a user-owned mempool cache.

     This  can	be  used  by unregistered non-EAL threads to enable caching when
     they interact with a mempool.

     Parameters
	 size  The  size  of  the  mempool  cache.  See   rte_mempool_create()'s
	 cache_size  parameter description for more information. The same limits
	 and considerations apply here too.
	 socket_id The socket identifier in the case of NUMA. The value  can  be
	 SOCKET_ID_ANY if there is no NUMA constraint for the reserved zone.

   void rte_mempool_cache_free (struct rte_mempool_cache * cache)
     Free a user-owned mempool cache.

     Parameters
	 cache A pointer to the mempool cache.

   static   __rte_always_inline   struct   rte_mempool_cache  *  rte_mempool_de-
     fault_cache (struct rte_mempool * mp, unsigned lcore_id) [static]
     Get a pointer to the per-lcore default mempool cache.

     Parameters
	 mp A pointer to the mempool structure.
	 lcore_id The logical core id.

     Returns
	 A pointer to the mempool cache or NULL if disabled or unregistered non-
	 EAL thread.

     Definition at line 1339 of file rte_mempool.h.

   static  __rte_always_inline	void  rte_mempool_cache_flush  (struct	rte_mem-
     pool_cache * cache, struct rte_mempool * mp) [static]
     Flush a user-owned mempool cache to the specified mempool.

     Parameters
	 cache A pointer to the mempool cache.
	 mp A pointer to the mempool.

     Definition at line 1361 of file rte_mempool.h.

   static __rte_always_inline void rte_mempool_generic_put (struct rte_mempool *
     mp,  void	*const	*  obj_table, unsigned int n, struct rte_mempool_cache *
     cache) [static]
     Put several objects back in the mempool.

     Parameters
	 mp A pointer to the mempool structure.
	 obj_table A pointer to a table of void * pointers (objects).
	 n The number of objects to add in the mempool from the obj_table.
	 cache A pointer to a mempool  cache  structure.  May  be  NULL  if  not
	 needed.

     Definition at line 1451 of file rte_mempool.h.

   static  __rte_always_inline	void  rte_mempool_put_bulk (struct rte_mempool *
     mp, void *const * obj_table, unsigned int n) [static]
     Put several objects back in the mempool.

     This function calls the multi-producer or the single-producer  version  de-
     pending on the default behavior that was specified at mempool creation time
     (see flags).

     Parameters
	 mp A pointer to the mempool structure.
	 obj_table A pointer to a table of void * pointers (objects).
	 n The number of objects to add in the mempool from obj_table.

     Definition at line 1474 of file rte_mempool.h.

   static  __rte_always_inline	void  rte_mempool_put  (struct rte_mempool * mp,
     void * obj) [static]
     Put one object back in the mempool.

     This function calls the multi-producer or the single-producer  version  de-
     pending on the default behavior that was specified at mempool creation time
     (see flags).

     Parameters
	 mp A pointer to the mempool structure.
	 obj A pointer to the object to be added.

     Definition at line 1496 of file rte_mempool.h.

   static  __rte_always_inline int rte_mempool_generic_get (struct rte_mempool *
     mp, void ** obj_table, unsigned int n, struct  rte_mempool_cache  *  cache)
     [static]
     Get several objects from the mempool.

     If  cache	is  enabled,  objects will be retrieved first from cache, subse-
     quently from the common pool. Note that it can return -ENOENT when the  lo-
     cal  cache  and  common pool are empty, even if cache from other lcores are
     full.

     Parameters
	 mp A pointer to the mempool structure.
	 obj_table A pointer to a table of void * pointers (objects)  that  will
	 be filled.
	 n The number of objects to get from mempool to obj_table.
	 cache	A  pointer  to	a  mempool  cache  structure. May be NULL if not
	 needed.

     Returns

	 * 0: Success; objects taken.

	 * -ENOENT: Not enough entries in the mempool; no object is retrieved.

     Definition at line 1657 of file rte_mempool.h.

   static __rte_always_inline int rte_mempool_get_bulk (struct rte_mempool * mp,
     void ** obj_table, unsigned int n) [static]
     Get several objects from the mempool.

     This function calls the multi-consumers or the single-consumer version, de-
     pending on the default behaviour that was	specified  at  mempool	creation
     time (see flags).

     If  cache	is  enabled,  objects will be retrieved first from cache, subse-
     quently from the common pool. Note that it can return -ENOENT when the  lo-
     cal  cache  and  common pool are empty, even if cache from other lcores are
     full.

     Parameters
	 mp A pointer to the mempool structure.
	 obj_table A pointer to a table of void * pointers (objects)  that  will
	 be filled.
	 n The number of objects to get from the mempool to obj_table.

     Returns

	 * 0: Success; objects taken

	 * -ENOENT: Not enough entries in the mempool; no object is retrieved.

     Definition at line 1691 of file rte_mempool.h.

   static __rte_always_inline int rte_mempool_get (struct rte_mempool * mp, void
     ** obj_p) [static]
     Get one object from the mempool.

     This function calls the multi-consumers or the single-consumer version, de-
     pending on the default behavior that was specified at mempool creation (see
     flags).

     If  cache	is  enabled,  objects will be retrieved first from cache, subse-
     quently from the common pool. Note that it can return -ENOENT when the  lo-
     cal  cache  and  common pool are empty, even if cache from other lcores are
     full.

     Parameters
	 mp A pointer to the mempool structure.
	 obj_p A pointer to a void * pointer (object) that will be filled.

     Returns

	 * 0: Success; objects taken.

	 * -ENOENT: Not enough entries in the mempool; no object is retrieved.

     Definition at line 1720 of file rte_mempool.h.

   static __rte_always_inline int rte_mempool_get_contig_blocks (struct rte_mem-
     pool * mp, void ** first_obj_table, unsigned int n) [static]
     Get a contiguous blocks of objects from the mempool.

     If cache is enabled, consider to flush it first, to reuse objects	as  soon
     as possible.

     The  application  should  check  that  the driver supports the operation by
     calling rte_mempool_ops_get_info() and checking that  contig_block_size  is
     not zero.

     Parameters
	 mp A pointer to the mempool structure.
	 first_obj_table  A  pointer  to  a  pointer to the first object in each
	 block.
	 n The number of blocks to get from mempool.

     Returns

	 * 0: Success; blocks taken.

	 * -ENOBUFS: Not enough entries in the mempool; no object is retrieved.

	 * -EOPNOTSUPP: The mempool driver does not support block dequeue

     Definition at line 1747 of file rte_mempool.h.

   unsigned int rte_mempool_avail_count (const struct rte_mempool * mp)
     Return the number of entries in the mempool.

     When cache is enabled, this function  has	to  browse  the  length  of  all
     lcores,  so  it  should not be used in a data path, but only for debug pur-
     poses. User-owned mempool caches are not accounted for.

     Parameters
	 mp A pointer to the mempool structure.

     Returns
	 The number of entries in the mempool.

   unsigned int rte_mempool_in_use_count (const struct rte_mempool * mp)
     Return the number of elements which have been allocated from the mempool

     When cache is enabled, this function  has	to  browse  the  length  of  all
     lcores,  so  it  should not be used in a data path, but only for debug pur-
     poses.

     Parameters
	 mp A pointer to the mempool structure.

     Returns
	 The number of free entries in the mempool.

   static int rte_mempool_full (const struct rte_mempool * mp) [inline],   [sta-
     tic]
     Test if the mempool is full.

     When  cache  is  enabled,	this  function	has  to browse the length of all
     lcores, so it should not be used in a data path, but only	for  debug  pur-
     poses. User-owned mempool caches are not accounted for.

     Parameters
	 mp A pointer to the mempool structure.

     Returns

	 * 1: The mempool is full.

	 * 0: The mempool is not full.

     Definition at line 1810 of file rte_mempool.h.

   static int rte_mempool_empty (const struct rte_mempool * mp) [inline],  [sta-
     tic]
     Test if the mempool is empty.

     When  cache  is  enabled,	this  function	has  to browse the length of all
     lcores, so it should not be used in a data path, but only	for  debug  pur-
     poses. User-owned mempool caches are not accounted for.

     Parameters
	 mp A pointer to the mempool structure.

     Returns

	 * 1: The mempool is empty.

	 * 0: The mempool is not empty.

     Definition at line 1829 of file rte_mempool.h.

   static  rte_iova_t  rte_mempool_virt2iova (const void * elt) [inline],  [sta-
     tic]
     Return the IO address of elt, which is an element of the pool mp.

     Parameters
	 elt A pointer (virtual address) to the element of the pool.

     Returns
	 The IO address of the elt element. If	the  mempool  was  created  with
	 RTE_MEMPOOL_F_NO_IOVA_CONTIG, the returned value is RTE_BAD_IOVA.

     Definition at line 1845 of file rte_mempool.h.

   void rte_mempool_audit (struct rte_mempool * mp)
     Check the consistency of mempool objects.

     Verify  the  coherency  of fields in the mempool structure. Also check that
     the cookies of mempool objects (even the ones that are not present in pool)
     have a correct value. If not, a panic will occur.

     Parameters
	 mp A pointer to the mempool structure.

   static void * rte_mempool_get_priv (struct rte_mempool * mp) [inline],  [sta-
     tic]
     Return a pointer to the private data in an mempool structure.

     Parameters
	 mp A pointer to the mempool structure.

     Returns
	 A pointer to the private data.

     Definition at line 1873 of file rte_mempool.h.

   void rte_mempool_list_dump (FILE * f)
     Dump the status of all mempools on the console

     Parameters
	 f A pointer to a file for output

   struct rte_mempool * rte_mempool_lookup (const char * name)
     Search a mempool from its name

     Parameters
	 name The name of the mempool.

     Returns
	 The pointer to the mempool matching the name, or  NULL  if  not  found.
	 NULL on error with rte_errno set appropriately. Possible rte_errno val-
	 ues include:

	 * ENOENT - required entry not available to return.

   uint32_t rte_mempool_calc_obj_size (uint32_t elt_size, uint32_t flags, struct
     rte_mempool_objsz * sz)
     Get the header, trailer and total size of a mempool element.

     Given  a  desired size of the mempool element and mempool flags, calculates
     header, trailer, body and total sizes of the mempool object.

     Parameters
	 elt_size The size of each element, without header and trailer.
	 flags The flags used for the mempool creation. Consult rte_mempool_cre-
	 ate() for more information about possible values. The size of each ele-
	 ment.
	 sz The calculated detailed size the mempool object. May be NULL.

     Returns
	 Total size of the mempool object.

   void rte_mempool_walk (void(*)(struct rte_mempool *, void *arg) func, void  *
     arg)
     Walk list of all memory pools

     Parameters
	 func Iterator function
	 arg Argument passed to iterator

   __rte_experimental  int rte_mempool_get_mem_range (const struct rte_mempool *
     mp, struct rte_mempool_mem_range_info * mem_range)
     Warning
	 EXPERIMENTAL: this API may change without prior notice.

     Get information about the memory range used to store objects  in  the  mem-
     pool.

     Parameters
	 mp Pointer to an initialized mempool.
	 mem_range  Pointer  to  struct  which is used to return lowest address,
	 length of the memory range containing all the	addresses,  and  whether
	 these addresses are contiguous.

     Returns
	 0 on success, -EINVAL if mempool is not valid or mem_range is NULL.

   __rte_experimental	size_t	 rte_mempool_get_obj_alignment	 (const   struct
     rte_mempool * mp)
     Warning
	 EXPERIMENTAL: this API may change without prior notice.

     Return alignment of objects stored in the mempool.

     Parameters
	 mp Pointer to a mempool.

     Returns
	 Object alignment if mp is valid. 0 if mp is NULL.

Variable Documentation
   struct rte_mempool_ops_table rte_mempool_ops_table [extern]
     Array of registered ops structs.

Author
     Generated automatically by Doxygen for DPDK from the source code.

Version 25.11.0 		 Thu Aug 27 2026		rte_mempool.h(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=RTE_MEMPOOL_F_NON_IO&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help