logging: Add log mem shell command
Add log mem shell command to determine memory pool usage of logging system. Signed-off-by: Ryan Erickson <ryan.erickson@lairdconnect.com>
This commit is contained in:
parent
b52ad8f3e1
commit
e4dc8ed26b
3 changed files with 72 additions and 22 deletions
|
@ -467,6 +467,22 @@ struct log_msg *log_msg_create_n(const char *str,
|
|||
log_arg_t *args,
|
||||
uint32_t nargs);
|
||||
|
||||
/**
|
||||
* @brief Get number of free blocks from the log mem pool
|
||||
*/
|
||||
uint32_t log_msg_mem_get_free(void);
|
||||
|
||||
/**
|
||||
* @brief Get number of used blocks from the log mem pool
|
||||
*/
|
||||
uint32_t log_msg_mem_get_used(void);
|
||||
|
||||
/**
|
||||
* @brief Get max used blocks from the log mem pool
|
||||
*/
|
||||
uint32_t log_msg_mem_get_max_used(void);
|
||||
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
|
|
@ -403,6 +403,28 @@ static int cmd_log_strdup_utilization(const struct shell *shell,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int cmd_log_memory_slabs(const struct shell *sh, size_t argc, char **argv)
|
||||
{
|
||||
uint32_t slabs_free;
|
||||
uint32_t used;
|
||||
uint32_t max;
|
||||
|
||||
slabs_free = log_msg_mem_get_free();
|
||||
used = log_msg_mem_get_used();
|
||||
|
||||
shell_print(sh, "Blocks used:\t%d", used);
|
||||
shell_print(sh, "Blocks free:\t%d", slabs_free);
|
||||
if (IS_ENABLED(CONFIG_MEM_SLAB_TRACE_MAX_UTILIZATION)) {
|
||||
max = log_msg_mem_get_max_used();
|
||||
shell_print(sh, "Blocks max:\t%d", max);
|
||||
} else {
|
||||
shell_print(
|
||||
sh,
|
||||
"Enable CONFIG_MEM_SLAB_TRACE_MAX_UTILIZATION to get max memory utilization");
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
SHELL_STATIC_SUBCMD_SET_CREATE(sub_log_backend,
|
||||
SHELL_CMD_ARG(disable, &dsub_module_name,
|
||||
|
@ -436,31 +458,28 @@ static void backend_name_get(size_t idx, struct shell_static_entry *entry)
|
|||
|
||||
SHELL_DYNAMIC_CMD_CREATE(dsub_backend_name_dynamic, backend_name_get);
|
||||
|
||||
|
||||
SHELL_STATIC_SUBCMD_SET_CREATE(sub_log_stat,
|
||||
SHELL_CMD(backend, &dsub_backend_name_dynamic,
|
||||
"Logger backends commands.", NULL),
|
||||
SHELL_STATIC_SUBCMD_SET_CREATE(
|
||||
sub_log_stat,
|
||||
SHELL_CMD(backend, &dsub_backend_name_dynamic, "Logger backends commands.", NULL),
|
||||
SHELL_COND_CMD_ARG(CONFIG_SHELL_LOG_BACKEND, disable, &dsub_module_name,
|
||||
"'log disable <module_0> .. <module_n>' disables logs in specified "
|
||||
"modules (all if no modules specified).",
|
||||
cmd_log_self_disable, 1, 255),
|
||||
"'log disable <module_0> .. <module_n>' disables logs in specified "
|
||||
"modules (all if no modules specified).",
|
||||
cmd_log_self_disable, 1, 255),
|
||||
SHELL_COND_CMD_ARG(CONFIG_SHELL_LOG_BACKEND, enable, &dsub_severity_lvl,
|
||||
"'log enable <level> <module_0> ... <module_n>' enables logs up to"
|
||||
" given level in specified modules (all if no modules specified).",
|
||||
cmd_log_self_enable, 2, 255),
|
||||
SHELL_COND_CMD(CONFIG_SHELL_LOG_BACKEND, go, NULL, "Resume logging",
|
||||
cmd_log_self_go),
|
||||
SHELL_COND_CMD(CONFIG_SHELL_LOG_BACKEND, halt, NULL, "Halt logging",
|
||||
cmd_log_self_halt),
|
||||
SHELL_CMD_ARG(list_backends, NULL, "Lists logger backends.",
|
||||
cmd_log_backends_list, 1, 0),
|
||||
"'log enable <level> <module_0> ... <module_n>' enables logs up to"
|
||||
" given level in specified modules (all if no modules specified).",
|
||||
cmd_log_self_enable, 2, 255),
|
||||
SHELL_COND_CMD(CONFIG_SHELL_LOG_BACKEND, go, NULL, "Resume logging", cmd_log_self_go),
|
||||
SHELL_COND_CMD(CONFIG_SHELL_LOG_BACKEND, halt, NULL, "Halt logging", cmd_log_self_halt),
|
||||
SHELL_CMD_ARG(list_backends, NULL, "Lists logger backends.", cmd_log_backends_list, 1, 0),
|
||||
SHELL_COND_CMD(CONFIG_SHELL_LOG_BACKEND, status, NULL, "Logger status",
|
||||
cmd_log_self_status),
|
||||
SHELL_COND_CMD_ARG(CONFIG_LOG_STRDUP_POOL_PROFILING, strdup_utilization,
|
||||
NULL, "Get utilization of string duplicates pool",
|
||||
cmd_log_strdup_utilization, 1, 0),
|
||||
SHELL_SUBCMD_SET_END
|
||||
);
|
||||
cmd_log_self_status),
|
||||
SHELL_COND_CMD_ARG(CONFIG_LOG_STRDUP_POOL_PROFILING, strdup_utilization, NULL,
|
||||
"Get utilization of string duplicates pool", cmd_log_strdup_utilization,
|
||||
1, 0),
|
||||
SHELL_COND_CMD(CONFIG_LOG_MODE_DEFERRED, mem, NULL, "Logger memory usage",
|
||||
cmd_log_memory_slabs),
|
||||
SHELL_SUBCMD_SET_END);
|
||||
|
||||
SHELL_CMD_REGISTER(log, &sub_log_stat, "Commands for controlling logger",
|
||||
NULL);
|
||||
|
|
|
@ -483,3 +483,18 @@ void log_msg_hexdump_data_get(struct log_msg *msg,
|
|||
{
|
||||
log_msg_hexdump_data_op(msg, data, length, offset, false);
|
||||
}
|
||||
|
||||
uint32_t log_msg_mem_get_free(void)
|
||||
{
|
||||
return k_mem_slab_num_free_get(&log_msg_pool);
|
||||
}
|
||||
|
||||
uint32_t log_msg_mem_get_used(void)
|
||||
{
|
||||
return k_mem_slab_num_used_get(&log_msg_pool);
|
||||
}
|
||||
|
||||
uint32_t log_msg_mem_get_max_used(void)
|
||||
{
|
||||
return k_mem_slab_max_used_get(&log_msg_pool);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue