Re: [PATCH perf/core v8 07/16] perf probe: Remove caches when --cache is given
On Thu, 19 May 2016 06:15:38 +0530 Hemant Kumar wrote: > Hi Masami, > > On 05/15/2016 08:50 AM, Masami Hiramatsu wrote: > > From: Masami Hiramatsu > > > > 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 > > Not sure where the o/p message for perf probe --cache --del > is coming from here. So, if we are removing an event from the cache, > is it intended to remove that from the {u,k}probe_events file as well? No, it only deletes entries from the cache. No actual probes are removed. > The patch removes only from the cache (which I think is the intended > behavior). With this patch, when I delete an event from the cache, it > silently deletes it. So, do we add some kind of a message there? Ah, good point! > # ./perf probe --cache --list > [kernel.kallsyms] (818a8e96766649cb2b62fc0bc3e66c27be0cd870): > vfs_read > /usr/lib64/libc-2.18.so (e8587f5d2edba244cc43368b5ebfce1782195b6f): > getaddrinfo $params > > # ./perf probe --cache --del vfs_read\* > # > > If we are silently removing the events from the cache, the commit message > needs to be ammended. Hmm, it must be dropped while updating series... OK, I'll fix it! Thanks! > > ># perf probe --cache --list > >/[kernel.kallsyms] (1466a0a250b5d0070c6d0f03c5fed30b237970a1): > >/usr/lib64/libc-2.17.so (c31ffe7942bfd77b2fca8f9bd5709d387a86d3bc): > >getaddrinfo $params > >- > > > > Signed-off-by: Masami Hiramatsu > > Signed-off-by: Masami Hiramatsu > > --- > > Changes in v4: > >- move del_perf_probe_caches() into builtin-probe.c since > > command-line related delete procedure is there now. > > --- > > tools/perf/Documentation/perf-probe.txt |1 + > > tools/perf/builtin-probe.c | 27 ++ > > tools/perf/util/probe-file.c| 32 > > --- > > tools/perf/util/probe-file.h|2 ++ > > 4 files changed, 55 insertions(+), 7 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/builtin-probe.c b/tools/perf/builtin-probe.c > > index 53e380c0e..8f61525 100644 > > --- a/tools/perf/builtin-probe.c > > +++ b/tools/perf/builtin-probe.c > > @@ -363,6 +363,30 @@ out_cleanup: > > 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; > > +} > > + > > static int perf_del_probe_events(struct strfilter *filter) > > { > > int ret, ret2, ufd = -1, kfd = -1; > > @@ -375,6 +399,9 @@ static int perf_del_probe_events(struct strfilter > > *filter) > > > > 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); > > if (ret < 0) > > diff --git a/tools/perf/util/probe-file.c b/tools/perf/util/probe-file.c > > index a6d4a67..cc0f183 100644 > > --- a/tools/perf/util/probe-file.c > > +++ b/tools/perf/util/probe-file.c > > @@ -660,19 +660,37 @@ out: > > return ret; > > } > > > > +static bo
Re: [PATCH perf/core v8 07/16] perf probe: Remove caches when --cache is given
Hi Masami, On 05/15/2016 08:50 AM, Masami Hiramatsu wrote: From: Masami Hiramatsu 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 Not sure where the o/p message for perf probe --cache --del is coming from here. So, if we are removing an event from the cache, is it intended to remove that from the {u,k}probe_events file as well? The patch removes only from the cache (which I think is the intended behavior). With this patch, when I delete an event from the cache, it silently deletes it. So, do we add some kind of a message there? # ./perf probe --cache --list [kernel.kallsyms] (818a8e96766649cb2b62fc0bc3e66c27be0cd870): vfs_read /usr/lib64/libc-2.18.so (e8587f5d2edba244cc43368b5ebfce1782195b6f): getaddrinfo $params # ./perf probe --cache --del vfs_read\* # If we are silently removing the events from the cache, the commit message needs to be ammended. # perf probe --cache --list /[kernel.kallsyms] (1466a0a250b5d0070c6d0f03c5fed30b237970a1): /usr/lib64/libc-2.17.so (c31ffe7942bfd77b2fca8f9bd5709d387a86d3bc): getaddrinfo $params - Signed-off-by: Masami Hiramatsu Signed-off-by: Masami Hiramatsu --- Changes in v4: - move del_perf_probe_caches() into builtin-probe.c since command-line related delete procedure is there now. --- tools/perf/Documentation/perf-probe.txt |1 + tools/perf/builtin-probe.c | 27 ++ tools/perf/util/probe-file.c| 32 --- tools/perf/util/probe-file.h|2 ++ 4 files changed, 55 insertions(+), 7 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/builtin-probe.c b/tools/perf/builtin-probe.c index 53e380c0e..8f61525 100644 --- a/tools/perf/builtin-probe.c +++ b/tools/perf/builtin-probe.c @@ -363,6 +363,30 @@ out_cleanup: 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; +} + static int perf_del_probe_events(struct strfilter *filter) { int ret, ret2, ufd = -1, kfd = -1; @@ -375,6 +399,9 @@ static int perf_del_probe_events(struct strfilter *filter) 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); if (ret < 0) diff --git a/tools/perf/util/probe-file.c b/tools/perf/util/probe-file.c index a6d4a67..cc0f183 100644 --- a/tools/perf/util/probe-file.c +++ b/tools/perf/util/probe-file.c @@ -660,19 +660,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
[PATCH perf/core v8 07/16] perf probe: Remove caches when --cache is given
From: Masami Hiramatsu 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 Signed-off-by: Masami Hiramatsu --- Changes in v4: - move del_perf_probe_caches() into builtin-probe.c since command-line related delete procedure is there now. --- tools/perf/Documentation/perf-probe.txt |1 + tools/perf/builtin-probe.c | 27 ++ tools/perf/util/probe-file.c| 32 --- tools/perf/util/probe-file.h|2 ++ 4 files changed, 55 insertions(+), 7 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/builtin-probe.c b/tools/perf/builtin-probe.c index 53e380c0e..8f61525 100644 --- a/tools/perf/builtin-probe.c +++ b/tools/perf/builtin-probe.c @@ -363,6 +363,30 @@ out_cleanup: 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; +} + static int perf_del_probe_events(struct strfilter *filter) { int ret, ret2, ufd = -1, kfd = -1; @@ -375,6 +399,9 @@ static int perf_del_probe_events(struct strfilter *filter) 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); if (ret < 0) diff --git a/tools/perf/util/probe-file.c b/tools/perf/util/probe-file.c index a6d4a67..cc0f183 100644 --- a/tools/perf/util/probe-file.c +++ b/tools/perf/util/probe-file.c @@ -660,19 +660,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))