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

FreeBSD Manual Pages

  
 
  

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

NAME
       rte_malloc.h

SYNOPSIS
       #include	<stdio.h>
       #include	<stddef.h>
       #include	<rte_memory.h>

   Data	Structures
       struct rte_malloc_socket_stats

   Macros
       #define __rte_dealloc_free   __rte_dealloc(rte_free, 1)

   Functions
       void rte_free (void *ptr)
       __rte_experimental void rte_free_sensitive (void	*ptr)
       void * rte_malloc (const	char *type, size_t size, unsigned align)
	   __rte_alloc_size(2) __rte_alloc_align(3) __rte_malloc
	   __rte_dealloc_free
       void * rte_zmalloc (const char *type, size_t size, unsigned align)
	   __rte_alloc_size(2) __rte_alloc_align(3) __rte_malloc
	   __rte_dealloc_free
       void * rte_calloc (const	char *type, size_t num,	size_t size, unsigned
	   align) __rte_alloc_size(2
       void * rte_realloc (void	*ptr, size_t size, unsigned int	align)
	   __rte_alloc_size(2) __rte_alloc_align(3) __rte_malloc
	   __rte_dealloc_free
       void * rte_realloc_socket (void *ptr, size_t size, unsigned int align,
	   int socket) __rte_alloc_size(2) __rte_alloc_align(3)	__rte_malloc
	   __rte_dealloc_free
       void * rte_malloc_socket	(const char *type, size_t size,	unsigned
	   align, int socket) __rte_alloc_size(2) __rte_alloc_align(3)
	   __rte_malloc	__rte_dealloc_free
       void * rte_zmalloc_socket (const	char *type, size_t size, unsigned
	   align, int socket) __rte_alloc_size(2) __rte_alloc_align(3)
	   __rte_malloc	__rte_dealloc_free
       void * rte_calloc_socket	(const char *type, size_t num, size_t size,
	   unsigned align, int socket) __rte_alloc_size(2
       int rte_malloc_validate (const void *ptr, size_t	*size)
       int rte_malloc_get_socket_stats (int socket, struct
	   rte_malloc_socket_stats *socket_stats)
       int rte_malloc_heap_memory_add (const char *heap_name, void *va_addr,
	   size_t len, rte_iova_t iova_addrs[],	unsigned int n_pages, size_t
	   page_sz)
       int rte_malloc_heap_memory_remove (const	char *heap_name, void
	   *va_addr, size_t len)
       int rte_malloc_heap_memory_attach (const	char *heap_name, void
	   *va_addr, size_t len)
       int rte_malloc_heap_memory_detach (const	char *heap_name, void
	   *va_addr, size_t len)
       int rte_malloc_heap_create (const char *heap_name)
       int rte_malloc_heap_destroy (const char *heap_name)
       int rte_malloc_heap_get_socket (const char *name)
       int rte_malloc_heap_socket_is_external (int socket_id)
       void rte_malloc_dump_stats (FILE	*f, const char *type)
       void rte_malloc_dump_heaps (FILE	*f)
       rte_iova_t rte_malloc_virt2iova (const void *addr)

Detailed Description
       RTE Malloc. This	library	provides methods for dynamically allocating
       memory from hugepages.

       Definition in file rte_malloc.h.

Macro Definition Documentation
   #define __rte_dealloc_free	__rte_dealloc(rte_free,	1)
       Functions that expect return value to be	freed with rte_free()

       Definition at line 37 of	file rte_malloc.h.

Function Documentation
   void	rte_free (void * ptr)
       Frees the memory	space pointed to by the	provided pointer.

       This pointer must have been returned by a previous call to
       rte_malloc(), rte_zmalloc(), rte_calloc() or rte_realloc(). The
       behaviour of rte_free() is undefined if the pointer does	not match this
       requirement.

       If the pointer is NULL, the function does nothing.

       Parameters
	   ptr The pointer to memory to	be freed.

   __rte_experimental void rte_free_sensitive (void * ptr)
       Warning
	   EXPERIMENTAL: this API may change without prior notice.

       Frees the memory	space pointed to by the	provided pointer and
       guarantees it will be zero'd before reuse. This function	is slower than
       simple rte_free() it should only	be used	for security keys and other
       sensitive data.

       This pointer must have been returned by a previous call to
       rte_malloc(), rte_zmalloc(), rte_calloc() or rte_realloc(). The
       behaviour of rte_free() is undefined if the pointer does	not match this
       requirement.

       If the pointer is NULL, the function does nothing.

       Parameters
	   ptr The pointer to memory to	be freed.

   void	* rte_malloc (const char * type, size_t	size, unsigned align)
       This function allocates memory from the huge-page area of memory. The
       memory is not cleared. In NUMA systems, the memory allocated resides on
       the same	NUMA socket as the core	that calls this	function.

       Parameters
	   type	A string identifying the type of allocated objects (useful for
	   tracing). Can be NULL.
	   size	Size (in bytes)	to be allocated.
	   align If 0, the return is a pointer that is suitably	aligned	for
	   any kind of variable	(in the	same manner as malloc()). Otherwise,
	   the return is a pointer that	is a multiple of align.	In this	case,
	   it must be a	power of two. (Minimum alignment is the	cacheline
	   size, i.e. 64-bytes)

       Returns

	    NULL  on  error. Not enough memory, or invalid arguments (size is
	     0,	align is not a power of	two).

	    Otherwise,	the pointer to the allocated object.

   void	* rte_zmalloc (const char * type, size_t size, unsigned	align)
       Allocate	zeroed memory from the heap.

       Equivalent to rte_malloc() except that the memory zone  is  initialised
       with  zeros.  In	NUMA systems, the memory allocated resides on the same
       NUMA socket as the core that calls this function.

       Parameters
	   type	A string identifying the type of allocated objects (useful for
	   tracing). Can be NULL.
	   size	Size (in bytes)	to be allocated.
	   align If 0, the return is a pointer that is	suitably  aligned  for
	   any	kind  of variable (in the same manner as malloc()). Otherwise,
	   the return is a pointer that	is a multiple of align.	In this	 case,
	   it  must  obviously	be  a  power of	two. (Minimum alignment	is the
	   cacheline size, i.e.	64-bytes)

       Returns

	    NULL on error. Not	enough memory, or invalid arguments  (size  is
	     0,	align is not a power of	two).

	    Otherwise,	the pointer to the allocated object.

   void	 *  rte_calloc	(const	char * type, size_t num, size_t	size, unsigned
       align)
       Replacement function for	calloc(), using	huge-page memory. Memory  area
       is  initialised	with  zeros.  In  NUMA	systems,  the memory allocated
       resides on the same NUMA	socket as the core that	calls this function.

       Parameters
	   type	A string identifying the type of allocated objects (useful for
	   tracing). Can be NULL.
	   num Number of elements to be	allocated.
	   size	Size (in bytes)	of a single element.
	   align If 0, the return is a pointer that is	suitably  aligned  for
	   any	kind  of variable (in the same manner as malloc()). Otherwise,
	   the return is a pointer that	is a multiple of align.	In this	 case,
	   it  must  obviously	be  a  power of	two. (Minimum alignment	is the
	   cacheline size, i.e.	64-bytes)

       Returns

	    NULL on error. Not	enough memory, or invalid arguments  (size  is
	     0,	align is not a power of	two).

	    Otherwise,	the pointer to the allocated object.

   void	* rte_realloc (void * ptr, size_t size,	unsigned int align)
       Replacement  function  for  realloc(), using huge-page memory. Reserved
       area memory is resized, preserving contents. In NUMA systems,  the  new
       area may	not reside on the same NUMA node as the	old one.

       Parameters
	   ptr Pointer to already allocated memory
	   size	Size (in bytes)	of new area. If	this is	0, memory is freed.
	   align  If  0,  the return is	a pointer that is suitably aligned for
	   any kind of variable	(in the	same manner as	malloc()).  Otherwise,
	   the	return is a pointer that is a multiple of align. In this case,
	   it must obviously be	a power	of  two.  (Minimum  alignment  is  the
	   cacheline size, i.e.	64-bytes)

       Returns

	    NULL  on  error. Not enough memory, or invalid arguments (size is
	     0,	align is not a power of	two).

	    Otherwise,	the pointer to the reallocated memory.

   void	* rte_realloc_socket (void * ptr, size_t size, unsigned	int align, int
       socket)
       Replacement function for	realloc(), using  huge-page  memory.  Reserved
       area  memory  is	resized, preserving contents. In NUMA systems, the new
       area resides on requested NUMA socket.

       Parameters
	   ptr Pointer to already allocated memory
	   size	Size (in bytes)	of new area. If	this is	0, memory is freed.
	   align If 0, the return is a pointer that is	suitably  aligned  for
	   any	kind  of variable (in the same manner as malloc()). Otherwise,
	   the return is a pointer that	is a multiple of align.	In this	 case,
	   it  must  obviously	be  a  power of	two. (Minimum alignment	is the
	   cacheline size, i.e.	64-bytes)
	   socket NUMA socket to allocate memory on.

       Returns

	    NULL on error. Not	enough memory, or invalid arguments  (size  is
	     0,	align is not a power of	two).

	    Otherwise,	the pointer to the reallocated memory.

   void	 *  rte_malloc_socket (const char * type, size_t size, unsigned	align,
       int socket)
       This function allocates memory from the huge-page area of  memory.  The
       memory is not cleared.

       Parameters
	   type	A string identifying the type of allocated objects (useful for
	   tracing). Can be NULL.
	   size	Size (in bytes)	to be allocated.
	   align  If  0,  the return is	a pointer that is suitably aligned for
	   any kind of variable	(in the	same manner as	malloc()).  Otherwise,
	   the	return is a pointer that is a multiple of align. In this case,
	   it must be a	power of two.  (Minimum	 alignment  is	the  cacheline
	   size, i.e. 64-bytes)
	   socket NUMA socket to allocate memory on. If	SOCKET_ID_ANY is used,
	   this	function will behave the same as rte_malloc().

       Returns

	    NULL  on  error. Not enough memory, or invalid arguments (size is
	     0,	align is not a power of	two).

	    Otherwise,	the pointer to the allocated object.

   void	* rte_zmalloc_socket (const char * type, size_t	size, unsigned	align,
       int socket)
       Allocate	zeroed memory from the heap.

       Equivalent  to  rte_malloc() except that	the memory zone	is initialised
       with zeros.

       Parameters
	   type	A string identifying the type of allocated objects (useful for
	   tracing). Can be NULL.
	   size	Size (in bytes)	to be allocated.
	   align If 0, the return is a pointer that is	suitably  aligned  for
	   any	kind  of variable (in the same manner as malloc()). Otherwise,
	   the return is a pointer that	is a multiple of align.	In this	 case,
	   it  must  obviously	be  a  power of	two. (Minimum alignment	is the
	   cacheline size, i.e.	64-bytes)
	   socket NUMA socket to allocate memory on. If	SOCKET_ID_ANY is used,
	   this	function will behave the same as rte_zmalloc().

       Returns

	    NULL on error. Not	enough memory, or invalid arguments  (size  is
	     0,	align is not a power of	two).

	    Otherwise,	the pointer to the allocated object.

   void	 *  rte_calloc_socket  (const  char  *	type, size_t num, size_t size,
       unsigned	align, int socket)
       Replacement function for	calloc(), using	huge-page memory. Memory  area
       is initialised with zeros.

       Parameters
	   type	A string identifying the type of allocated objects (useful for
	   tracing). Can be NULL.
	   num Number of elements to be	allocated.
	   size	Size (in bytes)	of a single element.
	   align  If  0,  the return is	a pointer that is suitably aligned for
	   any kind of variable	(in the	same manner as	malloc()).  Otherwise,
	   the	return is a pointer that is a multiple of align. In this case,
	   it must obviously be	a power	of  two.  (Minimum  alignment  is  the
	   cacheline size, i.e.	64-bytes)
	   socket NUMA socket to allocate memory on. If	SOCKET_ID_ANY is used,
	   this	function will behave the same as rte_calloc().

       Returns

	    NULL  on  error. Not enough memory, or invalid arguments (size is
	     0,	align is not a power of	two).

	    Otherwise,	the pointer to the allocated object.

   int rte_malloc_validate (const void * ptr, size_t * size)
       If malloc debug is enabled, check a memory block	for header and trailer
       markers to indicate that	all is well with the block. If	size  is  non-
       null, also return the size of the block.

       Parameters
	   ptr	pointer	 to the	start of a data	block, must have been returned
	   by a	previous call to rte_malloc(), rte_zmalloc(), rte_calloc()  or
	   rte_realloc()
	   size	 if  non-null,	and memory block pointer is valid, returns the
	   size	of the memory block

       Returns
	   -1 on error,	invalid	pointer	passed or header and  trailer  markers
	   are missing or corrupted 0 on success

   int rte_malloc_get_socket_stats (int	socket,	struct rte_malloc_socket_stats
       * socket_stats)
       Get heap	statistics for the specified heap.

       Note
	   This	   function    is    not    thread-safe	   with	  respect   to
	   rte_malloc_heap_create()/rte_malloc_heap_destroy() functions.

       Parameters
	   socket An unsigned  integer	specifying  the	 socket	 to  get  heap
	   statistics for
	   socket_stats	A structure which provides memory to store statistics

       Returns
	   Null	on error Pointer to structure storing statistics on success

   int	rte_malloc_heap_memory_add  (const  char  * heap_name, void * va_addr,
       size_t len,  rte_iova_t	iova_addrs[],  unsigned	 int  n_pages,	size_t
       page_sz)
       Add memory chunk	to a heap with specified name.

       Note
	   Multiple memory chunks can be added to the same heap

	   Before  accessing  this  memory  in other processes,	it needs to be
	   attached    in    each    of	   those    processes	 by    calling
	   rte_malloc_heap_memory_attach in each other process.

	   Memory  must	 be previously allocated for DPDK to be	able to	use it
	   as a	malloc heap.  Failing  to  do  so  will	 result	 in  undefined
	   behavior, up	to and including segmentation faults.

	   Calling  this  function  will erase any contents already present at
	   the supplied	memory address.

       Parameters
	   heap_name Name of the heap to add memory chunk to
	   va_addr Start of virtual area to add	to the heap. Must  be  aligned
	   by page_sz.
	   len	Length	of virtual area	to add to the heap. Must be aligned by
	   page_sz.
	   iova_addrs Array of page IOVA addresses corresponding to each  page
	   in this memory area.	Can be NULL, in	which case page	IOVA addresses
	   will	be set to RTE_BAD_IOVA.
	   n_pages  Number  of	elements  in  the iova_addrs array. Ignored if
	   iova_addrs is NULL.
	   page_sz Page	size of	the underlying memory

       Returns

	    0 on success

	    -1	in case	of error, with rte_errno set to	one of the  following:
	     EINVAL  -	one of the parameters was invalid EPERM	- attempted to
	     add memory	to a reserved heap ENOSPC - no more space in  internal
	     config to store a new memory chunk

   int	rte_malloc_heap_memory_remove (const char * heap_name, void * va_addr,
       size_t len)
       Remove memory chunk from	heap with specified name.

       Note
	   Memory chunk	being removed must be the same as one that was	added;
	   partially removing memory chunks is not supported

	   Memory  area	 must  not contain any allocated elements to allow its
	   removal from	the heap

	   All other processes must detach from	the memory chunk prior	to  it
	   being removed from the heap.

       Parameters
	   heap_name Name of the heap to remove	memory from
	   va_addr Virtual address to remove from the heap
	   len Length of virtual area to remove	from the heap

       Returns

	    0 on success

	    -1	 in case of error, with	rte_errno set to one of	the following:
	     EINVAL - one of the parameters was	invalid	EPERM -	 attempted  to
	     remove  memory from a reserved heap ENOENT	- heap or memory chunk
	     was not found EBUSY - memory chunk	still contains data

   int rte_malloc_heap_memory_attach (const char * heap_name, void *  va_addr,
       size_t len)
       Attach  to  an  already	existing  chunk	 of external memory in another
       process.

       Note
	   This	function must be called	before any attempt is made to  use  an
	   already existing external memory chunk. This	function does not need
	   to  be  called  if a	call to	rte_malloc_heap_memory_add was made in
	   the current process.

       Parameters
	   heap_name Heap name to which	this chunk of memory belongs
	   va_addr Start address of memory chunk to attach to
	   len Length of memory	chunk to attach	to

       Returns
	   0 on	successful attach -1 on	unsuccessful  attach,  with  rte_errno
	   set to indicate cause for error: EINVAL - one of the	parameters was
	   invalid  EPERM  -  attempted	 to  attach  memory to a reserved heap
	   ENOENT - heap or memory chunk was not found

   int rte_malloc_heap_memory_detach (const char * heap_name, void *  va_addr,
       size_t len)
       Detach from a chunk of external memory in secondary process.

       Note
	   This	 function  must	 be  called  in	 before	any attempt is made to
	   remove external memory from	the  heap  in  another	process.  This
	   function   does   not   need	  to   be   called   if	  a   call  to
	   rte_malloc_heap_memory_remove will be called	in current process.

       Parameters
	   heap_name Heap name to which	this chunk of memory belongs
	   va_addr Start address of memory chunk to attach to
	   len Length of memory	chunk to attach	to

       Returns
	   0 on	successful detach -1 on	unsuccessful  detach,  with  rte_errno
	   set to indicate cause for error: EINVAL - one of the	parameters was
	   invalid  EPERM  -  attempted	 to detach memory from a reserved heap
	   ENOENT - heap or memory chunk was not found

   int rte_malloc_heap_create (const char * heap_name)
       Creates a new empty malloc heap with a specified	name.

       Note
	   Heaps created via this  call	 will  automatically  get  assigned  a
	   unique     socket	 ID,	 which	   can	  be	found	 using
	   rte_malloc_heap_get_socket()

       Parameters
	   heap_name Name of the heap to create.

       Returns

	    0 on successful creation

	    -1	in case	of error, with rte_errno set to	one of the  following:
	     EINVAL  -	heap_name was NULL, empty or too long EEXIST - heap by
	     name of heap_name already	exists	ENOSPC	-  no  more  space  in
	     internal config to	store a	new heap

   int rte_malloc_heap_destroy (const char * heap_name)
       Destroys	a previously created malloc heap with specified	name.

       Note
	   This	 function  will	 return	 a  failure  result  if	not all	memory
	   allocated from the heap has been freed back to the heap

	   This	function will return  a	 failure  result  if  not  all	memory
	   segments were removed from the heap prior to	its destruction

       Parameters
	   heap_name Name of the heap to create.

       Returns

	    0 on success

	    -1	 in case of error, with	rte_errno set to one of	the following:
	     EINVAL - heap_name	was NULL, empty	or too long ENOENT -  heap  by
	     the name of heap_name was not found EPERM - attempting to destroy
	     reserved heap EBUSY - heap	still contains data

   int rte_malloc_heap_get_socket (const char *	name)
       Find socket ID corresponding to a named heap.

       Parameters
	   name	Heap name to find socket ID for

       Returns
	   Socket  ID in case of success (a non-negative number) -1 in case of
	   error, with rte_errno set to	one of the following:  EINVAL  -  name
	   was NULL ENOENT - heap identified by	the name name was not found

   int rte_malloc_heap_socket_is_external (int socket_id)
       Check if	a given	socket ID refers to externally allocated memory.

       Note
	   Passing SOCKET_ID_ANY will return 0.

       Parameters
	   socket_id Socket ID to check

       Returns
	   1 if	socket ID refers to externally allocated memory	0 if socket ID
	   refers to internal DPDK memory -1 if	socket ID is invalid

   void	rte_malloc_dump_stats (FILE * f, const char * type)
       Dump statistics.

       Dump  for  the  specified type to a file. If the	type argument is NULL,
       all memory types	will be	dumped.

       Note
	   This	  function   is	   not	  thread-safe	 with	 respect    to
	   rte_malloc_heap_create()/rte_malloc_heap_destroy() functions.

       Parameters
	   f A pointer to a file for output
	   type	Deprecated parameter unused.

   void	rte_malloc_dump_heaps (FILE * f)
       Dump contents of	all malloc heaps to a file.

       Note
	   This	   function    is    not    thread-safe	   with	  respect   to
	   rte_malloc_heap_create()/rte_malloc_heap_destroy() functions.

       Parameters
	   f A pointer to a file for output

   rte_iova_t rte_malloc_virt2iova (const void * addr)
       Return the IO address of	a virtual address obtained through rte_malloc

       Parameters
	   addr	Address	obtained from a	previous rte_malloc call

       Returns
	   RTE_BAD_IOVA	on error otherwise return an address suitable for IO

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

Version	25.11.0			Thu Jun	11 2026		       rte_malloc.h(3)

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

home | help