Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1208060

[RFC PATCH perf/core v3 09/17] perf probe: Remove caches when --cache is given

From Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Newsgroups linux.kernel
Subject [RFC PATCH perf/core v3 09/17] perf probe: Remove caches when --cache is given
Date 2015-08-15 13:50 +0200
Message-ID <pXI8i-eC-15@gated-at.bofh.it> (permalink)
References <pXI8i-eC-3@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


perf-probe --del removes caches when --cache is given.
Note that the delete pattern is not same as normal events.

If you cached probes with event name, --del "eventname"
works as expected. However, if you skipped it, the cached
probes doesn't have actual event name. In that case
 --del "probe-desc" is required (wildcard is acceptable).
For example a cache entry has the probe-desc "vfs_read $params",
you can remove it with --del 'vfs_read*'.

  -----
  # perf probe --cache --list
  /[kernel.kallsyms] (1466a0a250b5d0070c6d0f03c5fed30b237970a1):
  vfs_read $params
  /usr/lib64/libc-2.17.so (c31ffe7942bfd77b2fca8f9bd5709d387a86d3bc):
  getaddrinfo $params

  # perf probe --cache --del vfs_read\*
  Removed event: probe:vfs_read

  # perf probe --cache --list
  /[kernel.kallsyms] (1466a0a250b5d0070c6d0f03c5fed30b237970a1):
  /usr/lib64/libc-2.17.so (c31ffe7942bfd77b2fca8f9bd5709d387a86d3bc):
  getaddrinfo $params
  -----

Signed-off-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>

---
 Changes in v2:
  - Update perf-probe.txt
---
 tools/perf/Documentation/perf-probe.txt |    1 +
 tools/perf/util/probe-event.c           |   26 ++++++++++++++++++++++++
 tools/perf/util/probe-file.c            |   33 +++++++++++++++++++++++--------
 tools/perf/util/probe-file.h            |    2 ++
 4 files changed, 54 insertions(+), 8 deletions(-)

diff --git a/tools/perf/Documentation/perf-probe.txt b/tools/perf/Documentation/perf-probe.txt
index 5a70d45..8d09173 100644
--- a/tools/perf/Documentation/perf-probe.txt
+++ b/tools/perf/Documentation/perf-probe.txt
@@ -116,6 +116,7 @@ OPTIONS
 	(With --add) Cache the probes. Any events which successfully added
 	are also stored in the cache file.
 	(With --list) Show cached probes.
+	(With --del) Remove cached probes.
 
 --max-probes=NUM::
 	Set the maximum number of probe points for an event. Default is 128.
diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c
index e69de54..8de406a 100644
--- a/tools/perf/util/probe-event.c
+++ b/tools/perf/util/probe-event.c
@@ -2742,6 +2742,30 @@ end:
 	return ret;
 }
 
+static int del_perf_probe_caches(struct strfilter *filter)
+{
+	struct probe_cache *cache;
+	struct strlist *bidlist;
+	struct str_node *nd;
+	int ret;
+
+	ret = build_id_cache__list_all(&bidlist);
+	if (ret < 0) {
+		pr_debug("Failed to get buildids: %d\n", ret);
+		return ret;
+	}
+
+	strlist__for_each(nd, bidlist) {
+		cache = probe_cache__new(nd->s);
+		if (!cache)
+			continue;
+		probe_cache__remove_entries(cache, filter);
+		probe_cache__commit(cache);
+		probe_cache__delete(cache);
+	}
+	return 0;
+}
+
 int del_perf_probe_events(struct strfilter *filter)
 {
 	int ret, ret2, ufd = -1, kfd = -1;
@@ -2751,6 +2775,8 @@ int del_perf_probe_events(struct strfilter *filter)
 		return -EINVAL;
 
 	pr_debug("Delete filter: \'%s\'\n", str);
+	if (probe_conf.cache)
+		return del_perf_probe_caches(filter);
 
 	/* Get current event names */
 	ret = probe_file__open_both(&kfd, &ufd, PF_FL_RW);
diff --git a/tools/perf/util/probe-file.c b/tools/perf/util/probe-file.c
index 7b9a4a3..5ee892f 100644
--- a/tools/perf/util/probe-file.c
+++ b/tools/perf/util/probe-file.c
@@ -371,7 +371,6 @@ static int probe_cache__open(struct probe_cache *pcache, const char *target)
 			return ret;
 		}
 	}
-
 	dir_name = build_id_cache__dirname_from_path(sbuildid, target,
 						     is_kallsyms, false);
 found:
@@ -627,19 +626,37 @@ out:
 	return ret;
 }
 
