• Mark Rutland's avatar
    perf/core: Fix pmu::filter_match for SW-led groups · 711a78a7
    Mark Rutland authored
    commit 2c81a647 upstream.
    
    The following commit:
    
      66eb579e ("perf: allow for PMU-specific event filtering")
    
    added the pmu::filter_match() callback. This was intended to
    avoid HW constraints on events from resulting in extremely
    pessimistic scheduling.
    
    However, pmu::filter_match() is only called for the leader of each event
    group. When the leader is a SW event, we do not filter the groups, and
    may fail at pmu::add() time, and when this happens we'll give up on
    scheduling any event groups later in the list until they are rotated
    ahead of the failing group.
    
    This can result in extremely sub-optimal event scheduling behaviour,
    e.g. if running the following on a big.LITTLE platform:
    
    $ taskset -c 0 ./perf stat \
     -e 'a57{context-switches,armv8_cortex_a57/config=0x11/}' \
     -e 'a53{context-switches,armv8_cortex_a53/config=0x11/}' \
     ls
    
         <not counted>      context-switches                                              (0.00%)
         <not counted>      armv8_cortex_a57/config=0x11/                                 (0.00%)
                    24      context-switches                                              (37.36%)
              57589154      armv8_cortex_a53/config=0x11/                                 (37.36%)
    
    Here the 'a53' event group was always eligible to be scheduled, but
    the 'a57' group never eligible to be scheduled, as the task was always
    affine to a Cortex-A53 CPU. The SW (group leader) event in the 'a57'
    group was eligible, but the HW event failed at pmu::add() time,
    resulting in ctx_flexible_sched_in giving up on scheduling further
    groups with HW events.
    
    One way of avoiding this is to check pmu::filter_match() on siblings
    as well as the group leader. If any of these fail their
    pmu::filter_match() call, we must skip the entire group before
    attempting to add any events.
    Signed-off-by: default avatarMark Rutland <mark.rutland@arm.com>
    Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Arnaldo Carvalho de Melo <acme@kernel.org>
    Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Will Deacon <will.deacon@arm.com>
    Fixes: 66eb579e ("perf: allow for PMU-specific event filtering")
    Link: http://lkml.kernel.org/r/1465917041-15339-1-git-send-email-mark.rutland@arm.com
    [ Small readability edits. ]
    Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    711a78a7
core.c 222 KB