perf list: Do event name substring search as last resort when no events found
tip-bot for Arnaldo Carvalho de Melo
merge botCommit-ID: dbc67409fa912ba063dfa956af0543af1258fc97 Gitweb: http://git.kernel.org/tip/dbc67409fa912ba063dfa956af0543af1258fc97 Author: Arnaldo Carvalho de Melo <[email protected]> AuthorDate: Thu, 1 Oct 2015 12:12:22 -0300 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Thu, 1 Oct 2015 12:12:22 -0300
perf list: Do event name substring search as last resort when no events found
Before:
# perf list _alloc_ | head -10 #
After:
# perf list _alloc_ | head -10
ext4:ext4_alloc_da_blocks [Tracepoint event]
ext4:ext4_get_implied_cluster_alloc_exit [Tracepoint event]
kmem:kmem_cache_alloc_node [Tracepoint event]
kmem:mm_page_alloc_extfrag [Tracepoint event]
kmem:mm_page_alloc_zone_locked [Tracepoint event]
xen:xen_mmu_alloc_ptpage [Tracepoint event]
#And it works for all types of events:
# perf list br
List of pre-defined events (to be used in -e):
branch-instructions OR branches [Hardware event]
branch-misses [Hardware event]
branch-load-misses [Hardware cache event]
branch-loads [Hardware cache event]
branch-instructions OR cpu/branch-instructions/ [Kernel PMU event]
branch-misses OR cpu/branch-misses/ [Kernel PMU event]
filelock:break_lease_block [Tracepoint event]
filelock:break_lease_noblock [Tracepoint event]
filelock:break_lease_unblock [Tracepoint event]
syscalls:sys_enter_brk [Tracepoint event]
syscalls:sys_exit_brk [Tracepoint event]
#
--- tools/perf/Documentation/perf-list.txt | 2 ++ tools/perf/builtin-list.c | 18 ++++++++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-)
tools/perf/Documentation/perf-list.txt +2 -0
@@ -125,6 +125,8 @@ To limit the list use: . If none of the above is matched, it will apply the supplied glob to all events, printing the ones that match. +. As a last resort, it will do a substring search in all event names. + One or more types can be used at the same time, listing the events for the types specified.
tools/perf/builtin-list.c +16 -2
@@ -45,6 +45,8 @@ int cmd_list(int argc, const char **argv, const char *prefix __maybe_unused) }for (i =0 ; i < argc; ++i) { +char *sep, *s; +if (strcmp (argv[i],"tracepoint" ) ==0 )print_tracepoint_events (NULL ,NULL , raw_dump); else if (strcmp(argv[i], "hw") == 0 ||
@@ -60,8 +62,7 @@ int cmd_list(int argc, const char **argv, const char *prefix __maybe_unused)print_hwcache_events (NULL , raw_dump); else if (strcmp(argv[i], "pmu") == 0) print_pmu_events(NULL, raw_dump); - else { -char *sep =strchr (argv[i],':' ), *s; + else if ((sep = strchr(argv[i], ':')) != NULL) {int sep_idx;if (sep ==NULL ) {
@@ -76,6 +77,19 @@ int cmd_list(int argc, const char **argv, const char *prefix __maybe_unused) s[sep_idx] ='\0' ;print_tracepoint_events (s, s + sep_idx +1 , raw_dump);free (s); + }else { +if (asprintf (&s,"*%s*" , argv[i]) <0 ) { +printf ("Critical: Not enough memory! Trying to continue...\n" ); +continue ; + } +print_symbol_events (s,PERF_TYPE_HARDWARE , + event_symbols_hw,PERF_COUNT_HW_MAX , raw_dump); +print_symbol_events (s,PERF_TYPE_SOFTWARE , + event_symbols_sw,PERF_COUNT_SW_MAX , raw_dump); +print_hwcache_events (s, raw_dump); +print_pmu_events (s, raw_dump); +print_tracepoint_events (NULL , s, raw_dump); +free (s); } }return 0 ;