+static bool probe_cache_entry__compare(struct probe_cache_entry *entry,
+				       struct strfilter *filter)
+{
+	char buf[128], *ptr = entry->spev;
+
+	if (entry->pev.event) {
+		snprintf(buf, 128, "%s:%s", entry->pev.group, entry->pev.event);
+		ptr = buf;
+	}
+	return strfilter__compare(filter, ptr);
+}
+
+int probe_cache__remove_entries(struct probe_cache *pcache,
+				struct strfilter *filter)
+{
+	struct probe_cache_entry *entry, *tmp;
+
+	list_for_each_entry_safe(entry, tmp, &pcache->list, list) {
+		if (probe_cache_entry__compare(entry, filter))
+			probe_cache_entry__delete(entry);
+	}
+	return 0;
+}
+
 static int probe_cache__show_entries(struct probe_cache *pcache,
 				     struct strfilter *filter)
 {
 	struct probe_cache_entry *entry;
-	char buf[128], *ptr;
 
 	list_for_each_entry(entry, &pcache->list, list) {
-		if (entry->pev.event) {
-			ptr = buf;
-			snprintf(buf, 128, "%s:%s", entry->pev.group, entry->pev.event);
-		} else
-			ptr = entry->spev;
-		if (strfilter__compare(filter, ptr))
+		if (probe_cache_entry__compare(entry, filter))
 			printf("%s\n", entry->spev);
 	}
 	return 0;
diff --git a/tools/perf/util/probe-file.h b/tools/perf/util/probe-file.h
index 26dc4f7..391fde0 100644
--- a/tools/perf/util/probe-file.h
+++ b/tools/perf/util/probe-file.h
@@ -34,6 +34,8 @@ int probe_cache__add_entry(struct probe_cache *pcache,
 			   struct probe_trace_event *tevs, int ntevs);
 int probe_cache__commit(struct probe_cache *pcache);
 void probe_cache__delete(struct probe_cache *pcache);
+int probe_cache__remove_entries(struct probe_cache *pcache,
+				struct strfilter *filter);
 struct probe_cache_entry *probe_cache__find(struct probe_cache *pcache,
 					    struct perf_probe_event *pev);
 struct probe_cache_entry *probe_cache__find_by_name(struct probe_cache *pcache,

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

[RFC PATCH perf/core v3 00/17] perf-probe --cache and SDT support Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com> - 2015-08-15 13:50 +0200
  [RFC PATCH perf/core v3 16/17] perf-list: Skip SDTs placed in  invalid binaries Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com> - 2015-08-15 13:50 +0200
  [RFC PATCH perf/core v3 01/17] perf probe: Use strbuf for making  strings in probe-event.c Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com> - 2015-08-15 13:50 +0200
  [RFC PATCH perf/core v3 10/17] perf/sdt: ELF support for SDT Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com> - 2015-08-15 13:50 +0200
  [RFC PATCH perf/core v3 09/17] perf probe: Remove caches when  --cache is given Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com> - 2015-08-15 13:50 +0200
  [RFC PATCH perf/core v3 15/17] perf-list: Show SDT events Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com> - 2015-08-15 13:50 +0200
  [RFC PATCH perf/core v3 08/17] perf probe: Show all cached probes Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com> - 2015-08-15 13:50 +0200
  [RFC PATCH perf/core v3 07/17] perf probe: Use cache entry if  possible Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com> - 2015-08-15 13:50 +0200
  [RFC PATCH perf/core v3 04/17] perf: Add lsdir to read a directory Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com> - 2015-08-15 14:00 +0200
  [RFC PATCH perf/core v3 02/17] perf-buildid-cache: Use  path/to/bin/buildid/elf instead of path/to/bin/buildid Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com> - 2015-08-15 14:00 +0200
  [RFC PATCH perf/core v3 05/17] perf-buildid-cache: Use lsdir for  looking up buildid caches Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com> - 2015-08-15 14:00 +0200
  [RFC PATCH perf/core v3 11/17] perf probe: Add group name support Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com> - 2015-08-15 14:00 +0200
  [RFC PATCH perf/core v3 03/17] perf buildid: Introduce  sysfs/filename__sprintf_build_id Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com> - 2015-08-15 14:00 +0200
  [RFC PATCH perf/core v3 12/17] perf-probe: Set default kprobe group  name if it is not given Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com> - 2015-08-15 14:00 +0200
  [RFC PATCH perf/core v3 14/17] perf probe: Accept %sdt and %cached  event name Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com> - 2015-08-15 14:00 +0200
  [RFC PATCH perf/core v3 13/17] perf buildid-cache: Scan and import  user SDT events to probe cache Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com> - 2015-08-15 14:00 +0200
  [RFC PATCH perf/core v3 06/17] perf probe: Add --cache option to  cache the probe definitions Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com> - 2015-08-15 14:00 +0200
  Re: [RFC PATCH perf/core v3 00/17] perf-probe --cache and SDT support Namhyung Kim <namhyung@kernel.org> - 2015-08-19 10:50 +0200
    RE: Re: [RFC PATCH perf/core v3 00/17] perf-probe --cache and  SDT support 平松雅巳 / HIRAMATU,MASAMI   <masami.hiramatsu.pt@hitachi.com> - 2015-08-19 17:20 +0200

csiph-web