New CLI commands to manipulate malloc tracking log:

dump_malloc start <n>: start malloc tracking with number of buffers
dump_malloc dump <n>:  dump mmalloc tracking log with detail level
dump_malloc stop:      stop malloc tracking

Signed-off-by: Xueming Li <xuemi...@mellanox.com>
---
 app/test-pmd/cmdline.c                      | 60 ++++++++++++++++++++++++++++-
 doc/guides/testpmd_app_ug/testpmd_funcs.rst | 15 ++++++++
 2 files changed, 74 insertions(+), 1 deletion(-)

diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
index 863b567..0490823 100644
--- a/app/test-pmd/cmdline.c
+++ b/app/test-pmd/cmdline.c
@@ -9554,6 +9554,8 @@ struct cmd_rm_mirror_rule_result {
 
 struct cmd_dump_result {
        cmdline_fixed_string_t dump;
+       cmdline_fixed_string_t cmd;
+       uint32_t val;
 };
 
 static void
@@ -9628,6 +9630,16 @@ static void cmd_dump_parsed(void *parsed_result,
                dump_socket_mem(stdout);
        else if (!strcmp(res->dump, "dump_memzone"))
                rte_memzone_dump(stdout);
+       else if (!strcmp(res->dump, "dump_malloc")) {
+               if (!strcmp(res->cmd, "start")) {
+                       if (rte_malloc_log_init(res->val))
+                               fprintf(stdout, "Failed to start logging\n");
+               } else if (!strcmp(res->cmd, "dump")) {
+                       rte_malloc_log_dump(stdout, res->val);
+               } else if (!strcmp(res->cmd, "stop")) {
+                       rte_malloc_log_stop();
+               }
+       }
        else if (!strcmp(res->dump, "dump_struct_sizes"))
                dump_struct_sizes();
        else if (!strcmp(res->dump, "dump_ring"))
@@ -9650,7 +9662,50 @@ static void cmd_dump_parsed(void *parsed_result,
                "dump_mempool#"
                "dump_devargs#"
                "dump_log_types");
-
+cmdline_parse_token_string_t cmd_dump_malloc =
+       TOKEN_STRING_INITIALIZER(struct cmd_dump_result, dump,
+               "dump_malloc");
+cmdline_parse_token_string_t cmd_dump_malloc_cmd_start =
+       TOKEN_STRING_INITIALIZER(struct cmd_dump_result, cmd,
+               "start");
+cmdline_parse_token_string_t cmd_dump_malloc_cmd_dump =
+       TOKEN_STRING_INITIALIZER(struct cmd_dump_result, cmd,
+               "dump");
+cmdline_parse_token_string_t cmd_dump_malloc_cmd_stop =
+       TOKEN_STRING_INITIALIZER(struct cmd_dump_result, cmd,
+               "stop");
+cmdline_parse_token_num_t cmd_dump_val =
+       TOKEN_NUM_INITIALIZER(struct cmd_dump_result, val, UINT32);
+
+cmdline_parse_inst_t cmd_dump_malloc_start = {
+       .f = cmd_dump_parsed,  /* function to call */
+       .help_str = "Start rte_malloc tracking log with <count> buffer entries",
+       .tokens = {        /* token list, NULL terminated */
+               (void *)&cmd_dump_malloc,
+               (void *)&cmd_dump_malloc_cmd_start,
+               (void *)&cmd_dump_val,
+               NULL,
+       },
+};
+cmdline_parse_inst_t cmd_dump_malloc_dump = {
+       .f = cmd_dump_parsed,  /* function to call */
+       .help_str = "Dump rte_malloc tracking log with <level>, 0:summary, 
1:leaks, 2: all",
+       .tokens = {        /* token list, NULL terminated */
+               (void *)&cmd_dump_malloc,
+               (void *)&cmd_dump_malloc_cmd_dump,
+               (void *)&cmd_dump_val,
+               NULL,
+       },
+};
+cmdline_parse_inst_t cmd_dump_malloc_stop = {
+       .f = cmd_dump_parsed,  /* function to call */
+       .help_str = "Stop rte_malloc tracking log",
+       .tokens = {        /* token list, NULL terminated */
+               (void *)&cmd_dump_malloc,
+               (void *)&cmd_dump_malloc_cmd_stop,
+               NULL,
+       },
+};
 cmdline_parse_inst_t cmd_dump = {
        .f = cmd_dump_parsed,  /* function to call */
        .data = NULL,      /* 2nd arg of func */
@@ -19505,6 +19560,9 @@ struct cmd_showport_macs_result {
        (cmdline_parse_inst_t *)&cmd_showport_rss_hash_key,
        (cmdline_parse_inst_t *)&cmd_config_rss_hash_key,
        (cmdline_parse_inst_t *)&cmd_dump,
+       (cmdline_parse_inst_t *)&cmd_dump_malloc_start,
+       (cmdline_parse_inst_t *)&cmd_dump_malloc_dump,
+       (cmdline_parse_inst_t *)&cmd_dump_malloc_stop,
        (cmdline_parse_inst_t *)&cmd_dump_one,
        (cmdline_parse_inst_t *)&cmd_ethertype_filter,
        (cmdline_parse_inst_t *)&cmd_syn_filter,
diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst 
b/doc/guides/testpmd_app_ug/testpmd_funcs.rst
index dcee5de..1c55f23 100644
--- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst
+++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst
@@ -567,6 +567,21 @@ Dumps the statistics of all or specific memory pool::
 
    testpmd> dump_mempool [mempool_name]
 
+dump malloc
+~~~~~~~~~~~~
+
+Start rte_malloc and rte_free tracking with number of buffers::
+
+   testpmd> dump_malloc start <count>
+
+Dump tracking result with different level, 0:summary, 1:leaks, 2: all::
+
+   testpmd> dump_malloc dump <level>
+
+Stop tracking::
+
+   testpmd> dump_malloc stop
+
 dump devargs
 ~~~~~~~~~~~~
 
-- 
1.8.3.1

Reply via email to