diff options
| author | Justin Pettit <jpettit@nicira.com> | 2009-07-10 15:09:41 -0700 |
|---|---|---|
| committer | Justin Pettit <jpettit@nicira.com> | 2009-07-10 15:09:41 -0700 |
| commit | f5c6854a73cb6242297e3aac02ccf2d6a22876b0 (patch) | |
| tree | a559a6884d57b88d32d2fa3bb04d08db12668a25 /lib/coverage.c | |
| parent | 10bf9f637b0c98438772ae01366a8da8e91d8c1c (diff) | |
| download | openvswitch-f5c6854a73cb6242297e3aac02ccf2d6a22876b0.tar.gz | |
Provide ability to retrieve coverage information
Previously, there was no way to induce coverage information to be
displayed; it would only print when the system noticed unusual delays
between polling intervals. Now, production of coverage logs can be
forced with "coverage/log" command in ovs-appctl. Coverage counters may
be reset with "coverage/clear".
Diffstat (limited to 'lib/coverage.c')
| -rw-r--r-- | lib/coverage.c | 39 |
1 files changed, 32 insertions, 7 deletions
diff --git a/lib/coverage.c b/lib/coverage.c index eaa441c0d..e86aa0299 100644 --- a/lib/coverage.c +++ b/lib/coverage.c @@ -21,6 +21,7 @@ #include "coverage-counters.h" #include "dynamic-string.h" #include "hash.h" +#include "unixctl.h" #include "util.h" #define THIS_MODULE VLM_coverage @@ -28,6 +29,27 @@ static unsigned int epoch; +static void +coverage_unixctl_log(struct unixctl_conn *conn, const char *args UNUSED) +{ + coverage_log(VLL_WARN, false); + unixctl_command_reply(conn, 200, NULL); +} + +static void +coverage_unixctl_clear(struct unixctl_conn *conn, const char *args UNUSED) +{ + coverage_clear(); + unixctl_command_reply(conn, 200, NULL); +} + +void +coverage_init(void) +{ + unixctl_command_register("coverage/log", coverage_unixctl_log); + unixctl_command_register("coverage/clear", coverage_unixctl_clear); +} + /* Sorts coverage counters in descending order by count, within equal counts * alphabetically by name. */ static int @@ -107,9 +129,10 @@ coverage_log_counter(enum vlog_level level, const struct coverage_counter *c) VLOG(level, "%-24s %5u / %9llu", c->name, c->count, c->count + c->total); } -/* Logs the coverage counters at the given vlog 'level'. */ +/* Logs the coverage counters at the given vlog 'level'. If + * 'suppress_dups' is true, then duplicate events are not displayed. */ void -coverage_log(enum vlog_level level) +coverage_log(enum vlog_level level, bool suppress_dups) { size_t n_never_hit; uint32_t hash; @@ -119,11 +142,13 @@ coverage_log(enum vlog_level level) return; } - hash = coverage_hash(); - if (coverage_hit(hash)) { - VLOG(level, "Skipping details of duplicate event coverage for " - "hash=%08"PRIx32" in epoch %u", hash, epoch); - return; + if (suppress_dups) { + hash = coverage_hash(); + if (coverage_hit(hash)) { + VLOG(level, "Skipping details of duplicate event coverage for " + "hash=%08"PRIx32" in epoch %u", hash, epoch); + return; + } } n_never_hit = 0; |
