[RFC,04/11] malloc: add name to malloc heaps
Checks
Commit Message
We will need to refer to external heaps in some way. While we use
heap ID's internally, for external API use it has to be something
more user-friendly. So, we will be using a string to uniquely
identify a heap.
Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
---
lib/librte_eal/common/include/rte_malloc_heap.h | 2 ++
lib/librte_eal/common/malloc_heap.c | 13 +++++++++++++
lib/librte_eal/common/rte_malloc.c | 1 +
3 files changed, 16 insertions(+)
Comments
On Fri, Jul 6, 2018 at 2:17 PM, Anatoly Burakov <anatoly.burakov@intel.com>
wrote:
> We will need to refer to external heaps in some way. While we use
> heap ID's internally, for external API use it has to be something
> more user-friendly. So, we will be using a string to uniquely
> identify a heap.
>
> Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
> ---
> lib/librte_eal/common/include/rte_malloc_heap.h | 2 ++
> lib/librte_eal/common/malloc_heap.c | 13 +++++++++++++
> lib/librte_eal/common/rte_malloc.c | 1 +
> 3 files changed, 16 insertions(+)
>
> diff --git a/lib/librte_eal/common/include/rte_malloc_heap.h
> b/lib/librte_eal/common/include/rte_malloc_heap.h
> index d43fa9097..bd64dff03 100644
> --- a/lib/librte_eal/common/include/rte_malloc_heap.h
> +++ b/lib/librte_eal/common/include/rte_malloc_heap.h
> @@ -12,6 +12,7 @@
>
> /* Number of free lists per heap, grouped by size. */
> #define RTE_HEAP_NUM_FREELISTS 13
> +#define RTE_HEAP_NAME_MAX_LEN 32
>
> /* dummy definition, for pointers */
> struct malloc_elem;
> @@ -27,6 +28,7 @@ struct malloc_heap {
>
> unsigned alloc_count;
> size_t total_size;
> + char name[RTE_HEAP_NAME_MAX_LEN];
> } __rte_cache_aligned;
>
> #endif /* _RTE_MALLOC_HEAP_H_ */
> diff --git a/lib/librte_eal/common/malloc_heap.c b/lib/librte_eal/common/
> malloc_heap.c
> index e7e1838b1..8f22c062b 100644
> --- a/lib/librte_eal/common/malloc_heap.c
> +++ b/lib/librte_eal/common/malloc_heap.c
> @@ -848,6 +848,7 @@ malloc_heap_dump(struct malloc_heap *heap, FILE *f)
>
> rte_spinlock_lock(&heap->lock);
>
> + fprintf(f, "Heap name: %s\n", heap->name);
> fprintf(f, "Heap size: 0x%zx\n", heap->total_size);
> fprintf(f, "Heap alloc count: %u\n", heap->alloc_count);
>
> @@ -864,6 +865,18 @@ int
> rte_eal_malloc_heap_init(void)
> {
> struct rte_mem_config *mcfg = rte_eal_get_configuration()->
> mem_config;
> + unsigned int i;
> +
> + /* assign names to default DPDK heaps */
> + for (i = 0; i < rte_socket_count(); i++) {
> + struct malloc_heap *heap = &mcfg->malloc_heaps[i];
> + char heap_name[RTE_HEAP_NAME_MAX_LEN];
> + int socket_id = rte_socket_id_by_idx(i);
> +
> + snprintf(heap_name, sizeof(heap_name) - 1,
> + "socket_%i", socket_id);
> + strlcpy(heap->name, heap_name, RTE_HEAP_NAME_MAX_LEN);
> + }
>
> if (register_mp_requests()) {
> RTE_LOG(ERR, EAL, "Couldn't register malloc multiprocess
> actions\n");
> diff --git a/lib/librte_eal/common/rte_malloc.c
> b/lib/librte_eal/common/rte_malloc.c
> index 4387bc494..75d6e0b4d 100644
> --- a/lib/librte_eal/common/rte_malloc.c
> +++ b/lib/librte_eal/common/rte_malloc.c
> @@ -198,6 +198,7 @@ rte_malloc_dump_stats(FILE *f, __rte_unused const char
> *type)
> malloc_heap_get_stats(heap, &sock_stats);
>
> fprintf(f, "Heap id:%u\n", heap_id);
> + fprintf(f, "\tHeap name:%s\n", heap->name);
> fprintf(f, "\tHeap_size:%zu,\n",
> sock_stats.heap_totalsz_bytes);
> fprintf(f, "\tFree_size:%zu,\n",
> sock_stats.heap_freesz_bytes);
> fprintf(f, "\tAlloc_size:%zu,\n",
> sock_stats.heap_allocsz_bytes);
> --
> 2.17.1
>
Acked: Alejandro Lucero <alejandro.lucero@netronome.com>
@@ -12,6 +12,7 @@
/* Number of free lists per heap, grouped by size. */
#define RTE_HEAP_NUM_FREELISTS 13
+#define RTE_HEAP_NAME_MAX_LEN 32
/* dummy definition, for pointers */
struct malloc_elem;
@@ -27,6 +28,7 @@ struct malloc_heap {
unsigned alloc_count;
size_t total_size;
+ char name[RTE_HEAP_NAME_MAX_LEN];
} __rte_cache_aligned;
#endif /* _RTE_MALLOC_HEAP_H_ */
@@ -848,6 +848,7 @@ malloc_heap_dump(struct malloc_heap *heap, FILE *f)
rte_spinlock_lock(&heap->lock);
+ fprintf(f, "Heap name: %s\n", heap->name);
fprintf(f, "Heap size: 0x%zx\n", heap->total_size);
fprintf(f, "Heap alloc count: %u\n", heap->alloc_count);
@@ -864,6 +865,18 @@ int
rte_eal_malloc_heap_init(void)
{
struct rte_mem_config *mcfg = rte_eal_get_configuration()->mem_config;
+ unsigned int i;
+
+ /* assign names to default DPDK heaps */
+ for (i = 0; i < rte_socket_count(); i++) {
+ struct malloc_heap *heap = &mcfg->malloc_heaps[i];
+ char heap_name[RTE_HEAP_NAME_MAX_LEN];
+ int socket_id = rte_socket_id_by_idx(i);
+
+ snprintf(heap_name, sizeof(heap_name) - 1,
+ "socket_%i", socket_id);
+ strlcpy(heap->name, heap_name, RTE_HEAP_NAME_MAX_LEN);
+ }
if (register_mp_requests()) {
RTE_LOG(ERR, EAL, "Couldn't register malloc multiprocess actions\n");
@@ -198,6 +198,7 @@ rte_malloc_dump_stats(FILE *f, __rte_unused const char *type)
malloc_heap_get_stats(heap, &sock_stats);
fprintf(f, "Heap id:%u\n", heap_id);
+ fprintf(f, "\tHeap name:%s\n", heap->name);
fprintf(f, "\tHeap_size:%zu,\n", sock_stats.heap_totalsz_bytes);
fprintf(f, "\tFree_size:%zu,\n", sock_stats.heap_freesz_bytes);
fprintf(f, "\tAlloc_size:%zu,\n", sock_stats.heap_allocsz_bytes);