arm: perf: filter unschedulable events
authorMark Rutland <mark.rutland@arm.com>
Wed, 13 May 2015 16:12:26 +0000 (17:12 +0100)
committerWill Deacon <will.deacon@arm.com>
Wed, 27 May 2015 15:12:36 +0000 (16:12 +0100)
commitc904e32a69b7c77905876fc834f474f13f62c138
tree01c4a7dbfece988438ff5f80972b433929947c7d
parentcc88116da0d18b8292f5437dbc0c4683c8a34ac1
arm: perf: filter unschedulable events

Different CPU microarchitectures implement different PMU events, and
thus events which can be scheduled on one microarchitecture cannot be
scheduled on another, and vice-versa. Some archicted events behave
differently across microarchitectures, and thus cannot be meaningfully
summed. Due to this, we reject the scheduling of an event on a CPU of a
different microarchitecture to that the event targets.

When the core perf code is scheduling events and encounters an event
which cannot be scheduled, it stops attempting to schedule events. As
the perf core periodically rotates the list of events, for some
proportion of the time events which are unschedulable will block events
which are schedulable, resulting in low utilisation of the hardware
counters.

This patch implements a pmu::filter_match callback such that we can
detect and skip such events while scheduling early, before they can
block the schedulable events. This prevents the low HW counter
utilisation issue.

Acked-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
arch/arm/kernel/perf_event.c