mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-14 14:17:20 +00:00
Merge pull request #15106 from opensourcerouting/fix/rename_thread_cli
vtysh: Add `show event ...` commands
This commit is contained in:
commit
956b6153fe
@ -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
|
||||||
------------------------------------
|
------------------------------------
|
||||||
|
@ -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.
|
||||||
|
73
lib/event.c
73
lib/event.c
@ -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 ------------------------------------------------------------------ */
|
||||||
|
|
||||||
|
@ -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(
|
||||||
|
@ -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)
|
||||||
|
@ -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
|
||||||
|
@ -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);
|
||||||
|
Loading…
Reference in New Issue
Block a user