Functions |
struct rte_memzone * | rte_memzone_reserve (const char *name, size_t len, int socket_id, unsigned flags) |
struct rte_memzone * | rte_memzone_reserve_aligned (const char *name, size_t len, int socket_id, unsigned flags, unsigned align) |
struct rte_memzone * | rte_memzone_reserve_bounded (const char *name, size_t len, int socket_id, unsigned flags, unsigned align, unsigned bound) |
struct rte_memzone * | rte_memzone_lookup (const char *name) |
void | rte_memzone_dump (FILE *) |
void | rte_memzone_walk (void(*func)(const struct rte_memzone *, void *arg), void *arg) |
RTE Memzone
The goal of the memzone allocator is to reserve contiguous portions of physical memory. These zones are identified by a name.
The memzone descriptors are shared by all partitions and are located in a known place of physical memory. This zone is accessed using rte_eal_get_configuration(). The lookup (by name) of a memory zone can be done in any partition and returns the same physical address.
A reserved memory zone cannot be unreserved. The reservation shall be done at initialization time only.
struct rte_memzone* rte_memzone_reserve_bounded |
( |
const char * |
name, |
|
|
size_t |
len, |
|
|
int |
socket_id, |
|
|
unsigned |
flags, |
|
|
unsigned |
align, |
|
|
unsigned |
bound |
|
) |
| |
|
read |
Reserve a portion of physical memory with specified alignment and boundary.
This function reserves some memory with specified alignment and boundary, and returns a pointer to a correctly filled memzone descriptor. If the allocation cannot be done or if the alignment or boundary are not a power of 2, returns NULL. Memory buffer is reserved in a way, that it wouldn't cross specified boundary. That implies that requested length should be less or equal then boundary. Note: A reserved zone cannot be freed.
- Parameters
-
name | The name of the memzone. If it already exists, the function will fail and return NULL. |
len | The size of the memory to be reserved. If it is 0, the biggest contiguous zone will be reserved. |
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. |
flags | The flags parameter is used to request memzones to be taken from 1GB or 2MB hugepages.
- RTE_MEMZONE_2MB - Reserve from 2MB pages
- RTE_MEMZONE_1GB - Reserve from 1GB pages
- RTE_MEMZONE_16MB - Reserve from 16MB pages
- RTE_MEMZONE_16GB - Reserve from 16GB pages
- RTE_MEMZONE_SIZE_HINT_ONLY - Allow alternative page size to be used if the requested page size is unavailable. If this flag is not set, the function will return error on an unavailable size request.
|
align | Alignment for resulting memzone. Must be a power of 2. |
bound | Boundary for resulting memzone. Must be a power of 2 or zero. Zero value implies no boundary condition. |
- Returns
- A pointer to a correctly-filled read-only memzone descriptor, or NULL on error. On error case, rte_errno will be set appropriately:
- E_RTE_NO_CONFIG - function could not get pointer to rte_config structure
- E_RTE_SECONDARY - function was called from a secondary process instance
- 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
- EINVAL - invalid parameters