From: Frederic Weisbecker <fweisbec@gmail.com>
To: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>,
linux-kernel@vger.kernel.org, mingo@elte.hu, paulus@samba.org,
davem@davemloft.net, perfmon2-devel@lists.sf.net,
eranian@gmail.com
Subject: Re: [PATCH] perf_events: improve x86 event scheduling (v5)
Date: Mon, 18 Jan 2010 15:20:07 +0100 [thread overview]
Message-ID: <20100118142004.GD10364@nowhere> (raw)
In-Reply-To: <1263822898.4283.558.camel@laptop>
On Mon, Jan 18, 2010 at 02:54:58PM +0100, Peter Zijlstra wrote:
> On Mon, 2010-01-18 at 14:43 +0100, Frederic Weisbecker wrote:
> >
> > Shouldn't we actually use the core based pmu->enable(),disable()
> > model called from kernel/perf_event.c:event_sched_in(),
> > like every other events, where we can fill up the queue of hardware
> > events to be scheduled, and then call a hw_check_constraints()
> > when we finish a group scheduling?
>
> Well the thing that makes hw_perf_group_sched_in() useful is that you
> can add a bunch of events and not have to reschedule for each one, but
> instead do a single schedule pass.
Well in appearance, things go through one pass.
But actually not, there is a first iteration that collects
the events (walking trhough the group list, filtering soft events),
a second iteration that check the constraints and schedule (but
not apply) the events.
And thereafter we schedule soft events (and revert the whole if needed).
This is a one pass from group_sched_in() POV but at the cost
of reimplementating what the core does wrt soft events and iterations.
And not only is it reinventing the wheel, it also produces more
iterations than we need.
If we were using the common pmu->enable() from group/event_sched_in(),
that would build the collection, with only one iteration through the
group list (instead of one to collect, and one for the software
events).
And the constraints can be validated in a second explicit iteration
through hw_check_constraint(), like it's currently done explicitly
from hw_perf_group_sched_in() that calls x86_schedule_event().
The fact is we have with this patch a _lot_ of iterations each
time x86 get scheduled. This is really a lot for a fast path.
But considering the dynamic cpu events / task events series
we can have, I don't see other alternatives.
But still there are wasteful iterations that can be avoided
with the above statements.
>
> That said you do have a point, maybe we can express this particular
> thing differently.. maybe a pre and post group call like:
>
> void hw_perf_group_sched_in_begin(struct pmu *pmu)
> int hw_perf_group_sched_in_end(struct pmu *pmu)
>
> That way we know we need to track more state for rollback and can give
> the pmu implementation leeway to delay scheduling/availablility tests.
Do you mean this:
hw_perf_group_sched_in_begin(&x86_pmu);
for_each_event(event, group) {
event->enable(); //do the collection here
}
if (hw_perf_group_sched_in_end(&x86_pmu)) {
rollback...
}
That requires to know in advance if we have hardware pmu
in the list though (can be a flag in the group).
> Then there's still the question of having events of multiple hw pmus in
> a single group, I'd be perfectly fine with saying that's not allowed,
> what to others think?
I guess we need that. It can be insteresting to couple
hardware counters with memory accesses...or whatever.
Perf stat combines cache miss counting with page faults,
cpu clock counters.
We shouldn't limit such possibilities for technical/cleanliness
reasons. We should rather adapt.
Hm?
next prev parent reply other threads:[~2010-01-18 14:20 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-01-18 8:58 [PATCH] perf_events: improve x86 event scheduling (v5) Stephane Eranian
2010-01-18 13:43 ` Frederic Weisbecker
2010-01-18 13:54 ` Peter Zijlstra
2010-01-18 14:12 ` Stephane Eranian
2010-01-18 14:20 ` Peter Zijlstra
2010-01-18 14:33 ` Peter Zijlstra
2010-01-18 14:20 ` Frederic Weisbecker [this message]
2010-01-18 14:32 ` Peter Zijlstra
2010-01-18 14:45 ` Frederic Weisbecker
2010-01-18 14:56 ` Peter Zijlstra
2010-01-18 16:18 ` Frederic Weisbecker
2010-01-18 16:26 ` Peter Zijlstra
2010-01-18 16:51 ` Frederic Weisbecker
2010-01-18 17:13 ` Peter Zijlstra
2010-01-18 17:29 ` Frederic Weisbecker
2010-01-18 20:01 ` Peter Zijlstra
2010-01-19 12:22 ` Peter Zijlstra
2010-01-19 13:24 ` Peter Zijlstra
2010-01-19 15:55 ` Frederic Weisbecker
2010-01-19 16:25 ` Peter Zijlstra
2010-02-27 17:38 ` Frederic Weisbecker
2010-01-19 15:40 ` Frederic Weisbecker
2010-01-21 10:08 ` Stephane Eranian
2010-01-21 10:11 ` Peter Zijlstra
2010-01-21 10:21 ` Stephane Eranian
2010-01-21 10:28 ` Peter Zijlstra
2010-01-21 10:38 ` Stephane Eranian
2010-01-21 10:45 ` Frederic Weisbecker
2010-01-21 11:44 ` Stephane Eranian
2010-01-21 12:02 ` Frederic Weisbecker
2010-01-18 14:37 ` Peter Zijlstra
2010-01-18 14:53 ` Frederic Weisbecker
2010-01-18 14:59 ` Peter Zijlstra
2010-01-18 16:22 ` Frederic Weisbecker
2010-01-21 10:36 ` Peter Zijlstra
2010-01-21 10:43 ` Stephane Eranian
2010-01-21 10:46 ` Peter Zijlstra
2010-01-21 14:06 ` Stephane Eranian
2010-01-21 13:55 ` [tip:perf/urgent] perf: x86: Add support for the ANY bit tip-bot for Stephane Eranian
2010-01-29 9:26 ` [tip:perf/core] perf_events, x86: Improve x86 event scheduling tip-bot for Stephane Eranian
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=20100118142004.GD10364@nowhere \
--to=fweisbec@gmail.com \
--cc=davem@davemloft.net \
--cc=eranian@gmail.com \
--cc=eranian@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=paulus@samba.org \
--cc=perfmon2-devel@lists.sf.net \
--cc=peterz@infradead.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