Skip to content

Commit e4dc8ed

Browse files
rerickson1cfriedt
authored andcommitted
logging: Add log mem shell command
Add log mem shell command to determine memory pool usage of logging system. Signed-off-by: Ryan Erickson <[email protected]>
1 parent b52ad8f commit e4dc8ed

File tree

3 files changed

+72
-22
lines changed

3 files changed

+72
-22
lines changed

include/logging/log_msg.h

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -467,6 +467,22 @@ struct log_msg *log_msg_create_n(const char *str,
467467
log_arg_t *args,
468468
uint32_t nargs);
469469

470+
/**
471+
* @brief Get number of free blocks from the log mem pool
472+
*/
473+
uint32_t log_msg_mem_get_free(void);
474+
475+
/**
476+
* @brief Get number of used blocks from the log mem pool
477+
*/
478+
uint32_t log_msg_mem_get_used(void);
479+
480+
/**
481+
* @brief Get max used blocks from the log mem pool
482+
*/
483+
uint32_t log_msg_mem_get_max_used(void);
484+
485+
470486
/**
471487
* @}
472488
*/

subsys/logging/log_cmds.c

Lines changed: 41 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -403,6 +403,28 @@ static int cmd_log_strdup_utilization(const struct shell *shell,
403403
return 0;
404404
}
405405

406+
static int cmd_log_memory_slabs(const struct shell *sh, size_t argc, char **argv)
407+
{
408+
uint32_t slabs_free;
409+
uint32_t used;
410+
uint32_t max;
411+
412+
slabs_free = log_msg_mem_get_free();
413+
used = log_msg_mem_get_used();
414+
415+
shell_print(sh, "Blocks used:\t%d", used);
416+
shell_print(sh, "Blocks free:\t%d", slabs_free);
417+
if (IS_ENABLED(CONFIG_MEM_SLAB_TRACE_MAX_UTILIZATION)) {
418+
max = log_msg_mem_get_max_used();
419+
shell_print(sh, "Blocks max:\t%d", max);
420+
} else {
421+
shell_print(
422+
sh,
423+
"Enable CONFIG_MEM_SLAB_TRACE_MAX_UTILIZATION to get max memory utilization");
424+
}
425+
426+
return 0;
427+
}
406428

407429
SHELL_STATIC_SUBCMD_SET_CREATE(sub_log_backend,
408430
SHELL_CMD_ARG(disable, &dsub_module_name,
@@ -436,31 +458,28 @@ static void backend_name_get(size_t idx, struct shell_static_entry *entry)
436458

437459
SHELL_DYNAMIC_CMD_CREATE(dsub_backend_name_dynamic, backend_name_get);
438460

439-
440-
SHELL_STATIC_SUBCMD_SET_CREATE(sub_log_stat,
441-
SHELL_CMD(backend, &dsub_backend_name_dynamic,
442-
"Logger backends commands.", NULL),
461+
SHELL_STATIC_SUBCMD_SET_CREATE(
462+
sub_log_stat,
463+
SHELL_CMD(backend, &dsub_backend_name_dynamic, "Logger backends commands.", NULL),
443464
SHELL_COND_CMD_ARG(CONFIG_SHELL_LOG_BACKEND, disable, &dsub_module_name,
444-
"'log disable <module_0> .. <module_n>' disables logs in specified "
445-
"modules (all if no modules specified).",
446-
cmd_log_self_disable, 1, 255),
465+
"'log disable <module_0> .. <module_n>' disables logs in specified "
466+
"modules (all if no modules specified).",
467+
cmd_log_self_disable, 1, 255),
447468
SHELL_COND_CMD_ARG(CONFIG_SHELL_LOG_BACKEND, enable, &dsub_severity_lvl,
448-
"'log enable <level> <module_0> ... <module_n>' enables logs up to"
449-
" given level in specified modules (all if no modules specified).",
450-
cmd_log_self_enable, 2, 255),
451-
SHELL_COND_CMD(CONFIG_SHELL_LOG_BACKEND, go, NULL, "Resume logging",
452-
cmd_log_self_go),
453-
SHELL_COND_CMD(CONFIG_SHELL_LOG_BACKEND, halt, NULL, "Halt logging",
454-
cmd_log_self_halt),
455-
SHELL_CMD_ARG(list_backends, NULL, "Lists logger backends.",
456-
cmd_log_backends_list, 1, 0),
469+
"'log enable <level> <module_0> ... <module_n>' enables logs up to"
470+
" given level in specified modules (all if no modules specified).",
471+
cmd_log_self_enable, 2, 255),
472+
SHELL_COND_CMD(CONFIG_SHELL_LOG_BACKEND, go, NULL, "Resume logging", cmd_log_self_go),
473+
SHELL_COND_CMD(CONFIG_SHELL_LOG_BACKEND, halt, NULL, "Halt logging", cmd_log_self_halt),
474+
SHELL_CMD_ARG(list_backends, NULL, "Lists logger backends.", cmd_log_backends_list, 1, 0),
457475
SHELL_COND_CMD(CONFIG_SHELL_LOG_BACKEND, status, NULL, "Logger status",
458-
cmd_log_self_status),
459-
SHELL_COND_CMD_ARG(CONFIG_LOG_STRDUP_POOL_PROFILING, strdup_utilization,
460-
NULL, "Get utilization of string duplicates pool",
461-
cmd_log_strdup_utilization, 1, 0),
462-
SHELL_SUBCMD_SET_END
463-
);
476+
cmd_log_self_status),
477+
SHELL_COND_CMD_ARG(CONFIG_LOG_STRDUP_POOL_PROFILING, strdup_utilization, NULL,
478+
"Get utilization of string duplicates pool", cmd_log_strdup_utilization,
479+
1, 0),
480+
SHELL_COND_CMD(CONFIG_LOG_MODE_DEFERRED, mem, NULL, "Logger memory usage",
481+
cmd_log_memory_slabs),
482+
SHELL_SUBCMD_SET_END);
464483

465484
SHELL_CMD_REGISTER(log, &sub_log_stat, "Commands for controlling logger",
466485
NULL);

subsys/logging/log_msg.c

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -483,3 +483,18 @@ void log_msg_hexdump_data_get(struct log_msg *msg,
483483
{
484484
log_msg_hexdump_data_op(msg, data, length, offset, false);
485485
}
486+
487+
uint32_t log_msg_mem_get_free(void)
488+
{
489+
return k_mem_slab_num_free_get(&log_msg_pool);
490+
}
491+
492+
uint32_t log_msg_mem_get_used(void)
493+
{
494+
return k_mem_slab_num_used_get(&log_msg_pool);
495+
}
496+
497+
uint32_t log_msg_mem_get_max_used(void)
498+
{
499+
return k_mem_slab_max_used_get(&log_msg_pool);
500+
}

0 commit comments

Comments
 (0)