public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
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: Tue, 19 Jan 2010 16:40:14 +0100	[thread overview]
Message-ID: <20100119154012.GD8061@nowhere> (raw)
In-Reply-To: <1263903773.4283.657.camel@laptop>

On Tue, Jan 19, 2010 at 01:22:53PM +0100, Peter Zijlstra wrote:
> On Mon, 2010-01-18 at 18:29 +0100, Frederic Weisbecker wrote:
> 
> > It has constraints that only need to be checked when we register
> > the event. It has also constraint on enable time but nothing
> > tricky that requires an overwritten group scheduling.
> 
> The fact that ->enable() can fail makes it a hardware counter. Software
> counters cannot fail enable.
> 
> Having multiple groups of failable events (multiple hardware pmus) can
> go wrong with the current core in interesting ways, look for example at
> __perf_event_sched_in():
> 
> It does:
> 
> 	int can_add_hw = 1;
> 
> 	...
> 
> 	list_for_each_entry(event, &ctx->flexible_groups, group_entry) {
> 		/* Ignore events in OFF or ERROR state */
> 		if (event->state <= PERF_EVENT_STATE_OFF)
> 			continue;
> 		/*
> 		 * Listen to the 'cpu' scheduling filter constraint
> 		 * of events:
> 		 */
> 		if (event->cpu != -1 && event->cpu != cpu)
> 			continue;
> 
> 		if (group_can_go_on(event, cpuctx, can_add_hw))
> 			if (group_sched_in(event, cpuctx, ctx, cpu))
> 				can_add_hw = 0;
> 	}
> 
> Now, if you look at that logic you'll see that it assumes there's one hw
> device since it only has one can_add_hw state. So if your hw_breakpoint
> pmu starts to fail we'll also stop adding counters to the cpu pmu (for
> lack of a better name) and vs.


Indeed.


> 
> This might be fixable by using per-cpu struct pmu variables. 


Yeah or just a mask instead of can_add_hw that can testify
a given pmu type couldn't be scheduled anymore?

We can extend struct perf_event:group_flags:

enum perf_group_flag {
	PERF_GROUP_NO_HARDWARE = 0x1,
	PERF_GROUP_NO_BREAKPOINT = 0x2
	PERF_GROUP_SOFTWARE = PERF_GROUP_NO_HARDWARE | PERF_GROUP_NO_BREAKPOINT;
};


Looks easy to maintain and to use for quick bitwise check
on flexible groups scheduling.


> However I'm afraid its far to late to push any of that into .33, which
> means .33 will have rather funny behaviour once the breakpoints start
> getting used.


No. Because for now it is not supposed to happen that a breakpoint
can't be scheduled.

We have constraints that check whether a pinned breakpoint will
always be able to go in, on registration. Similarly we have
constraints for flexible ones, to ensure it's possible for these
to be scheduled. But these are broken because of the non-strict
ordering between pinned and non-pinned events.

Anyway, the point is that for now we treat flexible breakpoints
as if these were pinned, so a breakpoint is not supposed to
be unschedulable, ever. So .33 is not broken.

But we need to fix what you described for .34, because once we
get a strict ordering between pinned and flexible, I'm going
to reactivate the breakpoint constraints for flexibles.


  parent reply	other threads:[~2010-01-19 15:40 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
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 [this message]
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=20100119154012.GD8061@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