From: Will Deacon <will.deacon@arm.com>
To: Peter Zijlstra <peterz@infradead.org>
Cc: Vincent Guittot <vincent.guittot@linaro.org>,
mingo@kernel.org, linux-kernel@vger.kernel.org,
valentin.schneider@arm.com, morten.rasmussen@foss.arm.com,
brendan.jackman@arm.com, dietmar.eggemann@arm.com
Subject: Re: [PATCH v2 1/3] sched: Stop nohz stats when decayed
Date: Thu, 8 Feb 2018 15:30:31 +0000 [thread overview]
Message-ID: <20180208153030.GB17775@arm.com> (raw)
In-Reply-To: <20180208140005.GH25201@hirez.programming.kicks-ass.net>
On Thu, Feb 08, 2018 at 03:00:05PM +0100, Peter Zijlstra wrote:
> On Tue, Feb 06, 2018 at 08:23:05PM +0100, Vincent Guittot wrote:
> > @@ -9222,6 +9248,13 @@ void nohz_balance_enter_idle(int cpu)
> > atomic_inc(&nohz.nr_cpus);
> >
> > set_cpu_sd_state_idle(cpu);
>
> /*
> * Ensures that if nohz_idle_balance() fails to observe our
> * @idle_cpus_mask store, it must observe the @has_blocked
> * store.
> */
> smp_mb__after_atomic();
>
> > +
> > +out:
> > + /*
> > + * Each time a cpu enter idle, we assume that it has blocked load and
> > + * enable the periodic update of the load of idle cpus
> > + */
> > + WRITE_ONCE(nohz.has_blocked, 1);
> > }
>
>
>
> > @@ -9374,6 +9407,16 @@ static bool nohz_idle_balance(struct rq *this_rq, enum cpu_idle_type idle)
> >
> > SCHED_WARN_ON((flags & NOHZ_KICK_MASK) == NOHZ_BALANCE_KICK);
> >
> > + /*
> > + * We assume there will be no idle load after this update and clear
> > + * the has_blocked flag. If a cpu enters idle in the mean time, it will
> > + * set the has_blocked flag and trig another update of idle load.
> > + * Because a cpu that becomes idle, is added to idle_cpus_mask before
> > + * setting the flag, we are sure to not clear the state and not
> > + * check the load of an idle cpu.
> > + */
> > + WRITE_ONCE(nohz.has_blocked, 0);
>
> /*
> * Ensures that if we miss the CPU, we must see the has_blocked
> * store from nohz_balance_enter_idle().
> */
> smp_mb();
>
> > for_each_cpu(balance_cpu, nohz.idle_cpus_mask) {
> > if (balance_cpu == this_cpu || !idle_cpu(balance_cpu))
> > continue;
>
>
> I _think_, but my brain isn't quite willing to turn on today.
>
> Without this ordering I think it would be possible to loose has_blocked
> and not observe the CPU either.
I had a quick look at this, and I think you're right. This looks very much
like an 'R'-shaped test, which means it's smp_mb() all round otherwise Power
will go wrong. That also means the smp_mb__after_atomic() in
nohz_balance_enter_idle *cannot* be an smp_wmb(), so you might want a
comment stating that explicitly.
On arm64, release/acquire would work, but that's basically not the case for
anybody else including x86, so let's not go there.
Will
next prev parent reply other threads:[~2018-02-08 15:30 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-02-06 19:23 [PATCH v2 0/3] Update blocked load Vincent Guittot
2018-02-06 19:23 ` [PATCH v2 1/3] sched: Stop nohz stats when decayed Vincent Guittot
2018-02-08 12:46 ` Valentin Schneider
2018-02-08 13:15 ` Peter Zijlstra
2018-02-08 13:36 ` Vincent Guittot
2018-02-08 19:21 ` Valentin Schneider
2018-02-09 11:41 ` Vincent Guittot
2018-02-09 12:16 ` Valentin Schneider
2018-02-08 14:00 ` Peter Zijlstra
2018-02-08 14:04 ` Peter Zijlstra
2018-02-08 15:05 ` Vincent Guittot
2018-02-08 15:44 ` Peter Zijlstra
2018-02-08 16:52 ` Vincent Guittot
2018-02-09 12:00 ` Peter Zijlstra
2018-02-08 15:30 ` Will Deacon [this message]
2018-02-08 15:46 ` Peter Zijlstra
2018-02-08 16:03 ` Will Deacon
2018-02-09 9:51 ` Andrea Parri
2018-02-06 19:23 ` [PATCH v2 2/3] sched: reduce the periodic update duration Vincent Guittot
2018-02-06 19:23 ` [PATCH v2 3/3] sched: update blocked load when newly idle Vincent Guittot
2018-02-06 21:25 ` [PATCH v2 0/3] Update blocked load Peter Zijlstra
2018-02-06 21:46 ` Vincent Guittot
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=20180208153030.GB17775@arm.com \
--to=will.deacon@arm.com \
--cc=brendan.jackman@arm.com \
--cc=dietmar.eggemann@arm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=morten.rasmussen@foss.arm.com \
--cc=peterz@infradead.org \
--cc=valentin.schneider@arm.com \
--cc=vincent.guittot@linaro.org \
/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.