From: Peter Zijlstra <peterz@infradead.org>
To: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Chris Metcalf <cmetcalf@ezchip.com>,
LKML <linux-kernel@vger.kernel.org>,
Thomas Gleixner <tglx@linutronix.de>,
Luiz Capitulino <lcapitulino@redhat.com>,
Christoph Lameter <cl@linux.com>, Ingo Molnar <mingo@kernel.org>,
Viresh Kumar <viresh.kumar@linaro.org>,
Rik van Riel <riel@redhat.com>
Subject: Re: [PATCH 3/7] perf: Migrate perf to use new tick dependency mask model
Date: Wed, 2 Dec 2015 17:17:58 +0100 [thread overview]
Message-ID: <20151202161758.GS3816@twins.programming.kicks-ass.net> (raw)
In-Reply-To: <20151125123428.GD16609@lerouge>
On Wed, Nov 25, 2015 at 01:34:30PM +0100, Frederic Weisbecker wrote:
> On Tue, Nov 24, 2015 at 11:19:33AM -0500, Chris Metcalf wrote:
> > It would be helpful to have a comment explaining why these two
> > can't race with each other, e.g. this race:
> >
> > [cpu 1] atomic_dec_and_test
> > [cpu 2] atomic_inc_return
> > [cpu 2] tick_nohz_set_dep()
> > [cpu 1] tick_nohz_clear_dep()
> >
> > Or perhaps this is a true race condition possibility?
> >
> > I think we're OK for the sched cases since they're protected under
> > the rq lock, I think. I'm not sure about the POSIX cpu timers.
>
> Hmm, how did I miss that...
>
> So in the case of perf, either we need locking, in which case we may want
> to use something like tick_nohz_add_dep() which takes care of counting.
> But perf would be the only user.
Right; so you could use something like atomic_dec_and_mutex_lock(), that
would only globally serialize the 0<->1 transitions without incurring
overhead to any other state transitions.
A possibly even less expensive option might be something along the lines
of:
tick_nohz_update_perf_dep()
{
static DEFINE_SPINLOCK(lock);
bool freq;
spin_lock(&lock);
freq = !!atomic_read(&nr_freq_events);
if (freq ^ !!tick_nohz_test_dep(PERF)) {
if (freq)
tick_nohz_set_dep(PERF);
else
tick_nohz_clear_dep(PERF);
}
spin_unlock(&lock);
}
if (atomic_inc_return(&nr_freq_events) == 1)
tick_nohz_update_perf_dep();
if (atomic_dec_return(&nr_freq_events) == 0)
tick_nohz_update_perf_dep();
That avoids the atomic_add_unless() muckery.
> _ sched_clock_stable: that one is more obscure. It seems that set_sched_clock_stable()
> and clear_sched_clock_stable() can race on static keys if running concurrently, and
> that would concern tick mask as well.
All you need to ensure here is that clear wins. Once we clear
sched_clock_stable we should _never_ set it again.
next prev parent reply other threads:[~2015-12-02 16:18 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-11-13 14:22 [PATCH 0/7] nohz: Tick dependency mask v3 Frederic Weisbecker
2015-11-13 14:22 ` [PATCH 1/7] atomic: Export fetch_or() Frederic Weisbecker
2015-11-24 15:58 ` Chris Metcalf
2015-11-24 21:19 ` Frederic Weisbecker
2015-11-24 21:48 ` Chris Metcalf
2015-11-30 17:36 ` Frederic Weisbecker
2015-11-30 18:17 ` Chris Metcalf
2015-11-25 9:13 ` Peter Zijlstra
2015-11-13 14:22 ` [PATCH 2/7] nohz: New tick dependency mask Frederic Weisbecker
2015-11-24 16:19 ` Chris Metcalf
2015-11-25 11:32 ` Frederic Weisbecker
2015-12-01 20:41 ` Peter Zijlstra
2015-12-01 22:20 ` Frederic Weisbecker
2015-12-02 10:56 ` Peter Zijlstra
2015-12-02 14:08 ` Frederic Weisbecker
2015-12-02 15:09 ` Peter Zijlstra
2015-12-08 15:57 ` Frederic Weisbecker
2015-12-02 12:45 ` Peter Zijlstra
2015-12-02 14:10 ` Frederic Weisbecker
2015-12-02 12:48 ` Peter Zijlstra
2015-12-02 14:11 ` Frederic Weisbecker
2015-11-13 14:22 ` [PATCH 3/7] perf: Migrate perf to use new tick dependency mask model Frederic Weisbecker
2015-11-24 16:19 ` Chris Metcalf
2015-11-25 12:34 ` Frederic Weisbecker
2015-12-02 16:17 ` Peter Zijlstra [this message]
2015-12-02 17:03 ` Frederic Weisbecker
2015-12-02 17:15 ` Peter Zijlstra
2015-11-13 14:22 ` [PATCH 4/7] sched: Account rr and fifo tasks separately Frederic Weisbecker
2015-12-02 12:53 ` Peter Zijlstra
2015-12-02 14:16 ` Frederic Weisbecker
2015-11-13 14:22 ` [PATCH 5/7] sched: Migrate sched to use new tick dependency mask model Frederic Weisbecker
2015-11-13 14:22 ` [PATCH 6/7] posix-cpu-timers: Migrate " Frederic Weisbecker
2015-11-13 14:22 ` [PATCH 7/7] sched-clock: " Frederic Weisbecker
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=20151202161758.GS3816@twins.programming.kicks-ass.net \
--to=peterz@infradead.org \
--cc=cl@linux.com \
--cc=cmetcalf@ezchip.com \
--cc=fweisbec@gmail.com \
--cc=lcapitulino@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=riel@redhat.com \
--cc=tglx@linutronix.de \
--cc=viresh.kumar@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome