From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id BBE51A0577; Sun, 5 Apr 2020 04:49:56 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 240831BE9B; Sun, 5 Apr 2020 04:49:51 +0200 (CEST) Received: from git-send-mailer.rdmz.labs.mlnx (unknown [37.142.13.130]) by dpdk.org (Postfix) with ESMTP id 44125FFA for ; Sun, 5 Apr 2020 04:49:48 +0200 (CEST) From: Xueming Li To: Wenzhuo Lu , Jingjing Wu , Bernard Iremonger , Anatoly Burakov , Ferruh Yigit , Stephen Hemminger Cc: dev@dpdk.org, Asaf Penso Date: Sun, 5 Apr 2020 02:49:22 +0000 Message-Id: <1586054962-5006-2-git-send-email-xuemingl@mellanox.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1586054962-5006-1-git-send-email-xuemingl@mellanox.com> References: <1586054962-5006-1-git-send-email-xuemingl@mellanox.com> In-Reply-To: <1585832629-4959-1-git-send-email-xuemingl@mellanox.com> References: <1585832629-4959-1-git-send-email-xuemingl@mellanox.com> Subject: [dpdk-dev] [PATCH v2] app/testpmd: add memory dump command X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" 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 --- 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 274e391..f7a230b 100644 --- a/app/test-pmd/cmdline.c +++ b/app/test-pmd/cmdline.c @@ -9568,6 +9568,56 @@ struct cmd_dump_result { #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, __attribute__((unused)) struct cmdline *cl, __attribute__((unused)) void *data) @@ -9576,6 +9626,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_malloc")) { @@ -9604,6 +9656,7 @@ static void cmd_dump_parsed(void *parsed_result, 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 1a9879f..0942ae5 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 +~~~~~~~~~~~~ + +Dumps the memory usage of all sockets:: + + testpmd> dump_socket_mem dump struct size ~~~~~~~~~~~~~~~~ -- 1.8.3.1