dumps the mempool object history to console or to a file. The dump will contain: - Operation history for each mempool object - Summary and statistics about all mempool objects
testpmd> dump_mempool_objects_history testpmd> dump_mempool_objects_history <file_name> Signed-off-by: Shani Peretz <shper...@nvidia.com> --- app/test-pmd/cmdline.c | 59 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 58 insertions(+), 1 deletion(-) diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index 7b4e27eddf..3233b9d663 100644 --- a/app/test-pmd/cmdline.c +++ b/app/test-pmd/cmdline.c @@ -296,6 +296,9 @@ static void cmd_help_long_parsed(void *parsed_result, "dump_log_types\n" " Dumps the log level for all the dpdk modules\n\n" + "dump_mempool_objects_history\n" + " Dumps the mempool objects history\n\n" + "show port (port_id) speed_lanes capabilities" " Show speed lanes capabilities of a port.\n\n" ); @@ -9170,6 +9173,8 @@ static void cmd_dump_parsed(void *parsed_result, #endif else if (!strcmp(res->dump, "dump_log_types")) rte_log_dump(stdout); + else if (!strcmp(res->dump, "dump_mempool_objects_history")) + rte_mempool_objects_dump(stdout); } static cmdline_parse_token_string_t cmd_dump_dump = @@ -9191,7 +9196,8 @@ cmd_dump_init(void) #ifndef RTE_EXEC_ENV_WINDOWS "dump_trace#" #endif - "dump_log_types"; + "dump_log_types#" + "dump_mempool_objects_history"; } static cmdline_parse_inst_t cmd_dump = { @@ -9253,6 +9259,56 @@ static cmdline_parse_inst_t cmd_dump_one = { }, }; +/* Dump mempool objects history to file */ +struct cmd_dump_to_file_result { + cmdline_fixed_string_t dump; + cmdline_fixed_string_t file; +}; + +static void cmd_dump_to_file_parsed(void *parsed_result, struct cmdline *cl, + __rte_unused void *data) +{ + struct cmd_dump_to_file_result *res = parsed_result; + FILE *file = stdout; + char *file_name = res->file; + + if (strcmp(res->dump, "dump_mempool_objects_history")) { + cmdline_printf(cl, "Invalid dump type\n"); + return; + } + + if (file_name && strlen(file_name)) { + file = fopen(file_name, "w"); + if (!file) { + fprintf(stderr, "Failed to create file %s: %s\n", + file_name, strerror(errno)); + return; + } + } + rte_mempool_objects_dump(file); + printf("Flow dump finished\n"); + if (file_name && strlen(file_name)) + fclose(file); +} + +static cmdline_parse_token_string_t cmd_dump_to_file_dump = + TOKEN_STRING_INITIALIZER(struct cmd_dump_to_file_result, dump, + "dump_mempool_objects_history"); + +static cmdline_parse_token_string_t cmd_dump_to_file_file = + TOKEN_STRING_INITIALIZER(struct cmd_dump_to_file_result, file, NULL); + +static cmdline_parse_inst_t cmd_dump_to_file = { + .f = cmd_dump_to_file_parsed, /* function to call */ + .data = NULL, /* 2nd arg of func */ + .help_str = "dump_mempool_objects_history <file_name>: Dump mempool objects history to file", + .tokens = { /* token list, NULL terminated */ + (void *)&cmd_dump_to_file_dump, + (void *)&cmd_dump_to_file_file, + NULL, + }, +}; + /* *** Filters Control *** */ #define IPV4_ADDR_TO_UINT(ip_addr, ip) \ @@ -13992,6 +14048,7 @@ static cmdline_parse_ctx_t builtin_ctx[] = { &cmd_cleanup_txq_mbufs, &cmd_dump, &cmd_dump_one, + &cmd_dump_to_file, &cmd_flow, &cmd_show_port_meter_cap, &cmd_add_port_meter_profile_srtcm, -- 2.34.1