Thanks!  I applied to master and branch-2.[310].

On Wed, Feb 11, 2015 at 02:59:59PM -0800, Alex Wang wrote:
> Thx for the fix!
> 
> Acked-by: Alex Wang <al...@nicira.com>
> 
> On Wed, Feb 11, 2015 at 2:54 PM, Ben Pfaff <b...@nicira.com> wrote:
> 
> > Most of the information that timeval was reporting for long poll intervals
> > was comparing per-thread with per-process statistics, which yielded
> > nonsense a lot of the time.
> >
> > Signed-off-by: Ben Pfaff <b...@nicira.com>
> > ---
> > v1->v2: Really fix the whole problem (thanks Alex!)
> > v2->v2.1: Repost now that the list is back up.
> >
> >  lib/timeval.c |   57
> > +++++++++++++++++++++++++++++++--------------------------
> >  1 file changed, 31 insertions(+), 26 deletions(-)
> >
> > diff --git a/lib/timeval.c b/lib/timeval.c
> > index 6173aff..a77fc61 100644
> > --- a/lib/timeval.c
> > +++ b/lib/timeval.c
> > @@ -1,5 +1,5 @@
> >  /*
> > - * Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013, 2014 Nicira, Inc.
> > + * Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015 Nicira,
> > Inc.
> >   *
> >   * Licensed under the Apache License, Version 2.0 (the "License");
> >   * you may not use this file except in compliance with the License.
> > @@ -102,6 +102,7 @@ DEFINE_STATIC_PER_THREAD_DATA(long long int,
> > last_wakeup, 0);
> >
> >  static void log_poll_interval(long long int last_wakeup);
> >  static struct rusage *get_recent_rusage(void);
> > +static int getrusage_thread(struct rusage *);
> >  static void refresh_rusage(void);
> >  static void timespec_add(struct timespec *sum,
> >                           const struct timespec *a, const struct timespec
> > *b);
> > @@ -561,31 +562,35 @@ log_poll_interval(long long int last_wakeup)
> >          const struct rusage *last_rusage = get_recent_rusage();
> >          struct rusage rusage;
> >
> > -        getrusage(RUSAGE_SELF, &rusage);
> > -        VLOG_WARN("Unreasonably long %lldms poll interval"
> > -                  " (%lldms user, %lldms system)",
> > -                  interval,
> > -                  timeval_diff_msec(&rusage.ru_utime,
> > -                                    &last_rusage->ru_utime),
> > -                  timeval_diff_msec(&rusage.ru_stime,
> > -                                    &last_rusage->ru_stime));
> > -        if (rusage.ru_minflt > last_rusage->ru_minflt
> > -            || rusage.ru_majflt > last_rusage->ru_majflt) {
> > -            VLOG_WARN("faults: %ld minor, %ld major",
> > -                      rusage.ru_minflt - last_rusage->ru_minflt,
> > -                      rusage.ru_majflt - last_rusage->ru_majflt);
> > -        }
> > -        if (rusage.ru_inblock > last_rusage->ru_inblock
> > -            || rusage.ru_oublock > last_rusage->ru_oublock) {
> > -            VLOG_WARN("disk: %ld reads, %ld writes",
> > -                      rusage.ru_inblock - last_rusage->ru_inblock,
> > -                      rusage.ru_oublock - last_rusage->ru_oublock);
> > -        }
> > -        if (rusage.ru_nvcsw > last_rusage->ru_nvcsw
> > -            || rusage.ru_nivcsw > last_rusage->ru_nivcsw) {
> > -            VLOG_WARN("context switches: %ld voluntary, %ld involuntary",
> > -                      rusage.ru_nvcsw - last_rusage->ru_nvcsw,
> > -                      rusage.ru_nivcsw - last_rusage->ru_nivcsw);
> > +        if (!getrusage_thread(&rusage)) {
> > +            VLOG_WARN("Unreasonably long %lldms poll interval"
> > +                      " (%lldms user, %lldms system)",
> > +                      interval,
> > +                      timeval_diff_msec(&rusage.ru_utime,
> > +                                        &last_rusage->ru_utime),
> > +                      timeval_diff_msec(&rusage.ru_stime,
> > +                                        &last_rusage->ru_stime));
> > +
> > +            if (rusage.ru_minflt > last_rusage->ru_minflt
> > +                || rusage.ru_majflt > last_rusage->ru_majflt) {
> > +                VLOG_WARN("faults: %ld minor, %ld major",
> > +                          rusage.ru_minflt - last_rusage->ru_minflt,
> > +                          rusage.ru_majflt - last_rusage->ru_majflt);
> > +            }
> > +            if (rusage.ru_inblock > last_rusage->ru_inblock
> > +                || rusage.ru_oublock > last_rusage->ru_oublock) {
> > +                VLOG_WARN("disk: %ld reads, %ld writes",
> > +                          rusage.ru_inblock - last_rusage->ru_inblock,
> > +                          rusage.ru_oublock - last_rusage->ru_oublock);
> > +            }
> > +            if (rusage.ru_nvcsw > last_rusage->ru_nvcsw
> > +                || rusage.ru_nivcsw > last_rusage->ru_nivcsw) {
> > +                VLOG_WARN("context switches: %ld voluntary, %ld
> > involuntary",
> > +                          rusage.ru_nvcsw - last_rusage->ru_nvcsw,
> > +                          rusage.ru_nivcsw - last_rusage->ru_nivcsw);
> > +            }
> > +        } else {
> > +            VLOG_WARN("Unreasonably long %lldms poll interval", interval);
> >          }
> >          coverage_log();
> >      }
> > --
> > 1.7.10.4
> >
> > _______________________________________________
> > dev mailing list
> > dev@openvswitch.org
> > http://openvswitch.org/mailman/listinfo/dev
> >
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to