• Jin Yao's avatar
    perf stat: Add default hybrid events · ac2dc29e
    Jin Yao authored
    
    
    Previously if '-e' is not specified in perf stat, some software events
    and hardware events are added to evlist by default.
    
    Before:
    
      # perf stat -a -- sleep 1
    
       Performance counter stats for 'system wide':
    
               24,044.40 msec cpu-clock                 #   23.946 CPUs utilized
                      99      context-switches          #    4.117 /sec
                      24      cpu-migrations            #    0.998 /sec
                       3      page-faults               #    0.125 /sec
               7,000,244      cycles                    #    0.000 GHz
               2,955,024      instructions              #    0.42  insn per cycle
                 608,941      branches                  #   25.326 K/sec
                  31,991      branch-misses             #    5.25% of all branches
    
             1.004106859 seconds time elapsed
    
    Among the events, cycles, instructions, branches and branch-misses
    are hardware events.
    
    One hybrid platform, two hardware events are created for one
    hardware event.
    
    cpu_core/cycles/,
    cpu_atom/cycles/,
    cpu_core/instructions/,
    cpu_atom/instructions/,
    cpu_core/branches/,
    cpu_atom/branches/,
    cpu_core/branch-misses/,
    cpu_atom/branch-misses/
    
    These events would be added to evlist on hybrid platform.
    
    Since parse_events() has been supported to create two hardware events
    for one event on hybrid platform, so we just use parse_events(evlist,
    "cycles,instructions,branches,branch-misses") to create the default
    events and add them to evlist.
    
    After:
    
      # perf stat -a -- sleep 1
    
       Performance counter stats for 'system wide':
    
               24,043.99 msec cpu-clock                 #   23.991 CPUs utilized
                     139      context-switches          #    5.781 /sec
                      25      cpu-migrations            #    1.040 /sec
                       6      page-faults               #    0.250 /sec
              10,381,751      cpu_core/cycles/          #  431.782 K/sec
               1,264,216      cpu_atom/cycles/          #   52.579 K/sec
               3,406,958      cpu_core/instructions/    #  141.697 K/sec
                 414,588      cpu_atom/instructions/    #   17.243 K/sec
                 705,149      cpu_core/branches/        #   29.327 K/sec
                  82,358      cpu_atom/branches/        #    3.425 K/sec
                  40,821      cpu_core/branch-misses/   #    1.698 K/sec
                   9,086      cpu_atom/branch-misses/   #  377.891 /sec
    
             1.002228863 seconds time elapsed
    
    We can see two events are created for one hardware event.
    
    One TODO is, the shadow stats looks a bit different, now it's just
    'M/sec'.
    
    The perf_stat__update_shadow_stats and perf_stat__print_shadow_stats
    need to be improved in future if we want to get the original shadow
    stats.
    Signed-off-by: default avatarJin Yao <yao.jin@linux.intel.com>
    Reviewed-by: default avatarJiri Olsa <jolsa@kernel.org>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Andi Kleen <ak@linux.intel.com>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Kan Liang <kan.liang@intel.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Link: https://lore.kernel.org/r/20210427070139.25256-15-yao.jin@linux.intel.com
    
    Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    ac2dc29e
builtin-stat.c 68.9 KB