On Fri, Apr 20, 2012 at 02:10:18PM -0700, Ben Pfaff wrote:
> I'd always assumed that the EWMA code here was sufficient rate-limiting,
> but I actually encountered a pathological case some time ago that forced
> this rusage information to print once a second or so, which seems too
> often.
> 
> Signed-off-by: Ben Pfaff <b...@nicira.com>

Here's a version of the patch generated with -w to ignore white space
changes.  It shows how very little actually changed; most of the
changes are just re-indenting.

From: Ben Pfaff <b...@nicira.com>
Date: Fri, 20 Apr 2012 13:43:54 -0700
Subject: [PATCH] timeval: Rate-limit logging rusage information.

I'd always assumed that the EWMA code here was sufficient rate-limiting,
but I actually encountered a pathological case some time ago that forced
this rusage information to print once a second or so, which seems too
often.

Signed-off-by: Ben Pfaff <b...@nicira.com>
---
 lib/timeval.c |   11 ++++++++---
 1 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/lib/timeval.c b/lib/timeval.c
index 3f12b50..9829100 100644
--- a/lib/timeval.c
+++ b/lib/timeval.c
@@ -463,6 +463,9 @@ log_poll_interval(long long int last_wakeup)
     /* Warn if we took too much time between polls: at least 50 ms and at least
      * 8X the mean interval. */
     if (n_samples > 10 && interval > mean_interval * 8 && interval > 50 * 16) {
+        static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 3);
+
+        if (!VLOG_DROP_WARN(&rl)) {
         const struct rusage *last_rusage = get_recent_rusage();
         struct rusage rusage;
 
@@ -471,8 +474,10 @@ log_poll_interval(long long int last_wakeup)
                   "is over %u times the weighted mean interval %u ms "
                   "(%u samples)",
                   now - last_wakeup,
-                  timeval_diff_msec(&rusage.ru_utime, &last_rusage->ru_utime),
-                  timeval_diff_msec(&rusage.ru_stime, &last_rusage->ru_stime),
+                      timeval_diff_msec(&rusage.ru_utime,
+                                        &last_rusage->ru_utime),
+                      timeval_diff_msec(&rusage.ru_stime,
+                                        &last_rusage->ru_stime),
                   interval / mean_interval,
                   (mean_interval + 8) / 16, n_samples);
         if (rusage.ru_minflt > last_rusage->ru_minflt
@@ -493,7 +498,7 @@ log_poll_interval(long long int last_wakeup)
                       rusage.ru_nvcsw - last_rusage->ru_nvcsw,
                       rusage.ru_nivcsw - last_rusage->ru_nivcsw);
         }
-
+        }
         /* Care should be taken in the value chosen for logging.  Depending
          * on the configuration, syslog can write changes synchronously,
          * which can cause the coverage messages to take longer to log
-- 
1.7.2.5

_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to