rte_malloc.h(3)
πΈ rte_malloc.h(3) β Library Functions Manual πΈ
okay bestie, come sit with me π this is the manual page for rte_malloc.h(3), from the Library Functions Manual, and it's a big one, so grab a snack. We're doing part 1 today, and I'm gonna tell you every single thing it says, no skips, no skimming, no cap. π«Ά
β¨ NAME β¨
rte_malloc.h
π SYNOPSIS π
Like, the includes first, obviously:
#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. So likeβ¦ don't be cute and pass it a random pointer, bestie. π
If the pointer is NULL, the function does nothing. (Iconic chill behaviour, honestly.)
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 asmalloc()). 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
NULLon 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 asmalloc()). 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
NULLon 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 asmalloc()). 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
NULLon 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 asmalloc()). 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
NULLon 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 the 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 asmalloc()). 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
NULLon 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 asmalloc()). 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_ANYis used, this function will behave the same asrte_malloc().
Returns
NULLon 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 asmalloc()). 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_ANYis used, this function will behave the same asrte_zmalloc().
Returns
NULLon error. Not enough memory, or invalid arguments (size is 0, align is not a power of two).- Otherwise, the pointer to the allocated object.
okay and that's where part 1 stops, bestie β there's more coming in part 2, so hold that thought π
π rte_calloc_socket β the calloc() glow-up, but on huge pages
void * rte_calloc_socket (const char * type, size_t num, size_t size,
unsigned align, int socket)
Bestie, this is literally just replacement function for calloc(), except it pulls its memory from huge pages and the whole area comes pre-zeroed. Immaculate. β¨
Parameters π«Ά
- type β A string identifying the type of allocated objects (super useful for tracing). Can be
NULL, no drama. - 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 (same waymalloc()does it). Otherwise, the return is a pointer that's a multiple of align, which obviously has to 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_ANYis used, this function will behave the same asrte_calloc().
Returns π
NULLon error. Could be not enough memory, or invalid arguments (size is0, align is not a power of two).- Otherwise, the pointer to the allocated object. Slay.
π rte_malloc_validate β the vibe check for memory blocks
int rte_malloc_validate (const void * ptr, size_t * size)
If malloc debug is enabled, this checks a memory block for its header and trailer markers to confirm all is well with the block. And if size is non-null, it also hands you back the size of the block. Very giving. π
Parameters
- ptr β Pointer to the start of a data block. This must have been returned by a previous call to
rte_malloc(),rte_zmalloc(),rte_calloc()orrte_realloc()β no random pointers, bestie. - size β If non-null, and the memory block pointer is valid, returns the size of the memory block.
Returns
-1on error: invalid pointer passed, or the header and trailer markers are missing or corrupted π0on success β¨
π rte_malloc_get_socket_stats β stats o'clock for one specific heap
int rte_malloc_get_socket_stats (int socket, struct rte_malloc_socket_stats
* socket_stats)
Get heap statistics for the specified heap. Numbers, but make it fashion. π
Note: This function is not thread-safe with respect torte_malloc_heap_create()/rte_malloc_heap_destroy()functions. Keep that in mind, bestie π
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 π
π§© rte_malloc_heap_memory_add β adding a whole chunk of memory to a named heap
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 the specified name.
Note (yes, several, buckle up π) - 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. Not a vibe. π - Calling this function will erase any contents already present at the supplied memory address. Gone. Poof. π«₯
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 toRTE_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 π
0on success-1in case of error, withrte_errnoset to one of the following:EINVALβ one of the parameters was invalidEPERMβ attempted to add memory to a reserved heapENOSPCβ no more space in internal config to store a new memory chunk
ποΈ rte_malloc_heap_memory_remove β taking that chunk back out
int rte_malloc_heap_memory_remove (const char * heap_name, void * va_addr,
size_t len)
Remove memory chunk from heap with the specified name.
Note π - The memory chunk being removed must be the same as the one that was added; partially removing memory chunks is not supported. - The 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
0on success-1in case of error, withrte_errnoset to one of the following:EINVALβ one of the parameters was invalidEPERMβ attempted to remove memory from a reserved heapENOENTβ heap or memory chunk was not foundEBUSYβ memory chunk still contains data
π rte_malloc_heap_memory_attach β linking up to memory another process already made
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. π
βοΈ rte_malloc_heap_memory_detach β un-linking from external memory, secondary-process style
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. π
π rte_malloc_heap_create β brand new empty heap, just for you
int rte_malloc_heap_create (const char * heap_name)
Creates a new empty malloc heap with a specified name. Fresh start energy β¨
Note β Heaps created via this call will automatically get assigned a unique socket ID, which can be found using rte_malloc_heap_get_socket(). It's giving "the app assigned you a seat." π
Parameters
- heap_name β Name of the heap to create.
Returns
0on successful creation-1in case of error, withrte_errnoset to one of the following:EINVALβ heap_name wasNULL, empty or too longEEXISTβ heap by name of heap_name already existsENOSPCβ no more space in internal config to store a new heap
π rte_malloc_heap_destroy β bye bye heap (only if it's actually clean)
int rte_malloc_heap_destroy (const char * heap_name)
Destroys a previously created malloc heap with the 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
0on success-1in case of error, withrte_errnoset to one of the following:EINVALβ heap_name wasNULL, empty or too longENOENTβ heap by the name of heap_name was not foundEPERMβ attempting to destroy reserved heapEBUSYβ heap still contains data
π rte_malloc_heap_get_socket β matching a heap name to its socket ID
int rte_malloc_heap_get_socket (const char * name)
Find socket ID corresponding to a named heap. Cute little lookup. πΈ
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.
π rte_malloc_heap_socket_is_external β is this socket even ours?
int rte_malloc_heap_socket_is_external (int socket_id)
Check if a given socket ID refers to externally allocated memory.
Note β PassingSOCKET_ID_ANYwill return0. No cap. π«Ά
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.
π rte_malloc_dump_stats β dump that stats data
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. Everything, everywhere, all at once. π
Note: This function is not thread-safe with respect torte_malloc_heap_create()/rte_malloc_heap_destroy()functions.
Parameters
- f β A pointer to a file for output.
- type β Deprecated parameter unused. Retired. Living its best life elsewhere. π
ποΈ rte_malloc_dump_heaps β dump all the heaps
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 torte_malloc_heap_create()/rte_malloc_heap_destroy()functions.
Parameters
- f β A pointer to a file for output.
π rte_malloc_virt2iova β virtual address in, IO address out
rte_iova_t rte_malloc_virt2iova (const void * addr)
Return the IO address of a virtual address obtained through rte_malloc. One address, transmuted into another. Iconic. β
Parameters
- addr β Address obtained from a previous
rte_malloccall.
Returns β RTE_BAD_IOVA on error; otherwise return an address suitable for IO.
β¨ Author β¨
Generated automatically by Doxygen for DPDK from the source code. (Not me writing my own bio, the robots did it π€)
okay bestie that's the whole page, no notes π this was DPDK Version 25.11.3 of rte_malloc.h(3) β go forth and allocate responsibly, mwah π
ππ¦
π¦ where this page comes from
- ubuntu resolute: dpdk-doc 25.11.3-0ubuntu0.26.04.1 Β· BSD-3-Clause
- ubuntu stonking: dpdk-doc 25.11.3-1 Β· BSD-3-Clause
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms