malloc: add function to query socket ID of named heap
When we will be creating external heaps, they will have their own "fake" socket ID, so add a function that will map the heap name to its socket ID. Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
This commit is contained in:
parent
d14c148e79
commit
e1fe3c2fab
@ -263,6 +263,20 @@ int
|
|||||||
rte_malloc_get_socket_stats(int socket,
|
rte_malloc_get_socket_stats(int socket,
|
||||||
struct rte_malloc_socket_stats *socket_stats);
|
struct rte_malloc_socket_stats *socket_stats);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Find socket ID corresponding to a named heap.
|
||||||
|
*
|
||||||
|
* @param name
|
||||||
|
* Heap name to find socket ID for
|
||||||
|
* @return
|
||||||
|
* 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_experimental
|
||||||
|
rte_malloc_heap_get_socket(const char *name);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Dump statistics.
|
* Dump statistics.
|
||||||
*
|
*
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <sys/queue.h>
|
#include <sys/queue.h>
|
||||||
|
|
||||||
|
#include <rte_errno.h>
|
||||||
#include <rte_memcpy.h>
|
#include <rte_memcpy.h>
|
||||||
#include <rte_memory.h>
|
#include <rte_memory.h>
|
||||||
#include <rte_eal.h>
|
#include <rte_eal.h>
|
||||||
@ -183,6 +184,42 @@ rte_malloc_dump_heaps(FILE *f)
|
|||||||
rte_rwlock_read_unlock(&mcfg->memory_hotplug_lock);
|
rte_rwlock_read_unlock(&mcfg->memory_hotplug_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
rte_malloc_heap_get_socket(const char *name)
|
||||||
|
{
|
||||||
|
struct rte_mem_config *mcfg = rte_eal_get_configuration()->mem_config;
|
||||||
|
struct malloc_heap *heap = NULL;
|
||||||
|
unsigned int idx;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if (name == NULL ||
|
||||||
|
strnlen(name, RTE_HEAP_NAME_MAX_LEN) == 0 ||
|
||||||
|
strnlen(name, RTE_HEAP_NAME_MAX_LEN) ==
|
||||||
|
RTE_HEAP_NAME_MAX_LEN) {
|
||||||
|
rte_errno = EINVAL;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
rte_rwlock_read_lock(&mcfg->memory_hotplug_lock);
|
||||||
|
for (idx = 0; idx < RTE_MAX_HEAPS; idx++) {
|
||||||
|
struct malloc_heap *tmp = &mcfg->malloc_heaps[idx];
|
||||||
|
|
||||||
|
if (!strncmp(name, tmp->name, RTE_HEAP_NAME_MAX_LEN)) {
|
||||||
|
heap = tmp;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (heap != NULL) {
|
||||||
|
ret = heap->socket_id;
|
||||||
|
} else {
|
||||||
|
rte_errno = ENOENT;
|
||||||
|
ret = -1;
|
||||||
|
}
|
||||||
|
rte_rwlock_read_unlock(&mcfg->memory_hotplug_lock);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Print stats on memory type. If type is NULL, info on all types is printed
|
* Print stats on memory type. If type is NULL, info on all types is printed
|
||||||
*/
|
*/
|
||||||
|
@ -318,6 +318,7 @@ EXPERIMENTAL {
|
|||||||
rte_fbarray_set_used;
|
rte_fbarray_set_used;
|
||||||
rte_log_register_type_and_pick_level;
|
rte_log_register_type_and_pick_level;
|
||||||
rte_malloc_dump_heaps;
|
rte_malloc_dump_heaps;
|
||||||
|
rte_malloc_heap_get_socket;
|
||||||
rte_mem_alloc_validator_register;
|
rte_mem_alloc_validator_register;
|
||||||
rte_mem_alloc_validator_unregister;
|
rte_mem_alloc_validator_unregister;
|
||||||
rte_mem_event_callback_register;
|
rte_mem_event_callback_register;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user