DPDK patches and discussions
 help / color / mirror / Atom feed
* [dpdk-dev] [PATCH] app/testpmd: add memory dump command
@ 2020-04-02 13:03 Xueming Li
  2020-04-02 15:55 ` Ferruh Yigit
                   ` (4 more replies)
  0 siblings, 5 replies; 12+ messages in thread
From: Xueming Li @ 2020-04-02 13:03 UTC (permalink / raw)
  To: Wenzhuo Lu, Jingjing Wu, Bernard Iremonger, Anatoly Burakov
  Cc: dev, Asaf Penso

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 <xuemingl@mellanox.com>
---
 app/test-pmd/cmdline.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 52 insertions(+)

diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
index a037a55..27545ef 100644
--- a/app/test-pmd/cmdline.c
+++ b/app/test-pmd/cmdline.c
@@ -9566,6 +9566,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);
+	}
+	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)
@@ -9574,6 +9623,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_struct_sizes"))
@@ -9592,6 +9643,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#"
-- 
1.8.3.1


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [dpdk-dev] [PATCH] app/testpmd: add memory dump command
  2020-04-02 13:03 [dpdk-dev] [PATCH] app/testpmd: add memory dump command Xueming Li
@ 2020-04-02 15:55 ` Ferruh Yigit
  2020-04-03  6:53 ` [dpdk-dev] [PATCH v1] " Xueming Li
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 12+ messages in thread
From: Ferruh Yigit @ 2020-04-02 15:55 UTC (permalink / raw)
  To: Xueming Li, Wenzhuo Lu, Jingjing Wu, Bernard Iremonger, Anatoly Burakov
  Cc: dev, Asaf Penso

On 4/2/2020 2:03 PM, Xueming Li wrote:
> Introduce new command to dump memory statistics of each socket,
> summary, also show changes since last call.
> 
> Usage:
>     dump_socket

Can you please update documentation for this new command?

> 
> Signed-off-by: Xueming Li <xuemingl@mellanox.com>

<...>


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [dpdk-dev] [PATCH v1] app/testpmd: add memory dump command
  2020-04-02 13:03 [dpdk-dev] [PATCH] app/testpmd: add memory dump command Xueming Li
  2020-04-02 15:55 ` Ferruh Yigit
@ 2020-04-03  6:53 ` Xueming Li
  2020-04-03  6:53 ` Xueming Li
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 12+ messages in thread
From: Xueming Li @ 2020-04-03  6:53 UTC (permalink / raw)
  To: Wenzhuo Lu, Jingjing Wu, Bernard Iremonger, Anatoly Burakov,
	Ferruh Yigit
  Cc: dev, Asaf Penso

v0: initial version
v1: update user guide

Xueming Li (1):
  app/testpmd: add memory dump command

 app/test-pmd/cmdline.c                      | 52 +++++++++++++++++++++++++++++
 doc/guides/testpmd_app_ug/testpmd_funcs.rst |  6 ++++
 2 files changed, 58 insertions(+)

-- 
1.8.3.1


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [dpdk-dev] [PATCH v1] app/testpmd: add memory dump command
  2020-04-02 13:03 [dpdk-dev] [PATCH] app/testpmd: add memory dump command Xueming Li
  2020-04-02 15:55 ` Ferruh Yigit
  2020-04-03  6:53 ` [dpdk-dev] [PATCH v1] " Xueming Li
@ 2020-04-03  6:53 ` Xueming Li
  2020-04-03 13:29   ` Ferruh Yigit
  2020-04-05  2:49 ` [dpdk-dev] [PATCH v2] " Xueming Li
  2020-04-05  2:49 ` Xueming Li
  4 siblings, 1 reply; 12+ messages in thread
From: Xueming Li @ 2020-04-03  6:53 UTC (permalink / raw)
  To: Wenzhuo Lu, Jingjing Wu, Bernard Iremonger, Anatoly Burakov,
	Ferruh Yigit
  Cc: dev, Asaf Penso

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 <xuemingl@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);
+	}
+	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 struct size
 ~~~~~~~~~~~~~~~~
-- 
1.8.3.1


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [dpdk-dev] [PATCH v1] app/testpmd: add memory dump command
  2020-04-03  6:53 ` Xueming Li
@ 2020-04-03 13:29   ` Ferruh Yigit
  2020-04-03 16:04     ` Stephen Hemminger
  2020-04-03 16:08     ` Stephen Hemminger
  0 siblings, 2 replies; 12+ messages in thread
From: Ferruh Yigit @ 2020-04-03 13:29 UTC (permalink / raw)
  To: Xueming Li, Wenzhuo Lu, Jingjing Wu, Bernard Iremonger, Anatoly Burakov
  Cc: dev, Asaf Penso

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 <xuemingl@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
>  ~~~~~~~~~~~~~~~~
> 


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [dpdk-dev] [PATCH v1] app/testpmd: add memory dump command
  2020-04-03 13:29   ` Ferruh Yigit
