From: Arnaldo Carvalho de Melo <acme@redhat.com>
To: Ingo Molnar <mingo@elte.hu>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>,
Paul Mackerras <paulus@samba.org>, Mike Galbraith <efault@gmx.de>,
Thomas Gleixner <tglx@linutronix.de>,
Steven Rostedt <rostedt@goodmis.org>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: [PATCH tip 1/1] perf_counter tools: Shorten the DSO names using cwd
Date: Fri, 29 May 2009 13:48:59 -0300 [thread overview]
Message-ID: <20090529164859.GN4747@ghostprotocols.net> (raw)
commit c33188d6cca8616c5bb9e1bbf95bc88cc3c1fa9c
Author: Arnaldo Carvalho de Melo <acme@redhat.com>
Date: Fri May 29 13:43:08 2009 -0300
perf_counter tools: Shorten the DSO names using cwd
[acme@emilia linux-2.6-tip]$ pwd
/home/acme/git/linux-2.6-tip
Before (still available using -P/--full-paths)
[acme@emilia linux-2.6-tip]$ perf report -P | head -10
11.48% perf: 7454 [kernel]: clear_page_c
4.89% perf: 7454 [kernel]: vsnprintf
4.61% perf: 7454 /home/acme/git/linux-2.6-tip/Documentation/perf_counter/perf: dso__find_symbol
4.09% perf: 7454 [kernel]: number
4.06% perf: 7454 /home/acme/git/linux-2.6-tip/Documentation/perf_counter/perf: dso__fprintf
4.00% perf: 7454 /home/acme/git/linux-2.6-tip/Documentation/perf_counter/perf: symbol_filter
New default:
[acme@emilia linux-2.6-tip]$ perf report | head -10
11.48% perf: 7454 [kernel]: clear_page_c
4.89% perf: 7454 [kernel]: vsnprintf
4.61% perf: 7454 ./Documentation/perf_counter/perf: dso__find_symbol
4.09% perf: 7454 [kernel]: number
4.06% perf: 7454 ./Documentation/perf_counter/perf: dso__fprintf
4.00% perf: 7454 ./Documentation/perf_counter/perf: symbol_filter
Suggested-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
diff --git a/Documentation/perf_counter/builtin-report.c b/Documentation/perf_counter/builtin-report.c
index 412d524..4705679 100644
--- a/Documentation/perf_counter/builtin-report.c
+++ b/Documentation/perf_counter/builtin-report.c
@@ -23,6 +23,7 @@ static int show_mask = SHOW_KERNEL | SHOW_USER | SHOW_HV;
static int dump_trace = 0;
static int verbose;
+static int full_paths;
static unsigned long page_size;
static unsigned long mmap_window = 32;
@@ -134,6 +135,16 @@ static int load_kernel(void)
return err;
}
+static int strcommon(const char *pathname, const char *cwd, int cwdlen)
+{
+ int n = 0;
+
+ while (pathname[n] == cwd[n] && n < cwdlen)
+ ++n;
+
+ return n;
+}
+
struct map {
struct list_head node;
uint64_t start;
@@ -142,16 +153,28 @@ struct map {
struct dso *dso;
};
-static struct map *map__new(struct mmap_event *event)
+static struct map *map__new(struct mmap_event *event, char *cwd, int cwdlen)
{
struct map *self = malloc(sizeof(*self));
if (self != NULL) {
+ const char *filename = event->filename;
+ char newfilename[PATH_MAX];
+
+ if (cwd) {
+ int n = strcommon(filename, cwd, cwdlen);
+ if (n == cwdlen) {
+ snprintf(newfilename, sizeof(newfilename),
+ ".%s", filename + n);
+ filename = newfilename;
+ }
+ }
+
self->start = event->start;
self->end = event->start + event->len;
self->pgoff = event->pgoff;
- self->dso = dsos__findnew(event->filename);
+ self->dso = dsos__findnew(filename);
if (self->dso == NULL)
goto out_delete;
}
@@ -598,6 +621,8 @@ static int __cmd_report(void)
int ret, rc = EXIT_FAILURE;
uint32_t size;
unsigned long total = 0, total_mmap = 0, total_comm = 0, total_unknown = 0;
+ char cwd[PATH_MAX], *cwdp = cwd;
+ int cwdlen;
input = open(input_name, O_RDONLY);
if (input < 0) {
@@ -621,6 +646,14 @@ static int __cmd_report(void)
return EXIT_FAILURE;
}
+ if (!full_paths) {
+ if (getcwd(cwd, sizeof(cwd)) == NULL) {
+ perror("failed to get the current directory");
+ return EXIT_FAILURE;
+ }
+ cwdlen = strlen(cwd);
+ } else
+ cwdp = NULL;
remap:
buf = (char *)mmap(NULL, page_size * mmap_window, PROT_READ,
MAP_SHARED, input, offset);
@@ -710,7 +743,7 @@ more:
} else switch (event->header.type) {
case PERF_EVENT_MMAP: {
struct thread *thread = threads__findnew(event->mmap.pid);
- struct map *map = map__new(&event->mmap);
+ struct map *map = map__new(&event->mmap, cwdp, cwdlen);
if (dump_trace) {
fprintf(stderr, "%p [%p]: PERF_EVENT_MMAP: [%p(%p) @ %p]: %s\n",
@@ -809,6 +842,8 @@ static const struct option options[] = {
OPT_STRING('k', "vmlinux", &vmlinux, "file", "vmlinux pathname"),
OPT_STRING('s', "sort", &sort_order, "key[,key2...]",
"sort by key(s): pid, comm, dso, symbol. Default: pid,symbol"),
+ OPT_BOOLEAN('P', "full-paths", &full_paths,
+ "Don't shorten the pathnames taking into account the cwd"),
OPT_END()
};
next reply other threads:[~2009-05-29 16:49 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-05-29 16:48 Arnaldo Carvalho de Melo [this message]
2009-05-29 17:16 ` [tip:perfcounters/core] perf_counter tools: Shorten the DSO names using cwd tip-bot for Arnaldo Carvalho de Melo
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=20090529164859.GN4747@ghostprotocols.net \
--to=acme@redhat.com \
--cc=a.p.zijlstra@chello.nl \
--cc=efault@gmx.de \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=paulus@samba.org \
--cc=rostedt@goodmis.org \
--cc=tglx@linutronix.de \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.