From mboxrd@z Thu Jan 1 00:00:00 1970 From: Steven Whitehouse Date: Thu, 23 Apr 2015 10:06:52 +0100 Subject: [Cluster-devel] [GFS2 PATCH] GFS2: Average in only non-zero round-trip times for congestion stats In-Reply-To: <1549641874.4770984.1429722009576.JavaMail.zimbra@redhat.com> References: <1549641874.4770984.1429722009576.JavaMail.zimbra@redhat.com> Message-ID: <5538B62C.4030303@redhat.com> List-Id: To: cluster-devel.redhat.com MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Hi, That looks better. Do you get better results with it compared with the previous version? Steve. On 22/04/15 18:00, Bob Peterson wrote: > Hi, > > This patch changes function gfs2_rgrp_congested so that it only factors > in non-zero values into its average round trip time. If the round-trip > time is zero for a particular cpu, that cpu has obviously never dealt > with bouncing the resource group in question, so factoring in a zero > value will only skew the numbers. It also fixes a compile error on > some arches related to division. > > Regards, > > Bob Peterson > Signed-off-by: Bob Peterson > --- > diff --git a/fs/gfs2/rgrp.c b/fs/gfs2/rgrp.c > index f39eedc..cb27065 100644 > --- a/fs/gfs2/rgrp.c > +++ b/fs/gfs2/rgrp.c > @@ -1854,15 +1854,19 @@ static bool gfs2_rgrp_congested(const struct gfs2_rgrpd *rgd, int loops) > s64 srttb_diff; > s64 sqr_diff; > s64 var; > - int cpu; > + int cpu, nonzero = 0; > > preempt_disable(); > for_each_present_cpu(cpu) { > st = &per_cpu_ptr(sdp->sd_lkstats, cpu)->lkstats[LM_TYPE_RGRP]; > - a_srttb += st->stats[GFS2_LKS_SRTTB]; > + if (st->stats[GFS2_LKS_SRTTB]) { > + a_srttb += st->stats[GFS2_LKS_SRTTB]; > + nonzero++; > + } > } > st = &this_cpu_ptr(sdp->sd_lkstats)->lkstats[LM_TYPE_RGRP]; > - a_srttb /= num_present_cpus(); > + if (nonzero) > + do_div(a_srttb, nonzero); > r_dcount = st->stats[GFS2_LKS_DCOUNT]; > var = st->stats[GFS2_LKS_SRTTVARB] + > gl->gl_stats.stats[GFS2_LKS_SRTTVARB]; >