On 4/3/2020 7:53 AM, Xueming Li wrote:
> Introduce new command to dump memory statistics of each socket,
> summary, also show changes since last call.
> 
> Usage:
>     dump_socket
> 
> Signed-off-by: Xueming Li <xuemi...@mellanox.com>
> ---
>  app/test-pmd/cmdline.c                      | 52 
> +++++++++++++++++++++++++++++
>  doc/guides/testpmd_app_ug/testpmd_funcs.rst |  6 ++++
>  2 files changed, 58 insertions(+)
> 
> diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
> index 274e391..9bb64bb 100644
> --- a/app/test-pmd/cmdline.c
> +++ b/app/test-pmd/cmdline.c
> @@ -9568,6 +9568,55 @@ 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;
> +     int64_t total = 0;
> +     int64_t alloc = 0;
> +     int64_t free = 0;
> +     unsigned int n_alloc = 0;
> +     unsigned int n_free = 0;
> +     static int64_t last_allocs;
> +     static int64_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,
> +                     socket_stats.heap_totalsz_bytes / 1.0e6,
> +                     socket_stats.heap_allocsz_bytes / 1.0e6,
> +                     (double)socket_stats.heap_allocsz_bytes * 100 /
> +                     (double)socket_stats.heap_totalsz_bytes,
> +                     socket_stats.heap_freesz_bytes / 1.0e6,
> +                     socket_stats.alloc_count,
> +                     socket_stats.free_count);

This gives an output like [1], can you please divide to (1024*1024) to convert
byte to Mb, than it can give more clear numbers.


[1]
Socket 0: size(M) total: 2933.915648 alloc: 1871.655424(63.794%) free:
1062.260224      count alloc: 2137 free: 36
Socket 1: size(M) total: 2923.429888 alloc: 1863.400064(63.740%) free:
1060.029824      count alloc: 177  free: 1
Total   : size(M) total: 5857.345536 alloc: 3735.055488(63.767%) free:
2122.290048      count alloc: 2314 free: 37
Memory total change: 0.000000(M), allocation change: 0.000000(M)


> +     }
> +     fprintf(f,
> +             "Total   : size(M) total: %.6lf alloc: %.6lf(%.3lf%%) free: 
> %.6lf \tcount alloc: %-4u free: %u\n",
> +             total / 1.0e6, alloc / 1.0e6,
> +             (double)alloc * 100 / (double)total, free / 1.0e6,
> +             n_alloc, n_free);
> +     if (last_allocs)
> +             fprintf(stdout, "Memory total change: %.6lf(M), allocation 
> change: %.6lf(M)\n",
> +                     (total - last_total) / 1.0e6,
> +                     (alloc - last_allocs) / 1.0e6);
> +     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 +9625,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"))
> +             dump_socket_mem(stdout);
>       else if (!strcmp(res->dump, "dump_memzone"))
>               rte_memzone_dump(stdout);
>       else if (!strcmp(res->dump, "dump_malloc")) {
> @@ -9604,6 +9655,7 @@ static void cmd_dump_parsed(void *parsed_result,
>       TOKEN_STRING_INITIALIZER(struct cmd_dump_result, dump,
>               "dump_physmem#"
>               "dump_memzone#"
> +             "dump_socket#"
>               "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..d248337 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

'dump_socket' looks like it will list the socket information, what do you think
changing the command name to 'dump_socket_mem' to clarify it will dump the
memory information?

>  
>  dump struct size
>  ~~~~~~~~~~~~~~~~
> 

Reply via email to