From: Yuyang Du <yuyang.du@intel.com>
To: Peter Zijlstra <peterz@infradead.org>
Cc: mingo@redhat.com, linux-kernel@vger.kernel.org, pjt@google.com,
bsegall@google.com, arjan.van.de.ven@intel.com,
len.brown@intel.com, rafael.j.wysocki@intel.com,
alan.cox@intel.com, mark.gross@intel.com, fengguang.wu@intel.com
Subject: Re: [PATCH 2/2 v4] sched: Rewrite per entity runnable load average tracking
Date: Tue, 29 Jul 2014 09:09:45 +0800 [thread overview]
Message-ID: <20140729010945.GB5203@intel.com> (raw)
In-Reply-To: <20140728113939.GR6758@twins.programming.kicks-ass.net>
On Mon, Jul 28, 2014 at 01:39:39PM +0200, Peter Zijlstra wrote:
> > -static inline void __update_group_entity_contrib(struct sched_entity *se)
> > +static inline void update_tg_load_avg(struct cfs_rq *cfs_rq)
> > {
> > + long delta = cfs_rq->avg.load_avg - cfs_rq->tg_load_avg_contrib;
> >
> > + if (delta) {
> > + atomic_long_add(delta, &cfs_rq->tg->load_avg);
> > + cfs_rq->tg_load_avg_contrib = cfs_rq->avg.load_avg;
> > }
> > }
>
> We talked about this before, you made that an unconditional atomic op on
> an already hot line.
>
> You need some words on why this isn't a problem. Either in a comment or
> in the Changelog. You cannot leave such changes undocumented.
I am all for not updating trivial delta, e.g., 1 or 2. I just had no theory
in selecting a "good" threshold.
The current code uses 1/8 or 1/64 of contrib. Though it is not fair comparison,
because how current tg load is calculated is a big story (no offense), I choose
1/64 as the threshold.
> > +#define subtract_until_zero(minuend, subtrahend) \
> > + (subtrahend < minuend ? minuend - subtrahend : 0)
>
> WTH is a minuend or subtrahend? Are you a wordsmith in your spare time
> and like to make up your own words?
>
> Also, isn't writing: x = max(0, x-y), far more readable to begin with?
>
Ok. IIUC, max() does not handle minus number super good, and we don't need the type
overhead in max(), so still use my macro, but won't be wordsmith again, :)
> > +/*
> > + * Group cfs_rq's load_avg is used for task_h_load and update_cfs_share
> > + * calc.
> > + */
> > +static inline int update_cfs_rq_load_avg(u64 now, struct cfs_rq *cfs_rq)
> > {
> > + int decayed;
> >
> > + if (atomic_long_read(&cfs_rq->removed_load_avg)) {
> > + long r = atomic_long_xchg(&cfs_rq->removed_load_avg, 0);
> > + cfs_rq->avg.load_avg = subtract_until_zero(cfs_rq->avg.load_avg, r);
> > + r *= LOAD_AVG_MAX;
> > + cfs_rq->avg.load_sum = subtract_until_zero(cfs_rq->avg.load_sum, r);
> > }
> >
> > + decayed = __update_load_avg(now, &cfs_rq->avg, cfs_rq->load.weight);
> >
> > +#ifndef CONFIG_64BIT
> > + if (cfs_rq->avg.last_update_time != cfs_rq->load_last_update_time_copy) {
> > + smp_wmb();
> > + cfs_rq->load_last_update_time_copy = cfs_rq->avg.last_update_time;
> > + }
> > +#endif
> >
> > + return decayed;
> > +}
>
> Its a bit unfortunate that we update the copy in another function than
> the original, but I think I see why you did that. But is it at all
> likely that we do not need to update? That is, does that compare make
> any sense?
I think we can assume last_update_time will mostly be changed, because it won't be
changed only in two cases: 1) minus delta time, 2) within a period, 1ms, these two
cases seemingly are minority. So yes, we can save the compare.
next prev parent reply other threads:[~2014-07-29 9:12 UTC|newest]
Thread overview: 47+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-07-17 23:26 [PATCH 0/2 v4] sched: Rewrite per entity runnable load average tracking Yuyang Du
2014-07-17 23:26 ` [PATCH 1/2 v4] sched: Remove update_rq_runnable_avg Yuyang Du
2014-07-17 23:26 ` [PATCH 2/2 v4] sched: Rewrite per entity runnable load average tracking Yuyang Du
2014-07-18 9:43 ` Vincent Guittot
2014-07-27 17:36 ` Yuyang Du
2014-07-29 9:12 ` Vincent Guittot
2014-07-29 1:43 ` Yuyang Du
2014-07-29 13:17 ` Vincent Guittot
2014-07-29 22:27 ` Yuyang Du
2014-07-30 8:30 ` Peter Zijlstra
2014-07-30 0:40 ` Yuyang Du
2014-07-29 9:39 ` Peter Zijlstra
2014-07-29 1:53 ` Yuyang Du
2014-07-29 13:35 ` Peter Zijlstra
2014-07-29 15:55 ` Peter Zijlstra
2014-07-29 23:08 ` Yuyang Du
2014-07-31 9:40 ` Vincent Guittot
2014-07-31 9:56 ` [PATCH 2/2 v4] sched: Rewrite per entity runnable load average Vincent Guittot
2014-07-31 19:16 ` Yuyang Du
2014-08-01 9:28 ` Vincent Guittot
2014-07-28 10:48 ` [PATCH 2/2 v4] sched: Rewrite per entity runnable load average tracking Peter Zijlstra
2014-07-29 0:56 ` Yuyang Du
2014-07-29 13:15 ` Peter Zijlstra
2014-07-28 11:39 ` Peter Zijlstra
2014-07-29 1:09 ` Yuyang Du [this message]
2014-07-29 13:19 ` Peter Zijlstra
2014-07-28 12:01 ` Peter Zijlstra
2014-07-28 13:51 ` Peter Zijlstra
2014-07-28 16:58 ` bsegall
2014-07-28 17:19 ` Peter Zijlstra
2014-07-29 1:13 ` Yuyang Du
2014-07-18 15:39 ` [PATCH 0/2 " Morten Rasmussen
2014-07-27 19:02 ` Yuyang Du
2014-07-28 10:38 ` Peter Zijlstra
2014-07-29 1:17 ` Yuyang Du
2014-07-29 13:06 ` Peter Zijlstra
2014-07-30 10:13 ` Morten Rasmussen
2014-07-30 10:21 ` Peter Zijlstra
2014-07-30 10:57 ` Morten Rasmussen
2014-07-30 19:17 ` Yuyang Du
2014-07-31 8:54 ` Morten Rasmussen
2014-07-31 2:15 ` Yuyang Du
2014-07-20 5:46 ` Mike Galbraith
2014-07-27 19:34 ` Yuyang Du
2014-07-28 7:49 ` Mike Galbraith
2014-07-28 0:01 ` Yuyang Du
2014-07-28 8:55 ` Peter Zijlstra
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20140729010945.GB5203@intel.com \
--to=yuyang.du@intel.com \
--cc=alan.cox@intel.com \
--cc=arjan.van.de.ven@intel.com \
--cc=bsegall@google.com \
--cc=fengguang.wu@intel.com \
--cc=len.brown@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mark.gross@intel.com \
--cc=mingo@redhat.com \
--cc=peterz@infradead.org \
--cc=pjt@google.com \
--cc=rafael.j.wysocki@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.