@ 2020-04-03 16:04     ` Stephen Hemminger
  2020-04-03 16:08     ` Stephen Hemminger
  1 sibling, 0 replies; 12+ messages in thread
From: Stephen Hemminger @ 2020-04-03 16:04 UTC (permalink / raw)
  To: Ferruh Yigit
  Cc: Xueming Li, Wenzhuo Lu, Jingjing Wu, Bernard Iremonger,
	Anatoly Burakov, dev, Asaf Penso

On Fri, 3 Apr 2020 14:29:06 +0100
Ferruh Yigit <ferruh.yigit@intel.com> wrote:

> > +	int64_t total = 0;
> > +	int64_t alloc = 0;
> > +	int64_t free = 0;

Should be unsigned (ie uint64_t)

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [dpdk-dev] [PATCH v1] app/testpmd: add memory dump command
  2020-04-03 13:29   ` Ferruh Yigit
  2020-04-03 16:04     ` Stephen Hemminger
@ 2020-04-03 16:08     ` Stephen Hemminger
  2020-04-03 16:34       ` Morten Brørup
  1 sibling, 1 reply; 12+ messages in thread
From: Stephen Hemminger @ 2020-04-03 16:08 UTC (permalink / raw)
  To: Ferruh Yigit
  Cc: Xueming Li, Wenzhuo Lu, Jingjing Wu, Bernard Iremonger,
	Anatoly Burakov, dev, Asaf Penso

On Fri, 3 Apr 2020 14:29:06 +0100
Ferruh Yigit <ferruh.yigit@intel.com> wrote:

> > +			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.

Agree, the standard is to use 1024*1024 for memory megabytes.
And 1000*1000 for bytes in networking.


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [dpdk-dev] [PATCH v1] app/testpmd: add memory dump command
  2020-04-03 16:08     ` Stephen Hemminger
@ 2020-04-03 16:34       ` Morten Brørup
  0 siblings, 0 replies; 12+ messages in thread
From: Morten Brørup @ 2020-04-03 16:34 UTC (permalink / raw)
  To: Stephen Hemminger, Ferruh Yigit
  Cc: Xueming Li, Wenzhuo Lu, Jingjing Wu, Bernard Iremonger,
	Anatoly Burakov, dev, Asaf Penso

> From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Stephen Hemminger
> Sent: Friday, April 3, 2020 6:09 PM
> 
> On Fri, 3 Apr 2020 14:29:06 +0100
> Ferruh Yigit <ferruh.yigit@intel.com> wrote:
> 
> > > +			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.
> 
> Agree, the standard is to use 1024*1024 for memory megabytes.

That was the old standard. It has been 1000*1000 so for a decade now.

1000000 is the internationally agreed standard for the MB (megabyte) unit. It has been adopted by all major standardization organs, and is the legally binding definition.

If you want to use 1024*1024, the correct unit is MiB (mebibyte). And in this case, it probably makes sense. Just use the correct MiB unit instead of the incorrect MB unit.

For further information, please also refer to:
https://en.wikipedia.org/wiki/Megabyte

> And 1000*1000 for bytes in networking.

Yes.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [dpdk-dev] [PATCH v2] app/testpmd: add memory dump command
  2020-04-02 13:03 [dpdk-dev] [PATCH] app/testpmd: add memory dump command Xueming Li
                   ` (2 preceding siblings ...)
  2020-04-03  6:53 ` Xueming Li
@ 2020-04-05  2:49 ` Xueming Li
  2020-04-05  2:49 ` Xueming Li
  4 siblings, 0 replies; 12+ messages in thread
From: Xueming Li @ 2020-04-05  2:49 UTC (permalink / raw)
  To: Wenzhuo Lu, Jingjing Wu, Bernard Iremonger, Anatoly Burakov,
	Ferruh Yigit, Stephen Hemminger
  Cc: dev, Asaf Penso

v0: initial version
v1: update user guide
v2: change CLI to "dump_socket_mem
    change memory unit MB caculation from 1e6 to 1024*1024

Xueming Li (1):
  app/testpmd: add memory dump command

 app/test-pmd/cmdline.c                      | 53 +++++++++++++++++++++++++++++
 doc/guides/testpmd_app_ug/testpmd_funcs.rst |  6 ++++
 2 files changed, 59 insertions(+)

