From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Hemant Kumar <hemant@linux.vnet.ibm.com>
Cc: Masami Hiramatsu <mhiramat@kernel.org>,
linux-kernel@vger.kernel.org, Namhyung Kim <namhyung@kernel.org>,
Peter Zijlstra <peterz@infradead.org>,
Ingo Molnar <mingo@redhat.com>,
Ananth N Mavinakayanahalli <ananth@linux.vnet.ibm.com>
Subject: Re: [PATCH perf/core v4 14/19] perf buildid-cache: Scan and import user SDT events to probe cache
Date: Wed, 27 Apr 2016 12:28:16 -0300 [thread overview]
Message-ID: <20160427152816.GP11033@kernel.org> (raw)
In-Reply-To: <5720D86C.3010209@linux.vnet.ibm.com>
Em Wed, Apr 27, 2016 at 08:49:08PM +0530, Hemant Kumar escreveu:
>
>
> On 04/26/2016 02:34 PM, Masami Hiramatsu wrote:
> >From: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
> >
> >perf buildid-cache --add <binary> scans given binary and add
> >the SDT events to probe cache. "sdt_" prefix is appended for
> >all SDT providers to avoid event-name clash with other pre-defined
> >events. It is possible to use the cached SDT events as other cached
> >events, via perf probe --add "sdt_<provider>:<event>=<event>".
> >
> >e.g.
> > ----
> > # perf buildid-cache --add /lib/libc-2.17.so
> > # perf probe --cache --list | head -n 5
> > /usr/lib/libc-2.17.so (a6fb821bdf53660eb2c29f778757aef294d3d392):
> > sdt_libc:setjmp=setjmp
> > sdt_libc:longjmp=longjmp
> > sdt_libc:longjmp_target=longjmp_target
> > sdt_libc:memory_heap_new=memory_heap_new
> > # perf probe -x /usr/lib/libc-2.17.so \
> > -a sdt_libc:memory_heap_new=memory_heap_new
> > Added new event:
> > sdt_libc:memory_heap_new (on memory_heap_new
> > in /usr/lib/libc-2.17.so)
> >
> > You can now use it in all perf tools, such as:
> >
> > perf record -e sdt_libc:memory_heap_new -aR sleep 1
> >
> > # perf probe -l
> > sdt_libc:memory_heap_new (on new_heap+183 in /usr/lib/libc-2.17.so)
> > ----
>
> Patch looks good to me. Have a few questions below :
>
> What about the same binary path having different build-ids. For e.g
> a binary say, "test" has some markers, we add it to the cache. And,
> then the file gets rebuilt again with different build-id now. And we try
> to add to the cache again. It shows multiple entries in the cache :
> # perf probe --cache --list
> /home/hemant/test (157380727e2b3854395aa915dfc91dbccc02058b):
> sdt_user_test:marker1=marker1
> /home/hemant/test (64c0a018636e6d5145b09fc65839c1a4a7899f18):
> sdt_user_test:marker1=marker1
> /home/hemant/test (c9e34759ae95b68fa385831041c5d9e0dd1697fb):
> sdt_user_test:marker1=marker1
> ...
>
> But, perf list sdt shows only one entry (which it should) :
> # perf list sdt
>
> List of pre-defined events (to be used in -e):
>
> sdt_user_test:marker1 [SDT event]
>
> perf probe also works as expected :
> # perf probe -x /home/hemant/test %sdt_user_test:marker1
> Added new event:
> sdt_user_test:marker1 (on %marker1 in /home/hemant/test)
>
> You can now use it in all perf tools, such as:
>
> perf record -e sdt_user_test:marker1 -aR sleep 1
>
> So, the question is, do we delete the previous entries for "test" from
> the cache once we get a newer version of "test"?
No, we shouldn't, since those entries may be used for other tasks that
involves using the exact DSO used for a particular perf.data session.
Humm, but you are talking about what cache? The "probe cache" or the
"build-id cache"? My previous statement was about the build-id cache.
For the probe cache, humm, probably we want to keep it as well, we may
have moved that 'test' file to some other place, renamed it, etc, but it
continues being accessible by its content-based identifier (the
build-id) and could be used in ways we don't envision right now.
I.e. the same principle used for the build-id cache should be used for
this probe cache, where we store things by build-id.
We need to prune this from time to time and for this we have:
perf buildid-cache purge
But that right now is unflexible, we should have a way to ask to control
how much is purged :-\
- Arnaldo
- Arnaldo
> >Note that SDT event entries in probe-cache file is somewhat different
> >from normal cached events. Normal one starts with "#", but SDTs are
> >starting with "%".
> >
> >Signed-off-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
> >Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
> >---
> [SNIP]
> >+ list_for_each_entry(note, &sdtlist, note_list) {
> >+ ret = snprintf(sdtgrp, 64, "sdt_%s", note->provider);
> >+ if (ret < 0)
> >+ break;
> >+ /* Try to find same-name entry */
> >+ entry = probe_cache__find_by_name(pcache, sdtgrp, note->name);
>
> Wouldn't it be better to compare the build-id rather than the event
> name? So, if there is a new sdt event added to a binary, its build-id will
> change. And, if there is no change, the build-id remains the same.
>
> Only if there is a change in the build-id, we can go for searching the
> event name. This two level check can help optimizing the search.
>
> >+ if (!entry) {
> >+ entry = probe_cache_entry__new(NULL);
> >+ if (!entry) {
> >+ ret = -ENOMEM;
> >+ break;
> >+ }
> >+ entry->sdt = true;
> >+ ret = asprintf(&entry->spev, "%s:%s=%s", sdtgrp,
> >+ note->name, note->name);
> >+ if (ret < 0)
> >+ break;
> >+ entry->pev.event = strdup(note->name);
> >+ entry->pev.group = strdup(sdtgrp);
> >+ list_add_tail(&entry->list, &pcache->list);
> >+ }
> >+ ret = asprintf(&buf, "p:%s/%s %s:0x%llx",
> >+ sdtgrp, note->name, pathname,
> >+ sdt_note__get_addr(note));
> >+ if (ret < 0)
> >+ break;
> >+ strlist__add(entry->tevlist, buf);
> >+ free(buf);
> >+ entry = NULL;
> >+ }
> >+ if (entry)
> >+ probe_cache_entry__delete(entry);
> >+ cleanup_sdt_note_list(&sdtlist);
> >+ return ret;
> >+}
> >+
> > static int probe_cache_entry__write(struct probe_cache_entry *entry, int fd)
> > {
> > struct str_node *snode;
> > struct iovec iov[3];
> >+ const char *prefix = entry->sdt ? "%" : "#";
> > int ret;
> >
> >- pr_debug("Writing cache: #%s\n", entry->spev);
> >- iov[0].iov_base = (void *)"#"; iov[0].iov_len = 1;
> >+ pr_debug("Writing cache: %s%s\n", prefix, entry->spev);
> >+ iov[0].iov_base = (void *)prefix; iov[0].iov_len = 1;
> > iov[1].iov_base = entry->spev; iov[1].iov_len = strlen(entry->spev);
> > iov[2].iov_base = (void *)"\n"; iov[2].iov_len = 1;
> > ret = writev(fd, iov, 3);
> >diff --git a/tools/perf/util/probe-file.h b/tools/perf/util/probe-file.h
> >index ba7b6d3..55322f1 100644
> >--- a/tools/perf/util/probe-file.h
> >+++ b/tools/perf/util/probe-file.h
> >@@ -21,6 +21,7 @@ int probe_file__del_strlist(int fd, struct strlist *namelist);
> > /* Cache of probe definitions */
> > struct probe_cache_entry {
> > struct list_head list;
> >+ bool sdt;
> > struct perf_probe_event pev;
> > char *spev;
> > struct strlist *tevlist;
> >@@ -35,6 +36,7 @@ struct probe_cache *probe_cache__new(const char *target);
> > int probe_cache__add_entry(struct probe_cache *pcache,
> > struct perf_probe_event *pev,
> > struct probe_trace_event *tevs, int ntevs);
> >+int probe_cache__scan_sdt(struct probe_cache *pcache, const char *pathname);
> > 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,
> >
>
> --
> Thanks,
> Hemant Kumar
next prev parent reply other threads:[~2016-04-27 15:28 UTC|newest]
Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-04-26 9:02 [PATCH perf/core v4 00/19] perf-probe --cache and SDT support Masami Hiramatsu
2016-04-26 9:02 ` [PATCH perf/core v4 01/19] perf probe: Use strbuf for making strings Masami Hiramatsu
2016-04-26 13:36 ` Arnaldo Carvalho de Melo
2016-04-26 14:40 ` Masami Hiramatsu
2016-04-26 14:59 ` Arnaldo Carvalho de Melo
2016-04-27 18:44 ` Masami Hiramatsu
2016-04-26 9:02 ` [PATCH perf/core v4 02/19] perf-buildid-cache: Use path/to/bin/buildid/elf instead of path/to/bin/buildid Masami Hiramatsu
2016-04-26 13:45 ` Arnaldo Carvalho de Melo
2016-04-26 14:47 ` Masami Hiramatsu
2016-04-26 9:02 ` [PATCH perf/core v4 03/19] perf buildid-cache: Fall back to the old style build-id cache Masami Hiramatsu
2016-04-26 13:47 ` Arnaldo Carvalho de Melo
2016-04-26 14:42 ` Masami Hiramatsu
2016-04-26 9:02 ` [PATCH perf/core v4 04/19] perf: Add lsdir to read a directory Masami Hiramatsu
2016-04-26 13:40 ` Arnaldo Carvalho de Melo
2016-04-26 14:07 ` Arnaldo Carvalho de Melo
2016-04-26 14:52 ` Masami Hiramatsu
2016-04-26 15:00 ` Arnaldo Carvalho de Melo
2016-04-27 15:35 ` [tip:perf/core] perf tools: Add lsdir() helper " tip-bot for Masami Hiramatsu
2016-04-26 9:02 ` [PATCH perf/core v4 05/19] perf-buildid-cache: Use lsdir for looking up buildid caches Masami Hiramatsu
2016-04-26 9:03 ` [PATCH perf/core v4 06/19] perf-probe: Let probe_file__add_event return 0 if succeeded Masami Hiramatsu
2016-04-26 13:49 ` Arnaldo Carvalho de Melo
2016-04-27 15:35 ` [tip:perf/core] perf probe: " tip-bot for Masami Hiramatsu
2016-04-26 9:03 ` [PATCH perf/core v4 07/19] perf probe: Add --cache option to cache the probe definitions Masami Hiramatsu
2016-04-26 9:03 ` [PATCH perf/core v4 08/19] perf probe: Use cache entry if possible Masami Hiramatsu
2016-04-26 9:03 ` [PATCH perf/core v4 09/19] perf probe: Show all cached probes Masami Hiramatsu
2016-04-26 9:03 ` [PATCH perf/core v4 10/19] perf probe: Remove caches when --cache is given Masami Hiramatsu
2016-04-26 9:03 ` [PATCH perf/core v4 11/19] perf/sdt: ELF support for SDT Masami Hiramatsu
2016-04-26 9:04 ` [PATCH perf/core v4 12/19] perf probe: Add group name support Masami Hiramatsu
2016-04-26 9:04 ` [PATCH perf/core v4 13/19] perf-probe: Set default kprobe group name if it is not given Masami Hiramatsu
2016-04-26 13:50 ` Arnaldo Carvalho de Melo
2016-04-27 15:35 ` [tip:perf/core] perf probe: " tip-bot for Masami Hiramatsu
2016-04-26 9:04 ` [PATCH perf/core v4 14/19] perf buildid-cache: Scan and import user SDT events to probe cache Masami Hiramatsu
2016-04-27 15:19 ` Hemant Kumar
2016-04-27 15:28 ` Arnaldo Carvalho de Melo [this message]
2016-04-27 19:36 ` Masami Hiramatsu
2016-04-27 20:23 ` Hemant Kumar
2016-04-27 20:16 ` Hemant Kumar
2016-04-26 9:04 ` [PATCH perf/core v4 15/19] perf probe: Accept %sdt and %cached event name Masami Hiramatsu
2016-04-26 9:04 ` [PATCH perf/core v4 16/19] perf-list: Show SDT and pre-cached events Masami Hiramatsu
2016-04-26 9:04 ` [PATCH perf/core v4 17/19] perf-list: Skip SDTs placed in invalid binaries Masami Hiramatsu
2016-04-26 9:04 ` [PATCH perf/core v4 18/19] perf probe: Allow wildcard for cached events Masami Hiramatsu
2016-04-27 15:34 ` Hemant Kumar
2016-04-27 18:51 ` Masami Hiramatsu
2016-04-26 9:05 ` [PATCH perf/core v4 19/19] perf probe: Support @BUILDID or @FILE suffix for SDT events Masami Hiramatsu
2016-04-27 15:36 ` [PATCH perf/core v4 00/19] perf-probe --cache and SDT support Hemant Kumar
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20160427152816.GP11033@kernel.org \
--to=acme@kernel.org \
--cc=ananth@linux.vnet.ibm.com \
--cc=hemant@linux.vnet.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mhiramat@kernel.org \
--cc=mingo@redhat.com \
--cc=namhyung@kernel.org \
--cc=peterz@infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).