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``
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
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
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
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
------------------------------------

View File

@ -673,20 +673,20 @@ Terminal Mode 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
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,
(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
we are setting each individual fd for the poll command at that point
in time.
.. clicmd:: show thread timers
.. clicmd:: show event timers
This command displays FRR's timer data for timers that will pop in
the future.

View File

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

View File

@ -226,7 +226,7 @@ else:
ave_b = float(delta_b) / float(num)
luCommand(
rtr,
'vtysh -c "show thread cpu"',
'vtysh -c "show event cpu"',
".",
"pass",
"BGPd heap: {0} {1} --> {2} {3} ({4} {1}/vpn route)".format(
@ -239,7 +239,7 @@ else:
)
luCommand(
rtr,
'vtysh -c "show thread cpu"',
'vtysh -c "show event cpu"',
".",
"pass",
"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()
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:
return True
return "Expected timer running status: {}".format(timer_expected)

View File

@ -80,9 +80,9 @@ show vrf
show work-queues
show debugging hashtable
show running-config
show thread cpu
show thread poll
show thread timers
show event cpu
show event poll
show event timers
show daemons
show version
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;
}
DEFUN (vtysh_show_thread_timer,
vtysh_show_thread_timer_cmd,
"show thread timers",
#if CONFDATE > 20240707
CPP_NOTICE("Remove `show thread ...` commands")
#endif
DEFUN (vtysh_show_event_timer,
vtysh_show_event_timer_cmd,
"show event timers",
SHOW_STR
"Thread information\n"
"Event information\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,
vtysh_show_poll_cmd,
"show thread poll",
DEFUN (vtysh_show_event_poll,
vtysh_show_event_poll_cmd,
"show event poll",
SHOW_STR
"Thread information\n"
"Thread Poll Information\n")
"Event 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,
vtysh_show_thread_cmd,
"show thread cpu [FILTER]",
DEFUN (vtysh_show_event,
vtysh_show_event_cpu_cmd,
"show event cpu [FILTER]",
SHOW_STR
"Thread information\n"
"Thread CPU usage\n"
"Event information\n"
"Event CPU usage\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,
@ -5201,9 +5204,9 @@ void vtysh_init_vty(void)
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_daemon_cmd);
install_element(VIEW_NODE, &vtysh_show_thread_cmd);
install_element(VIEW_NODE, &vtysh_show_poll_cmd);
install_element(VIEW_NODE, &vtysh_show_thread_timer_cmd);
install_element(VIEW_NODE, &vtysh_show_event_cpu_cmd);
install_element(VIEW_NODE, &vtysh_show_event_poll_cmd);
install_element(VIEW_NODE, &vtysh_show_event_timer_cmd);
/* Logging */
install_element(VIEW_NODE, &vtysh_show_logging_cmd);