Merge pull request #15106 from opensourcerouting/fix/rename_thread_cli

vtysh: Add `show event ...` commands
This commit is contained in:
Donald Sharp 2024-01-08 13:51:36 -05:00 committed by GitHub
commit 956b6153fe
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 89 additions and 59 deletions

View File

@ -87,7 +87,7 @@ are given by integer macros in :file:`frrevent.h` and are:
``EVENT_EXECUTE`` ``EVENT_EXECUTE``
Just before a task is run its type is changed to this. This is used to show Just before a task is run its type is changed to this. This is used to show
``X`` as the type in the output of :clicmd:`show thread cpu`. ``X`` as the type in the output of :clicmd:`show event cpu`.
The programmer never has to work with these types explicitly. Each type of task The programmer never has to work with these types explicitly. Each type of task
is created and queued via special-purpose functions (actually macros, but is created and queued via special-purpose functions (actually macros, but
@ -238,16 +238,16 @@ proceeding.
In addition, the existing commands to show statistics and other information for In addition, the existing commands to show statistics and other information for
tasks within the event driven model have been expanded to handle multiple tasks within the event driven model have been expanded to handle multiple
pthreads; running :clicmd:`show thread cpu` will display the usual event pthreads; running :clicmd:`show event cpu` will display the usual event
breakdown, but it will do so for each pthread running in the program. For breakdown, but it will do so for each pthread running in the program. For
example, :ref:`bgpd` runs a dedicated I/O pthread and shows the following example, :ref:`bgpd` runs a dedicated I/O pthread and shows the following
output for :clicmd:`show thread cpu`: output for :clicmd:`show event cpu`:
:: ::
frr# show thread cpu frr# show event cpu
Thread statistics for bgpd: Event statistics for bgpd:
Showing statistics for pthread main Showing statistics for pthread main
------------------------------------ ------------------------------------

View File

@ -673,20 +673,20 @@ Terminal Mode Commands
.. _common-show-commands: .. _common-show-commands:
.. clicmd:: show thread cpu [r|w|t|e|x] .. clicmd:: show event cpu [r|w|t|e|x]
This command displays system run statistics for all the different event This command displays system run statistics for all the different event
types. If no options is specified all different run types are displayed types. If no options is specified all different run types are displayed
together. Additionally you can ask to look at (r)ead, (w)rite, (t)imer, together. Additionally you can ask to look at (r)ead, (w)rite, (t)imer,
(e)vent and e(x)ecute thread event types. (e)vent and e(x)ecute thread event types.
.. clicmd:: show thread poll .. clicmd:: show event poll
This command displays FRR's poll data. It allows a glimpse into how This command displays FRR's poll data. It allows a glimpse into how
we are setting each individual fd for the poll command at that point we are setting each individual fd for the poll command at that point
in time. in time.
.. clicmd:: show thread timers .. clicmd:: show event timers
This command displays FRR's timer data for timers that will pop in This command displays FRR's timer data for timers that will pop in
the future. the future.

View File

@ -302,13 +302,16 @@ static uint8_t parse_filter(const char *filterstr)
return filter; return filter;
} }
DEFUN_NOSH (show_thread_cpu, #if CONFDATE > 20240707
show_thread_cpu_cmd, CPP_NOTICE("Remove `show thread ...` commands")
"show thread cpu [FILTER]", #endif
SHOW_STR DEFUN_NOSH (show_event_cpu,
"Thread information\n" show_event_cpu_cmd,
"Thread CPU usage\n" "show event cpu [FILTER]",
"Display filter (rwtex)\n") SHOW_STR
"Event information\n"
"Event CPU usage\n"
"Display filter (rwtexb)\n")
{ {
uint8_t filter = (uint8_t)-1U; uint8_t filter = (uint8_t)-1U;
int idx = 0; int idx = 0;
@ -327,6 +330,14 @@ DEFUN_NOSH (show_thread_cpu,
return CMD_SUCCESS; return CMD_SUCCESS;
} }
ALIAS(show_event_cpu,
show_thread_cpu_cmd,
"show thread cpu [FILTER]",
SHOW_STR
"Thread information\n"
"Thread CPU usage\n"
"Display filter (rwtex)\n")
DEFPY (service_cputime_stats, DEFPY (service_cputime_stats,
service_cputime_stats_cmd, service_cputime_stats_cmd,
"[no] service cputime-stats", "[no] service cputime-stats",
@ -368,7 +379,7 @@ DEFPY (service_walltime_warning,
return CMD_SUCCESS; return CMD_SUCCESS;
} }
static void show_thread_poll_helper(struct vty *vty, struct event_loop *m) static void show_event_poll_helper(struct vty *vty, struct event_loop *m)
{ {
const char *name = m->name ? m->name : "main"; const char *name = m->name ? m->name : "main";
char underline[strlen(name) + 1]; char underline[strlen(name) + 1];
@ -409,24 +420,30 @@ static void show_thread_poll_helper(struct vty *vty, struct event_loop *m)
} }
} }
DEFUN_NOSH (show_thread_poll, DEFUN_NOSH (show_event_poll,
show_thread_poll_cmd, show_event_poll_cmd,
"show thread poll", "show event poll",
SHOW_STR SHOW_STR
"Thread information\n" "Event information\n"
"Show poll FD's and information\n") "Event Poll Information\n")
{ {
struct listnode *node; struct listnode *node;
struct event_loop *m; struct event_loop *m;
frr_with_mutex (&masters_mtx) { frr_with_mutex (&masters_mtx) {
for (ALL_LIST_ELEMENTS_RO(masters, node, m)) for (ALL_LIST_ELEMENTS_RO(masters, node, m))
show_thread_poll_helper(vty, m); show_event_poll_helper(vty, m);
} }
return CMD_SUCCESS; return CMD_SUCCESS;
} }
ALIAS(show_event_poll,
show_thread_poll_cmd,
"show thread poll",
SHOW_STR
"Thread information\n"
"Show poll FD's and information\n")
DEFUN (clear_thread_cpu, DEFUN (clear_thread_cpu,
clear_thread_cpu_cmd, clear_thread_cpu_cmd,
@ -453,7 +470,7 @@ DEFUN (clear_thread_cpu,
return CMD_SUCCESS; return CMD_SUCCESS;
} }
static void show_thread_timers_helper(struct vty *vty, struct event_loop *m) static void show_event_timers_helper(struct vty *vty, struct event_loop *m)
{ {
const char *name = m->name ? m->name : "main"; const char *name = m->name ? m->name : "main";
char underline[strlen(name) + 1]; char underline[strlen(name) + 1];
@ -470,28 +487,37 @@ static void show_thread_timers_helper(struct vty *vty, struct event_loop *m)
} }
} }
DEFPY_NOSH (show_thread_timers, DEFPY_NOSH (show_event_timers,
show_thread_timers_cmd, show_event_timers_cmd,
"show thread timers", "show event timers",
SHOW_STR SHOW_STR
"Thread information\n" "Event information\n"
"Show all timers and how long they have in the system\n") "Show all timers and how long they have in the system\n")
{ {
struct listnode *node; struct listnode *node;
struct event_loop *m; struct event_loop *m;
frr_with_mutex (&masters_mtx) { frr_with_mutex (&masters_mtx) {
for (ALL_LIST_ELEMENTS_RO(masters, node, m)) for (ALL_LIST_ELEMENTS_RO(masters, node, m))
show_thread_timers_helper(vty, m); show_event_timers_helper(vty, m);
} }
return CMD_SUCCESS; return CMD_SUCCESS;
} }
ALIAS(show_event_timers,
show_thread_timers_cmd,
"show thread timers",
SHOW_STR
"Thread information\n"
"Show all timers and how long they have in the system\n")
void event_cmd_init(void) void event_cmd_init(void)
{ {
install_element(VIEW_NODE, &show_thread_cpu_cmd); install_element(VIEW_NODE, &show_thread_cpu_cmd);
install_element(VIEW_NODE, &show_event_cpu_cmd);
install_element(VIEW_NODE, &show_thread_poll_cmd); install_element(VIEW_NODE, &show_thread_poll_cmd);
install_element(VIEW_NODE, &show_event_poll_cmd);
install_element(ENABLE_NODE, &clear_thread_cpu_cmd); install_element(ENABLE_NODE, &clear_thread_cpu_cmd);
install_element(CONFIG_NODE, &service_cputime_stats_cmd); install_element(CONFIG_NODE, &service_cputime_stats_cmd);
@ -499,6 +525,7 @@ void event_cmd_init(void)
install_element(CONFIG_NODE, &service_walltime_warning_cmd); install_element(CONFIG_NODE, &service_walltime_warning_cmd);
install_element(VIEW_NODE, &show_thread_timers_cmd); install_element(VIEW_NODE, &show_thread_timers_cmd);
install_element(VIEW_NODE, &show_event_timers_cmd);
} }
/* CLI end ------------------------------------------------------------------ */ /* CLI end ------------------------------------------------------------------ */

