Skip to content

Commit

Permalink
Merge pull request #15106 from opensourcerouting/fix/rename_thread_cli
Browse files Browse the repository at this point in the history
vtysh: Add `show event ...` commands
  • Loading branch information
donaldsharp authored Jan 8, 2024
2 parents 87a9227 + 7e6b4f7 commit 956b615
Show file tree
Hide file tree
Showing 7 changed files with 89 additions and 59 deletions.
10 changes: 5 additions & 5 deletions doc/developer/process-architecture.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
------------------------------------
Expand Down
6 changes: 3 additions & 3 deletions doc/user/basic.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
73 changes: 50 additions & 23 deletions lib/event.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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",
Expand Down Expand Up @@ -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];
Expand Down Expand Up @@ -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,
Expand All @@ -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];
Expand All @@ -470,35 +487,45 @@ 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);
install_element(CONFIG_NODE, &service_cputime_warning_cmd);
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 ------------------------------------------------------------------ */

Expand Down
4 changes: 2 additions & 2 deletions tests/topotests/bgp_l3vpn_to_bgp_vrf/scripts/scale_up.py
Original file line number Diff line number Diff line change
Expand Up @@ -226,7 +226,7 @@
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(
Expand All @@ -239,7 +239,7 @@
)
luCommand(
rtr,
'vtysh -c "show thread cpu"',
'vtysh -c "show event cpu"',
".",
"pass",
"Zebra heap: {0} {1} --> {2} {3} ({4} {1}/vpn route)".format(
Expand Down
4 changes: 2 additions & 2 deletions tests/topotests/isis_topo1/test_isis_topo1.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
8 changes: 4 additions & 4 deletions tools/etc/frr/support_bundle_commands.conf
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -177,7 +177,7 @@ CMD_LIST_END
PROC_NAME:ospf6
CMD_LIST_START
show ipv6 ospf6 vrf all
show ipv6 ospf6 vrfs
show ipv6 ospf6 vrfs
show ipv6 ospf6 vrf all border-routers
show ipv6 ospf6 vrf all border-routers detail
show ipv6 ospf6 vrf all database
Expand Down
43 changes: 23 additions & 20 deletions vtysh/vtysh.c
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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);
Expand Down

0 comments on commit 956b615

Please sign in to comment.