• Kajol Jain's avatar
    perf metricgroup: Fix printing event names of metric group with multiple... · 58fc90fd
    Kajol Jain authored
    perf metricgroup: Fix printing event names of metric group with multiple events incase of overlapping events
    
    Commit f01642e4 ("perf metricgroup: Support multiple events for
    metricgroup") introduced support for multiple events in a metric group.
    But with the current upstream, metric events names are not printed
    properly incase we try to run multiple metric groups with overlapping
    event.
    
    With current upstream version, incase of overlapping metric events issue
    is, we always start our comparision logic from start.  So, the events
    which already matched with some metric group also take part in
    comparision logic. Because of that when we have overlapping events, we
    end up matching current metric group event with already matched one.
    
    For example, in skylake machine we have metric event CoreIPC and
    Instructions. Both of them need 'inst_retired.any' event value.  As
    events in Instructions is subset of events in CoreIPC, they endup in
    pointing to same 'inst_retired.any' value.
    
    In skylake platform:
    
    command:# ./perf stat -M CoreIPC,Instructions  -C 0 sleep 1
    
     Performance counter stats for 'CPU(s) 0':
    
         1,254,992,790      inst_retired.any          # 1254992790.0
                                                        Instructions
                                                      #      1.3 CoreIPC
           977,172,805      cycles
         1,254,992,756      inst_retired.any
    
           1.000802596 seconds time elapsed
    
    command:# sudo ./perf stat -M UPI,IPC sleep 1
    
       Performance counter stats for 'sleep 1':
               948,650      uops_retired.retire_slots
               866,182      inst_retired.any          #      0.7 IPC
               866,182      inst_retired.any
             1,175,671      cpu_clk_unhalted.thread
    
    Patch fixes the issue by adding a new bool pointer 'evlist_used' to keep
    track of events which already matched with some group by setting it
    true.  So, we skip all used events in list when we start comparision
    logic.  Patch also make some changes in comparision logic, incase we get
    a match miss, we discard the whole match and start again with first
    event id in metric event.
    
    With this patch:
    
    In skylake platform:
    
    command:# ./perf stat -M CoreIPC,Instructions  -C 0 sleep 1
    
     Performance counter stats for 'CPU(s) 0':
    
             3,348,415      inst_retired.any          #      0.3 CoreIPC
            11,779,026      cycles
             3,348,381      inst_retired.any          # 3348381.0
                                                        Instructions
    
           1.001649056 seconds time elapsed
    
    command:# ./perf stat -M UPI,IPC sleep 1
    
     Performance counter stats for 'sleep 1':
    
             1,023,148      uops_retired.retire_slots #      1.1 UPI
               924,976      inst_retired.any
               924,976      inst_retired.any          #      0.6 IPC
             1,489,414      cpu_clk_unhalted.thread
    
           1.003064672 seconds time elapsed
    Signed-off-by: default avatarKajol Jain <kjain@linux.ibm.com>
    Acked-by: default avatarJiri Olsa <jolsa@kernel.org>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Andi Kleen <ak@linux.intel.com>
    Cc: Anju T Sudhakar <anju@linux.vnet.ibm.com>
    Cc: Jin Yao <yao.jin@linux.intel.com>
    Cc: Kan Liang <kan.liang@linux.intel.com>
    Cc: Madhavan Srinivasan <maddy@linux.vnet.ibm.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Ravi Bangoria <ravi.bangoria@linux.ibm.com>
    Link: http://lore.kernel.org/lkml/20200221101121.28920-1-kjain@linux.ibm.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    58fc90fd
metricgroup.c 13.5 KB