coverage: Rate-limit logging coverage information.
authorBen Pfaff <blp@nicira.com>
Fri, 20 Apr 2012 20:51:13 +0000 (13:51 -0700)
committerBen Pfaff <blp@nicira.com>
Thu, 26 Apr 2012 21:07:16 +0000 (14:07 -0700)
I'd always assumed that the exponentially weighted moving average code in
timeval was enough rate-limiting, but I actually encountered a pathological
case some time ago that forced this coverage information to print once a
second or so, which seems too often.

Signed-off-by: Ben Pfaff <blp@nicira.com>
lib/coverage.c

index 0deb5265a4a3e8e6bd480bdbff413bc5feeec7e6..ff20f5e9c09ed159775690370f2cdc2de8e42b7a 100644 (file)
@@ -158,11 +158,14 @@ coverage_log_counter(enum vlog_level level, const struct coverage_counter *c)
 void
 coverage_log(enum vlog_level level, bool suppress_dups)
 {
+    static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 3);
     size_t n_never_hit;
     uint32_t hash;
     size_t i;
 
-    if (!vlog_is_enabled(THIS_MODULE, level)) {
+    if (suppress_dups
+        ? !vlog_is_enabled(THIS_MODULE, level)
+        : vlog_should_drop(THIS_MODULE, level, &rl)) {
         return;
     }