Commit e4dc8ed2 authored by Ryan Erickson's avatar Ryan Erickson Committed by Christopher Friedt
Browse files

logging: Add log mem shell command



Add log mem shell command to determine memory pool
usage of logging system.

Signed-off-by: default avatarRyan Erickson <ryan.erickson@lairdconnect.com>
parent b52ad8f3
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -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);


/**
 * @}
 */
+41 −22
Original line number Diff line number Diff line
@@ -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,10 +458,9 @@ 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).",
@@ -448,19 +469,17 @@ SHELL_STATIC_SUBCMD_SET_CREATE(sub_log_stat,
			   "'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, 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
);
	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);
+15 −0
Original line number Diff line number Diff line
@@ -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);
}