• Jin Yao's avatar
    perf parse-events: Create two hybrid hardware events · 9cbfa2f6
    Jin Yao authored
    Current hardware events has special perf types PERF_TYPE_HARDWARE.
    But it doesn't pass the PMU type in the user interface. For a hybrid
    system, the perf kernel doesn't know which PMU the events belong to.
    
    So now this type is extended to be PMU aware type. The PMU type ID
    is stored at attr.config[63:32].
    
    PMU type ID is retrieved from sysfs.
    
      root@lkp-adl-d01:/sys/devices/cpu_atom# cat type
      8
    
      root@lkp-adl-d01:/sys/devices/cpu_core# cat type
      4
    
    When enabling a hybrid hardware event without specified pmu, such as,
    'perf stat -e cycles -a', two events are created automatically. One
    is for atom, the other is for core.
    
      # perf stat -e cycles -a -vv -- sleep 1
      Control descriptor is not initialized
      ------------------------------------------------------------
      perf_event_attr:
        size                             120
        config                           0x400000000
        sample_type                      IDENTIFIER
        read_format                      TOTAL_TIME_ENABLED|TOTAL_TIME_RUNNING
        disabled                         1
        inherit                          1
        exclude_guest                    1
      ------------------------------------------------------------
      sys_perf_event_open: pid -1  cpu 0  group_fd -1  flags 0x8 = 3
      ------------------------------------------------------------
      ...
      ------------------------------------------------------------
      perf_event_attr:
        size                             120
        config                           0x400000000
        sample_type                      IDENTIFIER
        read_format                      TOTAL_TIME_ENABLED|TOTAL_TIME_RUNNING
        disabled                         1
        inherit                          1
        exclude_guest                    1
      ------------------------------------------------------------
      sys_perf_event_open: pid -1  cpu 15  group_fd -1  flags 0x8 = 19
      ------------------------------------------------------------
      perf_event_attr:
        size                             120
        config                           0x800000000
        sample_type                      IDENTIFIER
        read_format                      TOTAL_TIME_ENABLED|TOTAL_TIME_RUNNING
        disabled                         1
        inherit                          1
        exclude_guest                    1
      ------------------------------------------------------------
      sys_perf_event_open: pid -1  cpu 16  group_fd -1  flags 0x8 = 20
      ------------------------------------------------------------
      ...
      ------------------------------------------------------------
      perf_event_attr:
        size                             120
        config                           0x800000000
        sample_type                      IDENTIFIER
        read_format                      TOTAL_TIME_ENABLED|TOTAL_TIME_RUNNING
        disabled                         1
        inherit                          1
        exclude_guest                    1
      ------------------------------------------------------------
      sys_perf_event_open: pid -1  cpu 23  group_fd -1  flags 0x8 = 27
      cycles: 0: 836272 1001525722 1001525722
      cycles: 1: 628564 1001580453 1001580453
      cycles: 2: 872693 1001605997 1001605997
      cycles: 3: 70417 1001641369 1001641369
      cycles: 4: 88593 1001726722 1001726722
      cycles: 5: 470495 1001752993 1001752993
      cycles: 6: 484733 1001840440 1001840440
      cycles: 7: 1272477 1001593105 1001593105
      cycles: 8: 209185 1001608616 1001608616
      cycles: 9: 204391 1001633962 1001633962
      cycles: 10: 264121 1001661745 1001661745
      cycles: 11: 826104 1001689904 1001689904
      cycles: 12: 89935 1001728861 1001728861
      cycles: 13: 70639 1001756757 1001756757
      cycles: 14: 185266 1001784810 1001784810
      cycles: 15: 171094 1001825466 1001825466
      cycles: 0: 129624 1001854843 1001854843
      cycles: 1: 122533 1001840421 1001840421
      cycles: 2: 90055 1001882506 1001882506
      cycles: 3: 139607 1001896463 1001896463
      cycles: 4: 141791 1001907838 1001907838
      cycles: 5: 530927 1001883880 1001883880
      cycles: 6: 143246 1001852529 1001852529
      cycles: 7: 667769 1001872626 1001872626
      cycles: 6744979 16026956922 16026956922
      cycles: 1965552 8014991106 8014991106
    
       Performance counter stats for 'system wide':
    
               6,744,979      cpu_core/cycles/
               1,965,552      cpu_atom/cycles/
    
             1.001882711 seconds time elapsed
    
    0x4 in 0x400000000 indicates the cpu_core pmu.
    0x8 in 0x800000000 indicates the cpu_atom pmu.
    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-9-yao.jin@linux.intel.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    9cbfa2f6
parse-events.c 75.6 KB