• Ian Rogers's avatar
    perf parse-events: Architecture specific leader override · 94dbfd67
    Ian Rogers authored
    Currently topdown events must appear after a slots event:
    
      $ perf stat -e '{slots,topdown-fe-bound}' /bin/true
    
       Performance counter stats for '/bin/true':
    
             3,183,090      slots
               986,133      topdown-fe-bound
    
    Reversing the events yields:
    
      $ perf stat -e '{topdown-fe-bound,slots}' /bin/true
      Error:
      The sys_perf_event_open() syscall returned with 22 (Invalid argument) for event (topdown-fe-bound).
    
    For metrics the order of events is determined by iterating over a
    hashmap, and so slots isn't guaranteed to be first which can yield this
    error.
    
    Change the set_leader in parse-events, called when a group is closed, so
    that rather than always making the first event the leader, if the slots
    event exists then it is made the leader. It is then moved to the head of
    the evlist otherwise it won't be opened in the correct order.
    
    The result is:
    
      $ perf stat -e '{topdown-fe-bound,slots}' /bin/true
    
       Performance counter stats for '/bin/true':
    
             3,274,795      slots
             1,001,702      topdown-fe-bound
    
    A problem with this approach is the slots event is identified by name,
    names can be overwritten like 'cpu/slots,name=foo/' and this causes the
    leader change to fail.
    
    The change also modifies and fixes mixed groups like, with the change:
    
      $ perf stat -e '{instructions,slots,topdown-fe-bound}' -a -- sleep 2
    
       Performance counter stats for 'system wide':
    
            5574985410      slots
             971981616      instructions
            1348461887      topdown-fe-bound
    
           2.001263120 seconds time elapsed
    
    Without the change:
    
      $ perf stat -e '{instructions,slots,topdown-fe-bound}' -a -- sleep 2
    
       Performance counter stats for 'system wide':
    
         <not counted>      instructions
         <not counted>      slots
       <not supported>      topdown-fe-bound
    
           2.006247990 seconds time elapsed
    
    Something that may be undesirable here is that the events are reordered
    in the output.
    Reviewed-by: default avatarKajol Jain <kjain@linux.ibm.com>
    Signed-off-by: default avatarIan Rogers <irogers@google.com>
    Acked-by: default avatarJiri Olsa <jolsa@redhat.com>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Andi Kleen <ak@linux.intel.com>
    Cc: John Garry <john.garry@huawei.com>
    Cc: Kajol Jain <kjain@linux.ibm.com>
    Cc: Kan Liang <kan.liang@linux.intel.com>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Paul Clarke <pc@us.ibm.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Riccardo Mancini <rickyman7@gmail.com>
    Cc: Stephane Eranian <eranian@google.com>
    Cc: Vineet Singh <vineet.singh@intel.com>
    Link: http://lore.kernel.org/lkml/20211130174945.247604-2-irogers@google.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    94dbfd67
parse-events.c 80.6 KB