-- 
1.8.3.1


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [dpdk-dev] [PATCH v2] app/testpmd: add memory dump command
  2020-04-02 13:03 [dpdk-dev] [PATCH] app/testpmd: add memory dump command Xueming Li
                   ` (3 preceding siblings ...)
  2020-04-05  2:49 ` [dpdk-dev] [PATCH v2] " Xueming Li
@ 2020-04-05  2:49 ` Xueming Li
  2020-04-07  9:21   ` Ferruh Yigit
  4 siblings, 1 reply; 12+ messages in thread
From: Xueming Li @ 2020-04-05  2:49 UTC (permalink / raw)
  To: Wenzhuo Lu, Jingjing Wu, Bernard Iremonger, Anatoly Burakov,
	Ferruh Yigit, Stephen Hemminger
  Cc: dev, Asaf Penso

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 <xuemingl@mellanox.com>
---
 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


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [dpdk-dev] [PATCH v2] app/testpmd: add memory dump command
  2020-04-05  2:49 ` Xueming Li
@ 2020-04-07  9:21   ` Ferruh Yigit
  2020-04-07 11:24     ` Xueming(Steven) Li
  0 siblings, 1 reply; 12+ messages in thread
From: Ferruh Yigit @ 2020-04-07  9:21 UTC (permalink / raw)
  To: Xueming Li, Wenzhuo Lu, Jingjing Wu, Bernard Iremonger,
	Anatoly Burakov, Stephen Hemminger
  Cc: dev, Asaf Penso

On 4/5/2020 3:49 AM, Xueming Li wrote:
> 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 <xuemingl@mellanox.com>

<...>

> @@ -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")) {

This "dump_malloc" is not in the upstream, which cause a conflict while merging
the patch, which is breaking our automated tests.
It is OK for now, but for later please rebase your patches on latest master.

> @@ -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
> +~~~~~~~~~~~~

Title fixed as "dump socket memory" while merging


Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
Applied to dpdk-next-net/master, thanks.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [dpdk-dev] [PATCH v2] app/testpmd: add memory dump command
  2020-04-07  9:21   ` Ferruh Yigit
@ 2020-04-07 11:24     ` Xueming(Steven) Li
  0 siblings, 0 replies; 12+ messages in thread
From: Xueming(Steven) Li @ 2020-04-07 11:24 UTC (permalink / raw)
  To: Ferruh Yigit, Wenzhuo Lu, Jingjing Wu, Bernard Iremonger,
	Anatoly Burakov, Stephen Hemminger
  Cc: dev, Asaf Penso

Hi Ferruh,

Thanks for your comments, noted.

> -----Original Message-----
> From: Ferruh Yigit <ferruh.yigit@intel.com>
> Sent: Tuesday, April 7, 2020 5:22 PM
> To: Xueming(Steven) Li <xuemingl@mellanox.com>; Wenzhuo Lu
> <wenzhuo.lu@intel.com>; Jingjing Wu <jingjing.wu@intel.com>; Bernard
> Iremonger <bernard.iremonger@intel.com>; Anatoly Burakov
> <anatoly.burakov@intel.com>; Stephen Hemminger
> <stephen@networkplumber.org>
> Cc: dev@dpdk.org; Asaf Penso <asafp@mellanox.com>
> Subject: Re: [dpdk-dev] [PATCH v2] app/testpmd: add memory dump
> command
> 
> On 4/5/2020 3:49 AM, Xueming Li wrote:
> > 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 <xuemingl@mellanox.com>
> 
> <...>
> 
> > @@ -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")) {
> 
> This "dump_malloc" is not in the upstream, which cause a conflict while
> merging the patch, which is breaking our automated tests.
> It is OK for now, but for later please rebase your patches on latest master.
> 
> > @@ -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
> > +~~~~~~~~~~~~
> 
> Title fixed as "dump socket memory" while merging
> 
> 
> Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com> Applied to dpdk-next-
> net/master, thanks.

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2020-04-07 11:24 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-04-02 13:03 [dpdk-dev] [PATCH] app/testpmd: add memory dump command Xueming Li
2020-04-02 15:55 ` Ferruh Yigit
2020-04-03  6:53 ` [dpdk-dev] [PATCH v1] " Xueming Li
2020-04-03  6:53 ` Xueming Li
2020-04-03 13:29   ` Ferruh Yigit
2020-04-03 16:04     ` Stephen Hemminger
2020-04-03 16:08     ` Stephen Hemminger
2020-04-03 16:34       ` Morten Brørup
2020-04-05  2:49 ` [dpdk-dev] [PATCH v2] " Xueming Li
2020-04-05  2:49 ` Xueming Li
2020-04-07  9:21   ` Ferruh Yigit
2020-04-07 11:24     ` Xueming(Steven) Li

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).