From: Peter Zijlstra <peterz@infradead.org>
To: Frederic Weisbecker <fweisbec@gmail.com>
Cc: paulus <paulus@samba.org>,
stephane eranian <eranian@googlemail.com>,
Robert Richter <robert.richter@amd.com>,
Will Deacon <will.deacon@arm.com>,
Paul Mundt <lethal@linux-sh.org>,
LKML <linux-kernel@vger.kernel.org>
Subject: Re: perf_disable()
Date: Fri, 11 Jun 2010 22:29:40 +0200 [thread overview]
Message-ID: <1276288180.2077.2299.camel@twins> (raw)
In-Reply-To: <20100611171732.GA5234@nowhere>
On Fri, 2010-06-11 at 19:17 +0200, Frederic Weisbecker wrote:
> On Fri, Jun 11, 2010 at 06:29:44PM +0200, Peter Zijlstra wrote:
> > Hi,
> >
> > I've been going over perf_disable() usage in kernel/perf_event.c and
> > wondered if we actually need it at all.
> >
> > Currently the only thing we seem to require it for is around pmu::enable
> > calls (and for that powerpc at least does it itself, on x86 we rely on
> > it to call ->enable_all and reprogram the pmu state).
> >
> > But I can't really find any NMI races wrt data structures or the like as
> > seems implied by some comments.
>
>
>
> I suspect the problem is also on per context integrity. When you adjust
> the period, enable or disable a counter, this counter becomes async with
> the rest of the group or the rest of the counters in the same context, for
> a small bunch of time.
>
> The longer you run your events, the higher is going to be this jitter.
>
> Take an example, when you adjust a period, you:
>
> perf_disable()
> perf_event_stop()
> left_period = 0
> perf_event_start()
> perf_enable()
>
> During all this time, the given event is paused, but the whole rest of
> the events running on the cpu continue to count.
>
> The problem is the same on context switch.
>
> And I think this high resolution of synchronisation per context is
> sensitive, especially with perf start kind of workflows.
I'm not sure what you're arguing, but the knife cuts on both sides, the
above also stops counters that shouldn't be stopped..
> > There is a fun little recursion issue with perf_adjust_period(), where
> > if we fully removed perf_disable() we could end up calling pmu::stop()
> > twice and such.
> >
> > But aside from that it looks to me its mostly about optimizing hardware
> > writes.
> >
> > If nobody else known about/can find anything, I'm going to mostly remove
> > perf_disable() for now and later think about how to optimize the
> > hardware writes again.
>
>
> Not sure that's a good idea IMHO.
Well, we need to do something, the current weak mess needs to go, and
the alternative is basically a loop over all registerd pmus calling
their respective pmu::disable_all, which is utter suckage, so removing
as many of this as possible is a good thing.
We can always come up with some lazy mode later that tries to batch the
hardware writes.
next prev parent reply other threads:[~2010-06-11 20:29 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-06-11 16:29 perf_disable() Peter Zijlstra
2010-06-11 16:52 ` perf_disable() Robert Richter
2010-06-11 17:17 ` perf_disable() Frederic Weisbecker
2010-06-11 20:29 ` Peter Zijlstra [this message]
2010-06-11 21:01 ` perf_disable() Frederic Weisbecker
2010-06-11 21:04 ` perf_disable() Frederic Weisbecker
2010-06-11 21:25 ` perf_disable() Peter Zijlstra
2010-06-14 9:23 ` perf_disable() Will Deacon
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=1276288180.2077.2299.camel@twins \
--to=peterz@infradead.org \
--cc=eranian@googlemail.com \
--cc=fweisbec@gmail.com \
--cc=lethal@linux-sh.org \
--cc=linux-kernel@vger.kernel.org \
--cc=paulus@samba.org \
--cc=robert.richter@amd.com \
--cc=will.deacon@arm.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox