DPDK
19.05.0
|
Go to the source code of this file.
Data Structures | |
struct | rte_malloc_socket_stats |
Functions | |
void * | rte_malloc (const char *type, size_t size, unsigned align) |
void * | rte_zmalloc (const char *type, size_t size, unsigned align) |
void * | rte_calloc (const char *type, size_t num, size_t size, unsigned align) |
void * | rte_realloc (void *ptr, size_t size, unsigned int align) |
void *__rte_experimental | rte_realloc_socket (void *ptr, size_t size, unsigned int align, int socket) |
void * | rte_malloc_socket (const char *type, size_t size, unsigned align, int socket) |
void * | rte_zmalloc_socket (const char *type, size_t size, unsigned align, int socket) |
void * | rte_calloc_socket (const char *type, size_t num, size_t size, unsigned align, int socket) |
void | rte_free (void *ptr) |
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_experimental | 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_experimental | rte_malloc_heap_memory_remove (const char *heap_name, void *va_addr, size_t len) |
int __rte_experimental | rte_malloc_heap_memory_attach (const char *heap_name, void *va_addr, size_t len) |
int __rte_experimental | rte_malloc_heap_memory_detach (const char *heap_name, void *va_addr, size_t len) |
int __rte_experimental | rte_malloc_heap_create (const char *heap_name) |
int __rte_experimental | rte_malloc_heap_destroy (const char *heap_name) |
int __rte_experimental | rte_malloc_heap_get_socket (const char *name) |
int __rte_experimental | rte_malloc_heap_socket_is_external (int socket_id) |
void | rte_malloc_dump_stats (FILE *f, const char *type) |
void __rte_experimental | rte_malloc_dump_heaps (FILE *f) |
int | rte_malloc_set_limit (const char *type, size_t max) |
rte_iova_t | rte_malloc_virt2iova (const void *addr) |
RTE Malloc. This library provides methods for dynamically allocating memory from hugepages.
Definition in file rte_malloc.h.
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.
type | A string identifying the type of allocated objects (useful for debug purposes, such as identifying the cause of a memory leak). 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) |
void* rte_zmalloc | ( | const char * | type, |
size_t | size, | ||
unsigned | align | ||
) |
Allocate zero'ed 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.
type | A string identifying the type of allocated objects (useful for debug purposes, such as identifying the cause of a memory leak). 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) |
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.
type | A string identifying the type of allocated objects (useful for debug purposes, such as identifying the cause of a memory leak). 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) |
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.
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) |
void* __rte_experimental 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.
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. |
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.
type | A string identifying the type of allocated objects (useful for debug purposes, such as identifying the cause of a memory leak). 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(). |
void* rte_zmalloc_socket | ( | const char * | type, |
size_t | size, | ||
unsigned | align, | ||
int | socket | ||
) |
Allocate zero'ed memory from the heap.
Equivalent to rte_malloc() except that the memory zone is initialised with zeros.
type | A string identifying the type of allocated objects (useful for debug purposes, such as identifying the cause of a memory leak). 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(). |
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.
type | A string identifying the type of allocated objects (useful for debug purposes, such as identifying the cause of a memory leak). 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(). |
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.
ptr | The pointer to memory to be freed. |
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.
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 |
int rte_malloc_get_socket_stats | ( | int | socket, |
struct rte_malloc_socket_stats * | socket_stats | ||
) |
Get heap statistics for the specified heap.
rte_malloc_heap_create()
/rte_malloc_heap_destroy()
functions.socket | An unsigned integer specifying the socket to get heap statistics for |
socket_stats | A structure which provides memory to store statistics |
int __rte_experimental 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.
rte_malloc_heap_memory_attach
in each other process.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 |
int __rte_experimental rte_malloc_heap_memory_remove | ( | const char * | heap_name, |
void * | va_addr, | ||
size_t | len | ||
) |
Remove memory chunk from heap with specified name.
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 |
int __rte_experimental 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.
rte_malloc_heap_memory_add
was made in the current process.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 |
int __rte_experimental 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.
rte_malloc_heap_memory_remove
will be called in current process.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 |
int __rte_experimental rte_malloc_heap_create | ( | const char * | heap_name | ) |
Creates a new empty malloc heap with a specified name.
rte_malloc_heap_get_socket()
heap_name | Name of the heap to create. |
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_experimental rte_malloc_heap_destroy | ( | const char * | heap_name | ) |
Destroys a previously created malloc heap with specified name.
heap_name | Name of the heap to create. |
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_experimental rte_malloc_heap_get_socket | ( | const char * | name | ) |
Find socket ID corresponding to a named heap.
name | Heap name to find socket ID for |
name
was NULL ENOENT - heap identified by the name name
was not found int __rte_experimental rte_malloc_heap_socket_is_external | ( | int | socket_id | ) |
Check if a given socket ID refers to externally allocated memory.
socket_id | Socket ID to check |
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.
rte_malloc_heap_create()
/rte_malloc_heap_destroy()
functions.f | A pointer to a file for output |
type | A string identifying the type of objects to dump, or NULL to dump all objects. |
void __rte_experimental rte_malloc_dump_heaps | ( | FILE * | f | ) |
Dump contents of all malloc heaps to a file.
rte_malloc_heap_create()
/rte_malloc_heap_destroy()
functions.f | A pointer to a file for output |
int rte_malloc_set_limit | ( | const char * | type, |
size_t | max | ||
) |
Set the maximum amount of allocated memory for this type.
This is not yet implemented
type | A string identifying the type of allocated objects. |
max | The maximum amount of allocated bytes for this type. |
rte_iova_t rte_malloc_virt2iova | ( | const void * | addr | ) |
Return the IO address of a virtual address obtained through rte_malloc
addr | Address obtained from a previous rte_malloc call |