#include <stdio.h>
#include <stddef.h>
#include <rte_memory.h>
Go to the source code of this file.
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 align) |
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) |
void | rte_malloc_dump_stats (FILE *f, const char *type) |
int | rte_malloc_set_limit (const char *type, size_t max) |
phys_addr_t | rte_malloc_virt2phy (const void *addr) |
Detailed Description
RTE Malloc. This library provides methods for dynamically allocating memory from hugepages.
Definition in file rte_malloc.h.
Function Documentation
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 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) |
- 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 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.
- Parameters
-
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) |
- 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 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) |
- 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 |
align |
|
) |
| |
Replacement function for realloc(), using huge-page memory. Reserved area memory is resized, preserving contents. In NUMA systems, the new area resides on the same NUMA socket as the old area.
- 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_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 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(). |
- 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 zero'ed 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 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(). |
- 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 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(). |
- 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_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. |
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
-
- Returns
- -1 on error, invalid pointer passed or header and trailer markers are missing or corrupted 0 on success
Get heap statistics for the specified heap.
- 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
void rte_malloc_dump_stats |
( |
FILE * |
f, |
|
|
const char * |
type |
|
) |
| |
Dump statistics.
Dump for the specified type to the console. If the type argument is NULL, all memory types will be dumped.
- Parameters
-
f | A pointer to a file for output |
type | A string identifying the type of objects to dump, or NULL to dump all objects. |
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
- Parameters
-
type | A string identifying the type of allocated objects. |
max | The maximum amount of allocated bytes for this type. |
- Returns
-
Return the physical address of a virtual address obtained through rte_malloc
- Parameters
-
addr | Adress obtained from a previous rte_malloc call |
- Returns
- NULL on error otherwise return physical address of the buffer