View File

@ -226,7 +226,7 @@ else:
ave_b = float(delta_b) / float(num) ave_b = float(delta_b) / float(num)
luCommand( luCommand(
rtr, rtr,
'vtysh -c "show thread cpu"', 'vtysh -c "show event cpu"',
".", ".",
"pass", "pass",
"BGPd heap: {0} {1} --> {2} {3} ({4} {1}/vpn route)".format( "BGPd heap: {0} {1} --> {2} {3} ({4} {1}/vpn route)".format(
@ -239,7 +239,7 @@ else:
) )
luCommand( luCommand(
rtr, rtr,
'vtysh -c "show thread cpu"', 'vtysh -c "show event cpu"',
".", ".",
"pass", "pass",
"Zebra heap: {0} {1} --> {2} {3} ({4} {1}/vpn route)".format( "Zebra heap: {0} {1} --> {2} {3} ({4} {1}/vpn route)".format(

View File

@ -708,9 +708,9 @@ def _check_overload_timer(router, timer_expected):
tgen = get_topogen() tgen = get_topogen()
router = tgen.gears[router] router = tgen.gears[router]
thread_output = router.vtysh_cmd("show thread timers") output = router.vtysh_cmd("show event timers")
timer_running = "set_overload_on_start_timer" in thread_output timer_running = "set_overload_on_start_timer" in output
if timer_running == timer_expected: if timer_running == timer_expected:
return True return True
return "Expected timer running status: {}".format(timer_expected) return "Expected timer running status: {}".format(timer_expected)

View File

@ -80,9 +80,9 @@ show vrf
show work-queues show work-queues
show debugging hashtable show debugging hashtable
show running-config show running-config
show thread cpu show event cpu
show thread poll show event poll
show thread timers show event timers
show daemons show daemons
show version show version
CMD_LIST_END CMD_LIST_END

View File

@ -2942,35 +2942,38 @@ static int show_one_daemon(struct vty *vty, struct cmd_token **argv, int argc,
return ret; return ret;
} }
DEFUN (vtysh_show_thread_timer, #if CONFDATE > 20240707
vtysh_show_thread_timer_cmd, CPP_NOTICE("Remove `show thread ...` commands")
"show thread timers", #endif
DEFUN (vtysh_show_event_timer,
vtysh_show_event_timer_cmd,
"show event timers",
SHOW_STR SHOW_STR
"Thread information\n" "Event information\n"
"Show all timers and how long they have in the system\n") "Show all timers and how long they have in the system\n")
{ {
return show_per_daemon(vty, argv, argc, "Thread timers for %s:\n"); return show_per_daemon(vty, argv, argc, "Event timers for %s:\n");
} }
DEFUN (vtysh_show_poll, DEFUN (vtysh_show_event_poll,
vtysh_show_poll_cmd, vtysh_show_event_poll_cmd,
"show thread poll", "show event poll",
SHOW_STR SHOW_STR
"Thread information\n" "Event information\n"
"Thread Poll Information\n") "Event Poll Information\n")
{ {
return show_per_daemon(vty, argv, argc, "Thread statistics for %s:\n"); return show_per_daemon(vty, argv, argc, "Event statistics for %s:\n");
} }
DEFUN (vtysh_show_thread, DEFUN (vtysh_show_event,
vtysh_show_thread_cmd, vtysh_show_event_cpu_cmd,
"show thread cpu [FILTER]", "show event cpu [FILTER]",
SHOW_STR SHOW_STR
"Thread information\n" "Event information\n"
"Thread CPU usage\n" "Event CPU usage\n"
"Display filter (rwtexb)\n") "Display filter (rwtexb)\n")
{ {
return show_per_daemon(vty, argv, argc, "Thread statistics for %s:\n"); return show_per_daemon(vty, argv, argc, "Event statistics for %s:\n");
} }
DEFUN (vtysh_show_work_queues, DEFUN (vtysh_show_work_queues,
@ -5201,9 +5204,9 @@ void vtysh_init_vty(void)
install_element(VIEW_NODE, &vtysh_show_modules_cmd); install_element(VIEW_NODE, &vtysh_show_modules_cmd);
install_element(VIEW_NODE, &vtysh_show_work_queues_cmd); install_element(VIEW_NODE, &vtysh_show_work_queues_cmd);
install_element(VIEW_NODE, &vtysh_show_work_queues_daemon_cmd); install_element(VIEW_NODE, &vtysh_show_work_queues_daemon_cmd);
install_element(VIEW_NODE, &vtysh_show_thread_cmd); install_element(VIEW_NODE, &vtysh_show_event_cpu_cmd);
install_element(VIEW_NODE, &vtysh_show_poll_cmd); install_element(VIEW_NODE, &vtysh_show_event_poll_cmd);
install_element(VIEW_NODE, &vtysh_show_thread_timer_cmd); install_element(VIEW_NODE, &vtysh_show_event_timer_cmd);
/* Logging */ /* Logging */
install_element(VIEW_NODE, &vtysh_show_logging_cmd); install_element(VIEW_NODE, &vtysh_show_logging_cmd);