session: improve sh segment-manager cli
Type: improvement Signed-off-by: Florin Coras <fcoras@cisco.com> Change-Id: I5d669fcba609bcdb35103f57c45e0a270213d84a
This commit is contained in:

committed by
Damjan Marion

parent
4ab6ad136b
commit
a0024a66fe
@ -1536,22 +1536,15 @@ format_fifo_segment (u8 * s, va_list * args)
|
|||||||
f64 usage;
|
f64 usage;
|
||||||
fifo_segment_mem_status_t mem_st;
|
fifo_segment_mem_status_t mem_st;
|
||||||
|
|
||||||
indent = format_get_indent (s) + 2;
|
indent = format_get_indent (s);
|
||||||
|
|
||||||
if (fs == 0)
|
|
||||||
{
|
|
||||||
s = format (s, "%-20s%10s%15s%15s%15s%15s", "Name", "Type",
|
|
||||||
"HeapSize (M)", "ActiveFifos", "FreeFifos", "Address");
|
|
||||||
return s;
|
|
||||||
}
|
|
||||||
|
|
||||||
fifo_segment_info (fs, &address, &size);
|
fifo_segment_info (fs, &address, &size);
|
||||||
active_fifos = fifo_segment_num_fifos (fs);
|
active_fifos = fifo_segment_num_fifos (fs);
|
||||||
free_fifos = fifo_segment_num_free_fifos (fs);
|
free_fifos = fifo_segment_num_free_fifos (fs);
|
||||||
|
|
||||||
s = format (s, "%-20v%10U%15llu%15u%15u%15llx", ssvm_name (&fs->ssvm),
|
s = format (s, "%U%v type: %U size: %U active fifos: %u", format_white_space,
|
||||||
format_fifo_segment_type, fs, size >> 20ULL, active_fifos,
|
2, ssvm_name (&fs->ssvm), format_fifo_segment_type, fs,
|
||||||
free_fifos, address);
|
format_memory_size, size, active_fifos);
|
||||||
|
|
||||||
if (!verbose)
|
if (!verbose)
|
||||||
return s;
|
return s;
|
||||||
@ -1560,9 +1553,8 @@ format_fifo_segment (u8 * s, va_list * args)
|
|||||||
|
|
||||||
free_chunks = fifo_segment_num_free_chunks (fs, ~0);
|
free_chunks = fifo_segment_num_free_chunks (fs, ~0);
|
||||||
if (free_chunks)
|
if (free_chunks)
|
||||||
s =
|
s = format (s, "\n\n%UFree/Allocated chunks by size:\n",
|
||||||
format (s, "\n\n%UFree/Allocated chunks by size:\n", format_white_space,
|
format_white_space, indent + 2);
|
||||||
indent + 2);
|
|
||||||
else
|
else
|
||||||
s = format (s, "\n");
|
s = format (s, "\n");
|
||||||
|
|
||||||
|
@ -93,12 +93,14 @@ segment_manager_add_segment_inline (segment_manager_t *sm, uword segment_size,
|
|||||||
{
|
{
|
||||||
segment_manager_main_t *smm = &sm_main;
|
segment_manager_main_t *smm = &sm_main;
|
||||||
segment_manager_props_t *props;
|
segment_manager_props_t *props;
|
||||||
|
app_worker_t *app_wrk;
|
||||||
fifo_segment_t *fs;
|
fifo_segment_t *fs;
|
||||||
u32 fs_index = ~0;
|
u32 fs_index = ~0;
|
||||||
u8 *seg_name;
|
u8 *seg_name;
|
||||||
int rv;
|
int rv;
|
||||||
|
|
||||||
props = segment_manager_properties_get (sm);
|
props = segment_manager_properties_get (sm);
|
||||||
|
app_wrk = app_worker_get (sm->app_wrk_index);
|
||||||
|
|
||||||
/* Not configured for addition of new segments and not first */
|
/* Not configured for addition of new segments and not first */
|
||||||
if (!props->add_segment && !segment_size)
|
if (!props->add_segment && !segment_size)
|
||||||
@ -127,16 +129,8 @@ segment_manager_add_segment_inline (segment_manager_t *sm, uword segment_size,
|
|||||||
FIFO_SEGMENT_ALLOC_OVERHEAD;
|
FIFO_SEGMENT_ALLOC_OVERHEAD;
|
||||||
segment_size = round_pow2 (segment_size, clib_mem_get_page_size ());
|
segment_size = round_pow2 (segment_size, clib_mem_get_page_size ());
|
||||||
|
|
||||||
if (props->segment_type != SSVM_SEGMENT_PRIVATE)
|
seg_name = format (0, "seg-%u-%u-%u%c", app_wrk->app_index,
|
||||||
{
|
app_wrk->wrk_index, smm->seg_name_counter++, 0);
|
||||||
seg_name = format (0, "%d-%d%c", getpid (), smm->seg_name_counter++, 0);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
app_worker_t *app_wrk = app_worker_get (sm->app_wrk_index);
|
|
||||||
application_t *app = application_get (app_wrk->app_index);
|
|
||||||
seg_name = format (0, "%v segment%c", app->name, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
fs->ssvm.ssvm_size = segment_size;
|
fs->ssvm.ssvm_size = segment_size;
|
||||||
fs->ssvm.name = seg_name;
|
fs->ssvm.name = seg_name;
|
||||||
@ -1002,76 +996,110 @@ segment_manager_main_init (void)
|
|||||||
sm->default_low_watermark = 50;
|
sm->default_low_watermark = 50;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static u8 *
|
||||||
|
format_segment_manager (u8 *s, va_list *args)
|
||||||
|
{
|
||||||
|
segment_manager_t *sm = va_arg (*args, segment_manager_t *);
|
||||||
|
int verbose = va_arg (*args, int);
|
||||||
|
app_worker_t *app_wrk;
|
||||||
|
uword max_fifo_size;
|
||||||
|
fifo_segment_t *seg;
|
||||||
|
application_t *app;
|
||||||
|
u8 custom_logic;
|
||||||
|
|
||||||
|
app_wrk = app_worker_get_if_valid (sm->app_wrk_index);
|
||||||
|
app = app_wrk ? application_get (app_wrk->app_index) : 0;
|
||||||
|
custom_logic = (app && (app->cb_fns.fifo_tuning_callback)) ? 1 : 0;
|
||||||
|
max_fifo_size = sm->max_fifo_size;
|
||||||
|
|
||||||
|
s = format (s,
|
||||||
|
"[%u] %v app-wrk: %u segs: %u max-fifo-sz: %U "
|
||||||
|
"wmarks: %u %u %s flags: 0x%x",
|
||||||
|
segment_manager_index (sm), app->name, sm->app_wrk_index,
|
||||||
|
pool_elts (sm->segments), format_memory_size, max_fifo_size,
|
||||||
|
sm->high_watermark, sm->low_watermark,
|
||||||
|
custom_logic ? "custom-tuning" : "no-tuning", sm->flags);
|
||||||
|
|
||||||
|
if (!verbose || !pool_elts (sm->segments))
|
||||||
|
return s;
|
||||||
|
|
||||||
|
s = format (s, "\n\n");
|
||||||
|
|
||||||
|
segment_manager_foreach_segment_w_lock (
|
||||||
|
seg, sm, ({ s = format (s, " *%U", format_fifo_segment, seg, verbose); }));
|
||||||
|
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
static clib_error_t *
|
static clib_error_t *
|
||||||
segment_manager_show_fn (vlib_main_t * vm, unformat_input_t * input,
|
segment_manager_show_fn (vlib_main_t * vm, unformat_input_t * input,
|
||||||
vlib_cli_command_t * cmd)
|
vlib_cli_command_t * cmd)
|
||||||
{
|
{
|
||||||
|
unformat_input_t _line_input, *line_input = &_line_input;
|
||||||
segment_manager_main_t *smm = &sm_main;
|
segment_manager_main_t *smm = &sm_main;
|
||||||
u8 show_segments = 0, verbose = 0;
|
u8 show_segments = 0, verbose = 0;
|
||||||
uword max_fifo_size;
|
|
||||||
segment_manager_t *sm;
|
segment_manager_t *sm;
|
||||||
fifo_segment_t *seg;
|
u32 sm_index = ~0;
|
||||||
app_worker_t *app_wrk;
|
|
||||||
application_t *app;
|
|
||||||
u8 custom_logic;
|
|
||||||
|
|
||||||
while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
|
if (!unformat_user (input, unformat_line_input, line_input))
|
||||||
{
|
{
|
||||||
if (unformat (input, "segments"))
|
vlib_cli_output (vm, "%d segment managers allocated",
|
||||||
show_segments = 1;
|
pool_elts (smm->segment_managers));
|
||||||
else if (unformat (input, "verbose"))
|
return 0;
|
||||||
verbose = 1;
|
|
||||||
else
|
|
||||||
return clib_error_return (0, "unknown input `%U'",
|
|
||||||
format_unformat_error, input);
|
|
||||||
}
|
}
|
||||||
vlib_cli_output (vm, "%d segment managers allocated",
|
|
||||||
pool_elts (smm->segment_managers));
|
while (unformat_check_input (line_input) != UNFORMAT_END_OF_INPUT)
|
||||||
if (verbose && pool_elts (smm->segment_managers))
|
|
||||||
{
|
{
|
||||||
vlib_cli_output (vm, "%-6s%=10s%=10s%=13s%=11s%=11s%=12s",
|
if (unformat (line_input, "segments"))
|
||||||
"Index", "AppIndex", "Segments", "MaxFifoSize",
|
show_segments = 1;
|
||||||
"HighWater", "LowWater", "FifoTuning");
|
else if (unformat (line_input, "verbose"))
|
||||||
|
verbose = 1;
|
||||||
|
else if (unformat (line_input, "index %u", &sm_index))
|
||||||
|
;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
vlib_cli_output (vm, "unknown input [%U]", format_unformat_error,
|
||||||
|
line_input);
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* *INDENT-OFF* */
|
if (!pool_elts (smm->segment_managers))
|
||||||
|
goto done;
|
||||||
|
|
||||||
|
if (sm_index != ~0)
|
||||||
|
{
|
||||||
|
sm = segment_manager_get_if_valid (sm_index);
|
||||||
|
if (!sm)
|
||||||
|
{
|
||||||
|
vlib_cli_output (vm, "segment manager %u not allocated", sm_index);
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
vlib_cli_output (vm, "%U", format_segment_manager, sm, 1 /* verbose */);
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (verbose || show_segments)
|
||||||
|
{
|
||||||
pool_foreach (sm, smm->segment_managers) {
|
pool_foreach (sm, smm->segment_managers) {
|
||||||
app_wrk = app_worker_get_if_valid (sm->app_wrk_index);
|
vlib_cli_output (vm, "%U", format_segment_manager, sm,
|
||||||
app = app_wrk ? application_get (app_wrk->app_index) : 0;
|
show_segments);
|
||||||
custom_logic = (app && (app->cb_fns.fifo_tuning_callback)) ? 1 : 0;
|
|
||||||
max_fifo_size = sm->max_fifo_size;
|
|
||||||
|
|
||||||
vlib_cli_output (vm, "%-6d%=10d%=10d%=13U%=11d%=11d%=12s",
|
|
||||||
segment_manager_index (sm),
|
|
||||||
sm->app_wrk_index, pool_elts (sm->segments),
|
|
||||||
format_memory_size, max_fifo_size,
|
|
||||||
sm->high_watermark, sm->low_watermark,
|
|
||||||
custom_logic ? "custom" : "none");
|
|
||||||
}
|
}
|
||||||
/* *INDENT-ON* */
|
|
||||||
|
|
||||||
vlib_cli_output (vm, "\n");
|
vlib_cli_output (vm, "\n");
|
||||||
}
|
}
|
||||||
if (show_segments)
|
|
||||||
{
|
|
||||||
vlib_cli_output (vm, "%U", format_fifo_segment, 0, verbose);
|
|
||||||
|
|
||||||
/* *INDENT-OFF* */
|
done:
|
||||||
pool_foreach (sm, smm->segment_managers) {
|
|
||||||
segment_manager_foreach_segment_w_lock (seg, sm, ({
|
unformat_free (line_input);
|
||||||
vlib_cli_output (vm, "%U", format_fifo_segment, seg, verbose);
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
/* *INDENT-ON* */
|
|
||||||
|
|
||||||
}
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* *INDENT-OFF* */
|
/* *INDENT-OFF* */
|
||||||
VLIB_CLI_COMMAND (segment_manager_show_command, static) =
|
VLIB_CLI_COMMAND (segment_manager_show_command, static) = {
|
||||||
{
|
|
||||||
.path = "show segment-manager",
|
.path = "show segment-manager",
|
||||||
.short_help = "show segment-manager [segments][verbose]",
|
.short_help = "show segment-manager [segments][verbose][index <nn>]",
|
||||||
.function = segment_manager_show_fn,
|
.function = segment_manager_show_fn,
|
||||||
};
|
};
|
||||||
/* *INDENT-ON* */
|
/* *INDENT-ON* */
|
||||||
|
Reference in New Issue
Block a user