diff options
Diffstat (limited to 'src/vlib/node_cli.c')
-rw-r--r-- | src/vlib/node_cli.c | 51 |
1 files changed, 12 insertions, 39 deletions
diff --git a/src/vlib/node_cli.c b/src/vlib/node_cli.c index 8cf57948cc4..d0bdf5b9097 100644 --- a/src/vlib/node_cli.c +++ b/src/vlib/node_cli.c @@ -42,6 +42,7 @@ #include <fcntl.h> #include <vlib/vlib.h> #include <vlib/threads.h> +#include <vlib/stats/stats.h> #include <math.h> static int @@ -84,13 +85,11 @@ show_node_graph (vlib_main_t * vm, return 0; } -/* *INDENT-OFF* */ VLIB_CLI_COMMAND (show_node_graph_command, static) = { .path = "show vlib graph", .short_help = "Show packet processing node graph", .function = show_node_graph, }; -/* *INDENT-ON* */ static clib_error_t * show_node_graphviz (vlib_main_t * vm, @@ -310,7 +309,7 @@ show_node_graphviz (vlib_main_t * vm, /*? * Dump dot files data to draw a graph of all the nodes. * If the argument 'filter' is provided, only the active nodes (since the last - * "clear run" comand) are selected and they are scaled and colored according + * "clear run" command) are selected and they are scaled and colored according * to their utilization. You can choose to filter nodes that are called, * nodes that receive vectors or both (default). * The 'file' option allows to save data in a temp file. @@ -323,14 +322,12 @@ show_node_graphviz (vlib_main_t * vm, * @cliend * @cliexcmd{show vlib graphviz [filter][calls][vectors][file <filename>]} ?*/ -/* *INDENT-OFF* */ VLIB_CLI_COMMAND (show_node_graphviz_command, static) = { .path = "show vlib graphviz", .short_help = "Dump packet processing node graph as a graphviz dotfile", .function = show_node_graphviz, .is_mp_safe = 1, }; -/* *INDENT-ON* */ static u8 * format_vlib_node_state (u8 * s, va_list * va) @@ -465,13 +462,6 @@ format_vlib_node_stats (u8 * s, va_list * va) return s; } -f64 vlib_get_stat_segment_update_rate (void) __attribute__ ((weak)); -f64 -vlib_get_stat_segment_update_rate (void) -{ - return 1e70; -} - static clib_error_t * show_node_runtime (vlib_main_t * vm, unformat_input_t * input, vlib_cli_command_t * cmd) @@ -498,7 +488,6 @@ show_node_runtime (vlib_main_t * vm, uword i, j; f64 dt; u64 n_input, n_output, n_drop, n_punt; - u64 n_internal_vectors, n_internal_calls; u64 n_clocks, l, v, c, d; int brief = 1; int summary = 0; @@ -557,7 +546,6 @@ show_node_runtime (vlib_main_t * vm, vec_sort_with_function (nodes, node_cmp); n_input = n_output = n_drop = n_punt = n_clocks = 0; - n_internal_vectors = n_internal_calls = 0; for (i = 0; i < vec_len (nodes); i++) { n = nodes[i]; @@ -566,7 +554,6 @@ show_node_runtime (vlib_main_t * vm, n_clocks += l; v = n->stats_total.vectors - n->stats_last_clear.vectors; - c = n->stats_total.calls - n->stats_last_clear.calls; switch (n->type) { @@ -577,11 +564,6 @@ show_node_runtime (vlib_main_t * vm, n_output += (n->flags & VLIB_NODE_FLAG_IS_OUTPUT) ? v : 0; n_drop += (n->flags & VLIB_NODE_FLAG_IS_DROP) ? v : 0; n_punt += (n->flags & VLIB_NODE_FLAG_IS_PUNT) ? v : 0; - if (!(n->flags & VLIB_NODE_FLAG_IS_OUTPUT)) - { - n_internal_vectors += v; - n_internal_calls += c; - } if (n->flags & VLIB_NODE_FLAG_IS_HANDOFF) n_input += v; break; @@ -606,16 +588,14 @@ show_node_runtime (vlib_main_t * vm, } dt = time_now - nm->time_last_runtime_stats_clear; - vlib_cli_output - (vm, - "Time %.1f, %f sec internal node vector rate %.2f loops/sec %.2f\n" - " vector rates in %.4e, out %.4e, drop %.4e, punt %.4e", - dt, - vlib_get_stat_segment_update_rate (), - internal_node_vector_rates[j], - stat_vm->loops_per_second, - (f64) n_input / dt, - (f64) n_output / dt, (f64) n_drop / dt, (f64) n_punt / dt); + vlib_cli_output ( + vm, + "Time %.1f, %f sec internal node vector rate %.2f loops/sec %.2f\n" + " vector rates in %.4e, out %.4e, drop %.4e, punt %.4e", + dt, vlib_stats_get_segment_update_rate (), + internal_node_vector_rates[j], stat_vm->loops_per_second, + (f64) n_input / dt, (f64) n_output / dt, (f64) n_drop / dt, + (f64) n_punt / dt); if (summary == 0) { @@ -646,14 +626,12 @@ show_node_runtime (vlib_main_t * vm, return 0; } -/* *INDENT-OFF* */ VLIB_CLI_COMMAND (show_node_runtime_command, static) = { .path = "show runtime", .short_help = "Show packet processing runtime", .function = show_node_runtime, .is_mp_safe = 1, }; -/* *INDENT-ON* */ static clib_error_t * clear_node_runtime (vlib_main_t * vm, @@ -692,6 +670,8 @@ clear_node_runtime (vlib_main_t * vm, nm->time_last_runtime_stats_clear = vlib_time_now (vm); } + vlib_stats_set_timestamp (STAT_COUNTER_LAST_STATS_CLEAR, + vm->node_main.time_last_runtime_stats_clear); vlib_worker_thread_barrier_release (vm); vec_free (stat_vms); @@ -699,13 +679,11 @@ clear_node_runtime (vlib_main_t * vm, return 0; } -/* *INDENT-OFF* */ VLIB_CLI_COMMAND (clear_node_runtime_command, static) = { .path = "clear runtime", .short_help = "Clear packet processing runtime statistics", .function = clear_node_runtime, }; -/* *INDENT-ON* */ static clib_error_t * show_node (vlib_main_t * vm, unformat_input_t * input, @@ -825,7 +803,6 @@ show_node (vlib_main_t * vm, unformat_input_t * input, if (n->type == VLIB_NODE_TYPE_INTERNAL) { int j = 0; - /* *INDENT-OFF* */ clib_bitmap_foreach (i, n->prev_node_bitmap) { vlib_node_t *pn = vlib_get_node (vm, i); if (j++ % 3 == 0) @@ -834,7 +811,6 @@ show_node (vlib_main_t * vm, unformat_input_t * input, s = format (s, "%-35v", s2); vec_reset_length (s2); } - /* *INDENT-ON* */ if (vec_len (s) == 0) s = format (s, "\n none"); @@ -869,7 +845,6 @@ done: return 0; } -/* *INDENT-OFF* */ VLIB_CLI_COMMAND (show_node_command, static) = { .path = "show node", .short_help = "show node [index] <node-name | node-index>", @@ -922,13 +897,11 @@ done: return err; } -/* *INDENT-OFF* */ VLIB_CLI_COMMAND (set_node_fn_command, static) = { .path = "set node function", .short_help = "set node function <node-name> <variant-name>", .function = set_node_fn, }; -/* *INDENT-ON* */ /* Dummy function to get us linked in. */ void |