2005-04-16 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
* configure.ac: Added AC_ARG_ENABLE(time-check). By default,
warning messages will now be printed for threads or commands that take
longer than 5 seconds, but this configure argument can be used
to disable the checks or change the threshold.
* thread.h (thread_consumed_time): Declare new function to calculate
elapsed microseconds.
* thread.c (thread_consumed_time): Must be global not static so we
can call it from lib/vty.c:vty_command.
(thread_should_yield): Surround with `#if 0' to make clear that this
function is not currently being used anywhere.
(thread_call): If CONSUMED_TIME_CHECK is defined, print a CPU HOG
warning message if the thread takes more than CONSUMED_TIME_CHECK
microseconds.
* vty.c (vty_command): If CONSUMED_TIME_CHECK is defined, print a CPU
HOG warning message if the command takes more than CONSUMED_TIME_CHECK
microseconds.
diff --git a/lib/vty.c b/lib/vty.c
index 600c9fd..ea74172 100644
--- a/lib/vty.c
+++ b/lib/vty.c
@@ -395,8 +395,25 @@
if (vline == NULL)
return CMD_SUCCESS;
+#ifdef CONSUMED_TIME_CHECK
+ {
+ RUSAGE_T before;
+ RUSAGE_T after;
+ unsigned long cmdtime;
+
+ GETRUSAGE(&before);
+#endif /* CONSUMED_TIME_CHECK */
+
ret = cmd_execute_command (vline, vty, NULL, 0);
+#ifdef CONSUMED_TIME_CHECK
+ GETRUSAGE(&after);
+ if ((cmdtime = thread_consumed_time(&after, &before)) > CONSUMED_TIME_CHECK)
+ /* Warn about CPU hog that must be fixed. */
+ zlog_warn("CPU HOG: command took %lums: %s", cmdtime/1000, buf);
+ }
+#endif /* CONSUMED_TIME_CHECK */
+
if (ret != CMD_SUCCESS)
switch (ret)
{