perf probe -F with wildcards
Arnaldo Carvalho de Melo
maintainerHi Masami,
I think this worked at some point?
[root@jouet acme]# perf probe -F | tail zswap_frontswap_initzswap_frontswap_invalidate_area zswap_frontswap_invalidate_pagezswap_frontswap_loadzswap_frontswap_storezswap_pool_createzswap_pool_currentzswap_update_total_sizezswap_writeback_entryzswap_zpool_param_set
[root@jouet acme]# perf probe -F rt_sp*
no symbols found in [kernel.kallsyms], maybe install a debug package? Failed to load symbols in kernel
[root@jouet acme]# perf probe -F rt_sp\*
no symbols found in [kernel.kallsyms], maybe install a debug package? Failed to load symbols in kernel
[root@jouet acme]#
I.e. the second message is misleading :-\
- Arnaldo
Hi Arnaldo,
Quoted 4 lines · On Thu, 14 Jul 2016 21:16:41 -0300 Arnaldo Carvalho de Melo <[email protected]>…
Hi Masami,
I think this worked at some point?
Quoted 14 lines
[root@jouet acme]# perf probe -F | tail
zswap_frontswap_initzswap_frontswap_invalidate_areazswap_frontswap_invalidate_pagezswap_frontswap_loadzswap_frontswap_storezswap_pool_createzswap_pool_currentzswap_update_total_sizezswap_writeback_entryzswap_zpool_param_set
[root@jouet acme]# perf probe -F rt_sp*
no symbols found in [kernel.kallsyms], maybe install a debug package? Failed to load symbols in kernel
It seems that 2 problems we have,
- There is no function which starts with rt_sp.
- The error message is not good for that.
If you try perf probe -F acpi_*, you'll see a list of functions.
Quoted 3 lines
[root@jouet acme]# perf probe -F rt_sp\*
no symbols found in [kernel.kallsyms], maybe install a debug package? Failed to load symbols in kernel
So, yeah, it should check symbol loading is really failed and should be changed as "no symbols match to given filter" etc.
Thank you,
Quoted 9 lines
[root@jouet acme]#
I.e. the second message is misleading :-\
- Arnaldo
Signature · 1 line
Masami Hiramatsu <[email protected]>
Arnaldo Carvalho de Melo
maintainerEm Fri, Jul 15, 2016 at 04:15:48PM +0900, Masami Hiramatsu escreveu:
Quoted 20 lines
Quoted 16 lines · On Thu, 14 Jul 2016 21:16:41 -0300 Arnaldo Carvalho de Melo <[email protected]>…
I think this worked at some point?
[root@jouet acme]# perf probe -F | tail
zswap_frontswap_initzswap_frontswap_invalidate_areazswap_frontswap_invalidate_pagezswap_frontswap_loadzswap_frontswap_storezswap_pool_createzswap_pool_currentzswap_update_total_sizezswap_writeback_entryzswap_zpool_param_set
[root@jouet acme]# perf probe -F rt_sp*
no symbols found in [kernel.kallsyms], maybe install a debug package? Failed to load symbols in kernel
Quoted 2 lines
It seems that 2 problems we have,
- There is no function which starts withrt_sp.
Yeah, that is the problem at hand, I figured there weren't functions liek that, but the error message was tottally misleading :-)
Quoted 9 lines
- The error message is not good for that.
If you try perf probe -F acpi_*, you'll see a list of functions.Quoted 3 lines
[root@jouet acme]# perf probe -F rt_sp\*
no symbols found in [kernel.kallsyms], maybe install a debug package? Failed to load symbols in kernelSo, yeah, it should check symbol loading is really failed and should be changed as "no symbols match to given filter" etc.
Right,
- Arnaldo
PATCH 1/1 perf-probe: Warn unmatched function filter correctly
Warn unmatched function filter correctly instead of warning "symbol-loading error", since that can be a filter issue.
Quoted 1 line
From the technical point of view, this adds a filter chech
in map__load and if there is a filter, it returns -2 (filter-out), instead of -1 (error), and perf-probe checks it and change message.
E.g. without this fix:
----
# perf probe -F rt_sp*
no symbols found in [kernel.kallsyms], maybe install a debug package?
Failed to load symbols in kernel
----
With this fix:
----
# perf probe -F rt_sp*
no symbols passed the given filter.
Failed to find symbols matched to "rt_sp*"
Error: Failed to show functions.
------- tools/perf/util/map.c | 3 +++ tools/perf/util/probe-event.c | 12 ++++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-)
tools/perf/util/map.c +3 -0
@@ -312,6 +312,9 @@ int map__load(struct map *map, symbol_filter_t filter)pr_warning ("%.*s was updated (is prelink enabled?). " "Restart the long running apps that use it!\n" , (int )real_len, name); + }else if (filter) { +pr_warning ("no symbols passed the given filter.\n" ); +return -2 ;/* Empty but maybe by the filter */ }else {pr_warning ("no symbols found in %s, maybe install " "a debug package?\n" , name);
tools/perf/util/probe-event.c +10 -2
@@ -3312,8 +3312,16 @@ int show_available_funcs(const char *target, struct strfilter *_filter,/* Load symbols with given filter */ available_func_filter = _filter; -if (map__load (map, filter_available_functions)) { -pr_err ("Failed to load symbols in %s\n" , (target) ? :"kernel" ); + ret =map__load (map, filter_available_functions); +if (ret) { +if (ret ==-2 ) { +char *str =strfilter__string (_filter); +pr_err ("Failed to find symbols matched to \"%s\"\n" , + str); +free (str); + }else +pr_err ("Failed to load symbols in %s\n" , + (target) ? :"kernel" ); goto end; }if (!dso__sorted_by_name (map->dso, map->type))
tip-bot for Masami Hiramatsu
merge bot[tip:perf/core] perf probe: Warn unmatched function filter correctly
perf probe: Warn unmatched function filter correctly
Commit-ID: e70493429bb1acaad829caae01c61dd7056fe671 Gitweb: http://git.kernel.org/tip/e70493429bb1acaad829caae01c61dd7056fe671 Author: Masami Hiramatsu <[email protected]> AuthorDate: Tue, 19 Jul 2016 01:12:41 +0900 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Mon, 18 Jul 2016 19:46:34 -0300
perf probe: Warn unmatched function filter correctly
Warn unmatched function filter correctly instead of warning "symbol-loading error", since that can be a filter issue.
Quoted 1 line
From the technical point of view, this adds a filter chech in
map__load
and if there is a filter, it returns -2 (filter-out), instead of -1 (error), and perf-probe checks it and change message.
E.g. without this fix:
# perf probe -F rt_sp* no symbols found in [kernel.kallsyms], maybe install a debug package? Failed to load symbols in kernel
With this fix:
# perf probe -F rt_sp*
no symbols passed the given filter.
Failed to find symbols matched to "rt_sp*"
Error: Failed to show functions.--- tools/perf/util/map.c | 3 +++ tools/perf/util/probe-event.c | 12 ++++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-)
tools/perf/util/map.c +3 -0
@@ -312,6 +312,9 @@ int map__load(struct map *map, symbol_filter_t filter)pr_warning ("%.*s was updated (is prelink enabled?). " "Restart the long running apps that use it!\n" , (int )real_len, name); + }else if (filter) { +pr_warning ("no symbols passed the given filter.\n" ); +return -2 ;/* Empty but maybe by the filter */ }else {pr_warning ("no symbols found in %s, maybe install " "a debug package?\n" , name);
tools/perf/util/probe-event.c +10 -2
@@ -3312,8 +3312,16 @@ int show_available_funcs(const char *target, struct strfilter *_filter,/* Load symbols with given filter */ available_func_filter = _filter; -if (map__load (map, filter_available_functions)) { -pr_err ("Failed to load symbols in %s\n" , (target) ? :"kernel" ); + ret =map__load (map, filter_available_functions); +if (ret) { +if (ret ==-2 ) { +char *str =strfilter__string (_filter); +pr_err ("Failed to find symbols matched to \"%s\"\n" , + str); +free (str); + }else +pr_err ("Failed to load symbols in %s\n" , + (target) ? :"kernel" ); goto end; }if (!dso__sorted_by_name (map->dso, map->type))