Skip to contentSkip to conversation

perf probe -F with wildcards

PATCH New Arnaldo Carvalho de Melo 3 participants 5 messages Jul 15, 2016 – Jul 19, 2016 perf events

lore
Share & tools
lore

Arnaldo Carvalho de Melo

author maintainer
#0 lore raw

Hi Masami,

I think this worked at some point?

[root@jouet acme]# perf probe -F | tail zswap_frontswap_init
zswap_frontswap_invalidate_area zswap_frontswap_invalidate_page
zswap_frontswap_load
zswap_frontswap_store
zswap_pool_create
zswap_pool_current
zswap_update_total_size
zswap_writeback_entry
zswap_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

#1 lore raw

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_init
zswap_frontswap_invalidate_area zswap_frontswap_invalidate_page
zswap_frontswap_load
zswap_frontswap_store
zswap_pool_create
zswap_pool_current
zswap_update_total_size
zswap_writeback_entry
zswap_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]>
author maintainer
#2 lore raw

Em 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_init
zswap_frontswap_invalidate_area zswap_frontswap_invalidate_page
zswap_frontswap_load
zswap_frontswap_store
zswap_pool_create
zswap_pool_current
zswap_update_total_size
zswap_writeback_entry
zswap_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 with rt_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 kernel

So, yeah, it should check symbol loading is really failed and should be changed as "no symbols match to given filter" etc.

Right,

- Arnaldo

#3 lore raw

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
index b39b12a..728129a 100644
@@ -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
index d4f8835..953dc1a 100644
@@ -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))
#4 lore raw

[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
index b39b12a..728129a 100644
@@ -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
index d4f8835..953dc1a 100644
@@ -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))