perf parse-events: Create two hybrid hardware events
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: Jin Yao <yao.jin@linux.intel.com>
Reviewed-by: Jiri 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.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>