perf list: Add s390 support for detailed/verbose pmu event description
PATCH v2 1/1 perf list: Add s390 support for detailed/verbose pmu event description
From: Thomas Richter <[email protected]>
Perf list with flags -d and -v print a description (-d) or a very verbose explanation (-v) of CPU specific counter events. These descriptions are provided with the json files in directory pmu-events/arch/s390/*.json.
Display of these descriptions on s390 requires the corresponding json files.
On s390 this does not work because function is_pmu_core() does not detect the s390 directory name where the CPU specific events are listed. On x86 it is
/sys/bus/event_source/devices/cpu
whereas on s390 it is
/sys/bus/event_source/devices/cpum_cf /sys/bus/event_source/devices/cpum_sf
Fix this by adding s390 directory name testing to function is_pmu_core(). This is the same approach as taken for arm platform.
Output before:
[root@s35lp76 perf]# ./perf list -d pmu
List of pre-defined events (to be used in -e):
cpum_cf/AES_BLOCKED_CYCLES/ [Kernel PMU event] cpum_cf/AES_BLOCKED_FUNCTIONS/ [Kernel PMU event] cpum_cf/AES_CYCLES/ [Kernel PMU event] cpum_cf/AES_FUNCTIONS/ [Kernel PMU event] .... cpum_cf/TX_NC_TEND/ [Kernel PMU event] cpum_cf/VX_BCD_EXECUTION_SLOTS/ [Kernel PMU event] cpum_sf/SF_CYCLES_BASIC/ [Kernel PMU event]
Output after:
[root@s35lp76 perf]# ./perf list -d pmu
List of pre-defined events (to be used in -e):
cpum_cf/AES_BLOCKED_CYCLES/ [Kernel PMU event] cpum_cf/AES_BLOCKED_FUNCTIONS/ [Kernel PMU event] cpum_cf/AES_CYCLES/ [Kernel PMU event] cpum_cf/AES_FUNCTIONS/ [Kernel PMU event] .... cpum_cf/TX_NC_TEND/ [Kernel PMU event] cpum_cf/VX_BCD_EXECUTION_SLOTS/ [Kernel PMU event] cpum_sf/SF_CYCLES_BASIC/ [Kernel PMU event]
3906:
bcd_dfp_execution_slots
[BCD DFP Execution Slots]
decimal_instructions
[Decimal Instructions]
dtlb2_gpage_writes
[DTLB2 GPAGE Writes]
dtlb2_hpage_writes
[DTLB2 HPAGE Writes]
dtlb2_misses
[DTLB2 Misses]
dtlb2_writes
[DTLB2 Writes]
itlb2_misses
[ITLB2 Misses]
itlb2_writes
[ITLB2 Writes]
l1c_tlb2_misses
[L1C TLB2 Misses]
.....
cfvn 3:
cpu_cycles
[CPU Cycles]
instructions
[Instructions]
l1d_dir_writes
[L1D Directory Writes]
l1d_penalty_cycles
[L1D Penalty Cycles]
l1i_dir_writes
[L1I Directory Writes]
l1i_penalty_cycles
[L1I Penalty Cycles]
problem_state_cpu_cycles
[Problem State CPU Cycles]
problem_state_instructions
[Problem State Instructions]
....
csvn generic:
aes_blocked_cycles
[AES Blocked Cycles]
aes_blocked_functions
[AES Blocked Functions]
aes_cycles
[AES Cycles]
aes_functions
[AES Functions]
dea_blocked_cycles
[DEA Blocked Cycles]
dea_blocked_functions
[DEA Blocked Functions]
....
--- tools/perf/util/pmu.c | 6 ++++++ 1 file changed, 6 insertions(+)
tools/perf/util/pmu.c +6 -0
@@ -562,6 +562,12 @@ static int is_pmu_core(const char *name)if (stat (path, &st) ==0 )return 1 ; +/* Look for cpu sysfs (specific to s390) */ +scnprintf (path,PATH_MAX ,"%s/bus/event_source/devices/%s" , + sysfs, name); +if (stat (path, &st) ==0 && !strncmp (name,"cpum_" ,5 )) +return 1 ; +return 0 ; }
Signature · 1 line
2.14.3
Arnaldo Carvalho de Melo
maintainerEm Mon, Apr 16, 2018 at 03:23:14PM +0200, Thomas Richter escreveu:
Quoted 6 lines
From: Thomas Richter <[email protected]>
Perf list with flags -d and -v print a description (-d) or a very verbose explanation (-v) of CPU specific counter events. These descriptions are provided with the json files in directory pmu-events/arch/s390/*.json.
Wasn't this a patch being reviewed by Mark?
- Arnaldo
Quoted 121 lines
Display of these descriptions on s390 requires the corresponding json files.
On s390 this does not work because function
is_pmu_core()does not detect the s390 directory name where the CPU specific events are listed. On x86 it is
/sys/bus/event_source/devices/cpu
whereas on s390 it is
/sys/bus/event_source/devices/cpum_cf/sys/bus/event_source/devices/cpum_sfFix this by adding s390 directory name testing to function
is_pmu_core(). This is the same approach as taken for arm platform.Output before:
[root@s35lp76 perf]# ./perf list -d pmu
List of pre-defined events (to be used in -e):cpum_cf/AES_BLOCKED_CYCLES/ [Kernel PMU event] cpum_cf/AES_BLOCKED_FUNCTIONS/ [Kernel PMU event] cpum_cf/AES_CYCLES/ [Kernel PMU event] cpum_cf/AES_FUNCTIONS/ [Kernel PMU event] .... cpum_cf/TX_NC_TEND/ [Kernel PMU event] cpum_cf/VX_BCD_EXECUTION_SLOTS/ [Kernel PMU event] cpum_sf/SF_CYCLES_BASIC/ [Kernel PMU event]Output after:
[root@s35lp76 perf]# ./perf list -d pmu
List of pre-defined events (to be used in -e):cpum_cf/AES_BLOCKED_CYCLES/ [Kernel PMU event] cpum_cf/AES_BLOCKED_FUNCTIONS/ [Kernel PMU event] cpum_cf/AES_CYCLES/ [Kernel PMU event] cpum_cf/AES_FUNCTIONS/ [Kernel PMU event] .... cpum_cf/TX_NC_TEND/ [Kernel PMU event] cpum_cf/VX_BCD_EXECUTION_SLOTS/ [Kernel PMU event] cpum_sf/SF_CYCLES_BASIC/ [Kernel PMU event]3906:
bcd_dfp_execution_slots
[BCD DFP Execution Slots]
decimal_instructions
[Decimal Instructions]
dtlb2_gpage_writes
[DTLB2 GPAGE Writes]
dtlb2_hpage_writes
[DTLB2 HPAGE Writes]
dtlb2_misses
[DTLB2 Misses]
dtlb2_writes
[DTLB2 Writes]
itlb2_misses
[ITLB2 Misses]
itlb2_writes
[ITLB2 Writes]
l1c_tlb2_misses
[L1C TLB2 Misses]
.....cfvn 3:
cpu_cycles
[CPU Cycles]
instructions
[Instructions]
l1d_dir_writes
[L1D Directory Writes]
l1d_penalty_cycles
[L1D Penalty Cycles]
l1i_dir_writes
[L1I Directory Writes]
l1i_penalty_cycles
[L1I Penalty Cycles]
problem_state_cpu_cycles
[Problem State CPU Cycles]
problem_state_instructions
[Problem State Instructions]
....csvn generic:
aes_blocked_cycles
[AES Blocked Cycles]
aes_blocked_functions
[AES Blocked Functions]
aes_cycles
[AES Cycles]
aes_functions
[AES Functions]
dea_blocked_cycles
[DEA Blocked Cycles]
dea_blocked_functions
[DEA Blocked Functions]
....Signed-off-by Thomas Richter <[email protected]>Reviewed-by Hendrik Brueckner <[email protected]>--- tools/perf/util/pmu.c | 6 ++++++ 1 file changed, 6 insertions(+)tools/perf/util/pmu.c +6
-0@@ -562,6 +562,12 @@ static int is_pmu_core(const char *name)if (stat (path, &st) ==0 )return 1 ; +/* Look for cpu sysfs (specific to s390) */ +scnprintf (path,PATH_MAX ,"%s/bus/event_source/devices/%s" , + sysfs, name); +if (stat (path, &st) ==0 && !strncmp (name,"cpum_" ,5 )) +return 1 ; +return 0 ; }Signature · 1 line
2.14.3
Quoted 27 lines · Thomas Richter
From: Thomas Richter <[email protected]>
Perf list with flags -d and -v print a description (-d) or a very verbose explanation (-v) of CPU specific counter events. These descriptions are provided with the json files in directory pmu-events/arch/s390/*.json.
Display of these descriptions on s390 requires the corresponding json files.
On s390 this does not work because function
is_pmu_core()does not detect the s390 directory name where the CPU specific events are listed. On x86 it is
/sys/bus/event_source/devices/cpu
whereas on s390 it is
/sys/bus/event_source/devices/cpum_cf/sys/bus/event_source/devices/cpum_sfFix this by adding s390 directory name testing to function
is_pmu_core(). This is the same approach as taken for arm platform.tools/perf/util/pmu.c +0
-0
tools/perf/util/pmu.c static int is_pmu_core(const char *name) · line 570
Quoted 9 lines
tools/perf/util/pmu.c +6
-0@@ -562,6 +562,12 @@ static int is_pmu_core(const char *name)if (stat (path, &st) ==0 )return 1 ; +/* Look for cpu sysfs (specific to s390) */ +scnprintf (path,PATH_MAX ,"%s/bus/event_source/devices/%s" , + sysfs, name); +if (stat (path, &st) ==0 && !strncmp (name,"cpum_" ,5 )) +return 1 ; +
This shouldn't adversely affect ARM, so FWIW:
Mark.
Quoted 40 lines · Mark Rutland
Quoted 27 lines · Thomas Richter
From: Thomas Richter <[email protected]>
Perf list with flags -d and -v print a description (-d) or a very verbose explanation (-v) of CPU specific counter events. These descriptions are provided with the json files in directory pmu-events/arch/s390/*.json.
Display of these descriptions on s390 requires the corresponding json files.
On s390 this does not work because function
is_pmu_core()does not detect the s390 directory name where the CPU specific events are listed. On x86 it is
/sys/bus/event_source/devices/cpu
whereas on s390 it is
/sys/bus/event_source/devices/cpum_cf/sys/bus/event_source/devices/cpum_sfFix this by adding s390 directory name testing to function
is_pmu_core(). This is the same approach as taken for arm platform.tools/perf/util/pmu.c +0
-0tools/perf/util/pmu.c static int is_pmu_core(const char *name) · line 570
Quoted 9 lines
tools/perf/util/pmu.c +6
-0@@ -562,6 +562,12 @@ static int is_pmu_core(const char *name)if (stat (path, &st) ==0 )return 1 ; +/* Look for cpu sysfs (specific to s390) */ +scnprintf (path,PATH_MAX ,"%s/bus/event_source/devices/%s" , + sysfs, name); +if (stat (path, &st) ==0 && !strncmp (name,"cpum_" ,5 )) +return 1 ; +This shouldn't adversely affect ARM, so FWIW:
Quoted 2 lines
Acked-by Mark Rutland <[email protected]>
Arnaldo,
with Mark Acked-by can you please apply the patch.
Thanks a lot.
Signature · 5 lines
Thomas Richter, Dept 3303, IBM LTC Boeblingen Germany -- Vorsitzende des Aufsichtsrats: Martina Koederitz Geschäftsführung: Dirk Wittkopp Sitz der Gesellschaft: Böblingen / Registergericht: Amtsgericht Stuttgart, HRB 243294
tip-bot for Thomas Richter
merge bot[tip:perf/urgent] perf list: Add s390 support for detailed/verbose PMU event description
In reply to Thomas Richterperf list: Add s390 support for detailed/verbose PMU event description
Commit-ID: 038586c34301578e538f6c5aa79ca82bce1b9152 Gitweb: https://git.kernel.org/tip/038586c34301578e538f6c5aa79ca82bce1b9152 Author: Thomas Richter <[email protected]> AuthorDate: Mon, 16 Apr 2018 15:23:14 +0200 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Tue, 17 Apr 2018 09:47:39 -0300
perf list: Add s390 support for detailed/verbose PMU event description
'perf list' with flags -d and -v print a description (-d) or a very verbose explanation (-v) of CPU specific counter events. These descriptions are provided with the json files in directory pmu-events/arch/s390/*.json.
Display of these descriptions on s390 requires the corresponding json files.
On s390 this does not work because function is_pmu_core() does not detect the s390 directory name where the CPU specific events are listed. On x86 it is:
/sys/bus/event_source/devices/cpu
whereas on s390 it is:
/sys/bus/event_source/devices/cpum_cf
/sys/bus/event_source/devices/cpum_sf
Fix this by adding s390 directory name testing to function is_pmu_core(). This is the same approach as taken for the ARM platform.
Output before:
[root@s35lp76 perf]# ./perf list -d pmu
List of pre-defined events (to be used in -e):
cpum_cf/AES_BLOCKED_CYCLES/ [Kernel PMU event] cpum_cf/AES_BLOCKED_FUNCTIONS/ [Kernel PMU event] cpum_cf/AES_CYCLES/ [Kernel PMU event] cpum_cf/AES_FUNCTIONS/ [Kernel PMU event] .... cpum_cf/TX_NC_TEND/ [Kernel PMU event] cpum_cf/VX_BCD_EXECUTION_SLOTS/ [Kernel PMU event] cpum_sf/SF_CYCLES_BASIC/ [Kernel PMU event]
Output after:
[root@s35lp76 perf]# ./perf list -d pmu
List of pre-defined events (to be used in -e):
cpum_cf/AES_BLOCKED_CYCLES/ [Kernel PMU event] cpum_cf/AES_BLOCKED_FUNCTIONS/ [Kernel PMU event] cpum_cf/AES_CYCLES/ [Kernel PMU event] cpum_cf/AES_FUNCTIONS/ [Kernel PMU event] .... cpum_cf/TX_NC_TEND/ [Kernel PMU event] cpum_cf/VX_BCD_EXECUTION_SLOTS/ [Kernel PMU event] cpum_sf/SF_CYCLES_BASIC/ [Kernel PMU event]
3906:
bcd_dfp_execution_slots
[BCD DFP Execution Slots]
decimal_instructions
[Decimal Instructions]
dtlb2_gpage_writes
[DTLB2 GPAGE Writes]
dtlb2_hpage_writes
[DTLB2 HPAGE Writes]
dtlb2_misses
[DTLB2 Misses]
dtlb2_writes
[DTLB2 Writes]
itlb2_misses
[ITLB2 Misses]
itlb2_writes
[ITLB2 Writes]
l1c_tlb2_misses
[L1C TLB2 Misses]
.....
cfvn 3:
cpu_cycles
[CPU Cycles]
instructions
[Instructions]
l1d_dir_writes
[L1D Directory Writes]
l1d_penalty_cycles
[L1D Penalty Cycles]
l1i_dir_writes
[L1I Directory Writes]
l1i_penalty_cycles
[L1I Penalty Cycles]
problem_state_cpu_cycles
[Problem State CPU Cycles]
problem_state_instructions
[Problem State Instructions]
....
csvn generic:
aes_blocked_cycles
[AES Blocked Cycles]
aes_blocked_functions
[AES Blocked Functions]
aes_cycles
[AES Cycles]
aes_functions
[AES Functions]
dea_blocked_cycles
[DEA Blocked Cycles]
dea_blocked_functions
[DEA Blocked Functions]
....
--- tools/perf/util/pmu.c | 6 ++++++ 1 file changed, 6 insertions(+)
tools/perf/util/pmu.c +6 -0
@@ -562,6 +562,12 @@ static int is_pmu_core(const char *name)if (stat (path, &st) ==0 )return 1 ; +/* Look for cpu sysfs (specific to s390) */ +scnprintf (path,PATH_MAX ,"%s/bus/event_source/devices/%s" , + sysfs, name); +if (stat (path, &st) ==0 && !strncmp (name,"cpum_" ,5 )) +return 1 ; +return 0 ; }