From 9b1249d9ff695531e4a737bbf9bf519e0bf8130c Mon Sep 17 00:00:00 2001 From: Xueming Li Date: Sun, 5 Apr 2020 02:49:22 +0000 Subject: [PATCH] app/testpmd: support dumping socket memory Introduce new command to dump memory statistics of each socket, summary, also show changes since last call. Usage: dump_socket_mem Signed-off-by: Xueming Li Reviewed-by: Ferruh Yigit --- app/test-pmd/cmdline.c | 53 +++++++++++++++++++++ doc/guides/testpmd_app_ug/testpmd_funcs.rst | 6 +++ 2 files changed, 59 insertions(+) diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index 7b86bef0ed..7dc4eec48c 100644 --- a/app/test-pmd/cmdline.c +++ b/app/test-pmd/cmdline.c @@ -9566,6 +9566,56 @@ dump_struct_sizes(void) #undef DUMP_SIZE } + +/* Dump the socket memory statistics on console */ +static void +dump_socket_mem(FILE *f) +{ + struct rte_malloc_socket_stats socket_stats; + unsigned int i; + size_t total = 0; + size_t alloc = 0; + size_t free = 0; + unsigned int n_alloc = 0; + unsigned int n_free = 0; + static size_t last_allocs; + static size_t last_total; + + + for (i = 0; i < RTE_MAX_NUMA_NODES; i++) { + if (rte_malloc_get_socket_stats(i, &socket_stats) || + !socket_stats.heap_totalsz_bytes) + continue; + total += socket_stats.heap_totalsz_bytes; + alloc += socket_stats.heap_allocsz_bytes; + free += socket_stats.heap_freesz_bytes; + n_alloc += socket_stats.alloc_count; + n_free += socket_stats.free_count; + fprintf(f, + "Socket %u: size(M) total: %.6lf alloc: %.6lf(%.3lf%%) free: %.6lf \tcount alloc: %-4u free: %u\n", + i, + (double)socket_stats.heap_totalsz_bytes / (1024 * 1024), + (double)socket_stats.heap_allocsz_bytes / (1024 * 1024), + (double)socket_stats.heap_allocsz_bytes * 100 / + (double)socket_stats.heap_totalsz_bytes, + (double)socket_stats.heap_freesz_bytes / (1024 * 1024), + socket_stats.alloc_count, + socket_stats.free_count); + } + fprintf(f, + "Total : size(M) total: %.6lf alloc: %.6lf(%.3lf%%) free: %.6lf \tcount alloc: %-4u free: %u\n", + (double)total / (1024 * 1024), (double)alloc / (1024 * 1024), + (double)alloc * 100 / (double)total, + (double)free / (1024 * 1024), + n_alloc, n_free); + if (last_allocs) + fprintf(stdout, "Memory total change: %.6lf(M), allocation change: %.6lf(M)\n", + ((double)total - (double)last_total) / (1024 * 1024), + (double)(alloc - (double)last_allocs) / 1024 / 1024); + last_allocs = alloc; + last_total = total; +} + static void cmd_dump_parsed(void *parsed_result, __rte_unused struct cmdline *cl, __rte_unused void *data) @@ -9574,6 +9624,8 @@ static void cmd_dump_parsed(void *parsed_result, if (!strcmp(res->dump, "dump_physmem")) rte_dump_physmem_layout(stdout); + else if (!strcmp(res->dump, "dump_socket_mem")) + dump_socket_mem(stdout); else if (!strcmp(res->dump, "dump_memzone")) rte_memzone_dump(stdout); else if (!strcmp(res->dump, "dump_struct_sizes")) @@ -9592,6 +9644,7 @@ cmdline_parse_token_string_t cmd_dump_dump = TOKEN_STRING_INITIALIZER(struct cmd_dump_result, dump, "dump_physmem#" "dump_memzone#" + "dump_socket_mem#" "dump_struct_sizes#" "dump_ring#" "dump_mempool#" diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst b/doc/guides/testpmd_app_ug/testpmd_funcs.rst index 5bb12a51ba..dcee5de455 100644 --- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst +++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst @@ -539,6 +539,12 @@ Dumps the layout of all memory zones:: testpmd> dump_memzone +dump socket memory +~~~~~~~~~~~~~~~~~~ + +Dumps the memory usage of all sockets:: + + testpmd> dump_socket_mem dump struct size ~~~~~~~~~~~~~~~~ -- 2.20.1