• Zhengjun Xing's avatar
    perf stat: Support metrics with hybrid events · 60344f1a
    Zhengjun Xing authored
    One metric such as 'Kernel_Utilization' may be from different PMUs and
    consists of different events.
    
    For core,
    Kernel_Utilization = cpu_clk_unhalted.thread:k / cpu_clk_unhalted.thread
    
    For atom,
    Kernel_Utilization = cpu_clk_unhalted.core:k / cpu_clk_unhalted.core
    
    The metric group string for core is:
    '{cpu_clk_unhalted.thread/metric-id=cpu_clk_unhalted.thread:k/k,cpu_clk_unhalted.thread/metric-id=cpu_clk_unhalted.thread/}:W'
    It's internally expanded to:
    '{cpu_clk_unhalted.thread_p/metric-id=cpu_clk_unhalted.thread_p:k/k,cpu_clk_unhalted.thread/metric-id=cpu_clk_unhalted.thread/}:W#cpu_core'
    
    The metric group string for atom is:
    '{cpu_clk_unhalted.core/metric-id=cpu_clk_unhalted.core:k/k,cpu_clk_unhalted.core/metric-id=cpu_clk_unhalted.core/}:W'
    It's internally expanded to:
    '{cpu_clk_unhalted.core/metric-id=cpu_clk_unhalted.core:k/k,cpu_clk_unhalted.core/metric-id=cpu_clk_unhalted.core/}:W#cpu_atom'
    
    That means the group "{cpu_clk_unhalted.thread:k,cpu_clk_unhalted.thread}:W"
    is from cpu_core PMU and the group "{cpu_clk_unhalted.core:k,cpu_clk_unhalted.core}"
    is from cpu_atom PMU. And then next, check if the events in the group are
    valid on that PMU. If one event is not valid on that PMU, the associated
    group would be removed internally.
    
    In this example, cpu_clk_unhalted.thread is valid on cpu_core and
    cpu_clk_unhalted.core is valid on cpu_atom. So the checks for these two
    groups are passed.
    
    Before:
    
      # ./perf stat -M Kernel_Utilization -a sleep 1
    WARNING: events in group from different hybrid PMUs!
    WARNING: grouped events cpus do not match, disabling group:
      anon group { CPU_CLK_UNHALTED.THREAD_P:k, CPU_CLK_UNHALTED.THREAD_P:k, CPU_CLK_UNHALTED.THREAD, CPU_CLK_UNHALTED.THREAD }
    
     Performance counter stats for 'system wide':
    
            17,639,501      cpu_atom/CPU_CLK_UNHALTED.CORE/ #     1.00 Kernel_Utilization
            17,578,757      cpu_atom/CPU_CLK_UNHALTED.CORE:k/
         1,005,350,226 ns   duration_time
            43,012,352      cpu_core/CPU_CLK_UNHALTED.THREAD_P:k/ #     0.99 Kernel_Utilization
            17,608,010      cpu_atom/CPU_CLK_UNHALTED.THREAD_P:k/
            43,608,755      cpu_core/CPU_CLK_UNHALTED.THREAD/
            17,630,838      cpu_atom/CPU_CLK_UNHALTED.THREAD/
         1,005,350,226 ns   duration_time
    
           1.005350226 seconds time elapsed
    
    After:
    
      # ./perf stat -M Kernel_Utilization -a sleep 1
    
     Performance counter stats for 'system wide':
    
            17,981,895      CPU_CLK_UNHALTED.CORE [cpu_atom] #     1.00 Kernel_Utilization
            17,925,405      CPU_CLK_UNHALTED.CORE:k [cpu_atom]
         1,004,811,366 ns   duration_time
            41,246,425      CPU_CLK_UNHALTED.THREAD_P:k [cpu_core] #     0.99 Kernel_Utilization
            41,819,129      CPU_CLK_UNHALTED.THREAD [cpu_core]
         1,004,811,366 ns   duration_time
    
           1.004811366 seconds time elapsed
    Reviewed-by: default avatarKan Liang <kan.liang@linux.intel.com>
    Signed-off-by: default avatarXing Zhengjun <zhengjun.xing@linux.intel.com>
    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Alexander Shishkin <alexander.shishkin@intel.com>
    Cc: Andi Kleen <ak@linux.intel.com>
    Cc: Ian Rogers <irogers@google.com>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Link: https://lore.kernel.org/r/20220422065635.767648-1-zhengjun.xing@linux.intel.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    60344f1a
metricgroup.c 46 KB