diff options
author | David Lamparter <equinox@diac24.net> | 2021-04-13 20:38:09 +0200 |
---|---|---|
committer | David Lamparter <equinox@opensourcerouting.org> | 2021-06-24 16:42:59 +0200 |
commit | 45f0118832172d71dd19e437112e9907c60331f2 (patch) | |
tree | af0a4d36c15759b8ad1bf4d3c6450aed492971ec /lib/vty.c | |
parent | build: remove unused --disable-rusage (diff) | |
download | frr-45f0118832172d71dd19e437112e9907c60331f2.tar.xz frr-45f0118832172d71dd19e437112e9907c60331f2.zip |
lib: make cputime checks runtime options (v2)
...really no reason to force this into a compile time decision. The
only point is avoiding the getrusage() syscall, which can easily be a
runtime decision.
[v2: also split cputime & walltime limits]
Signed-off-by: David Lamparter <equinox@diac24.net>
Diffstat (limited to 'lib/vty.c')
-rw-r--r-- | lib/vty.c | 54 |
1 files changed, 27 insertions, 27 deletions
@@ -502,37 +502,37 @@ static int vty_command(struct vty *vty, char *buf) zlog_notice("%s%s", prompt_str, buf); } -#ifdef CONSUMED_TIME_CHECK - { - RUSAGE_T before; - RUSAGE_T after; - unsigned long realtime, cputime; + RUSAGE_T before; + RUSAGE_T after; + unsigned long walltime, cputime; - GETRUSAGE(&before); -#endif /* CONSUMED_TIME_CHECK */ + /* cmd_execute() may change cputime_enabled if we're executing the + * "service cputime-stats" command, which can result in nonsensical + * and very confusing warnings + */ + bool cputime_enabled_here = cputime_enabled; - ret = cmd_execute(vty, buf, NULL, 0); + GETRUSAGE(&before); - /* Get the name of the protocol if any */ - protocolname = frr_protoname; + ret = cmd_execute(vty, buf, NULL, 0); -#ifdef CONSUMED_TIME_CHECK - GETRUSAGE(&after); - realtime = thread_consumed_time(&after, &before, &cputime); - if (cputime > CONSUMED_TIME_CHECK) { - /* Warn about CPU hog that must be fixed. */ - flog_warn( - EC_LIB_SLOW_THREAD_CPU, - "CPU HOG: command took %lums (cpu time %lums): %s", - realtime / 1000, cputime / 1000, buf); - } else if (realtime > CONSUMED_TIME_CHECK) { - flog_warn( - EC_LIB_SLOW_THREAD_WALL, - "STARVATION: command took %lums (cpu time %lums): %s", - realtime / 1000, cputime / 1000, buf); - } - } -#endif /* CONSUMED_TIME_CHECK */ + GETRUSAGE(&after); + + walltime = thread_consumed_time(&after, &before, &cputime); + + if (cputime_enabled_here && cputime_enabled && cputime_threshold + && cputime > cputime_threshold) + /* Warn about CPU hog that must be fixed. */ + flog_warn(EC_LIB_SLOW_THREAD_CPU, + "CPU HOG: command took %lums (cpu time %lums): %s", + walltime / 1000, cputime / 1000, buf); + else if (walltime_threshold && walltime > walltime_threshold) + flog_warn(EC_LIB_SLOW_THREAD_WALL, + "STARVATION: command took %lums (cpu time %lums): %s", + walltime / 1000, cputime / 1000, buf); + + /* Get the name of the protocol if any */ + protocolname = frr_protoname; if (ret != CMD_SUCCESS) switch (ret) { |