public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Arnaldo Carvalho de Melo <acme@infradead.org>
To: Stephane Eranian <eranian@google.com>
Cc: linux-kernel@vger.kernel.org, peterz@infradead.org,
	mingo@elte.hu, paulus@samba.org, davem@davemloft.net,
	fweisbec@gmail.com, perfmon2-devel@lists.sf.net,
	eranian@gmail.com, tzanussi@gmail.com
Subject: Re: how to use perf annotate on the kernel
Date: Thu, 3 Jun 2010 21:39:00 -0300	[thread overview]
Message-ID: <20100604003900.GD10469@ghostprotocols.net> (raw)
In-Reply-To: <20100604002039.GC10469@ghostprotocols.net>

Em Thu, Jun 03, 2010 at 09:20:39PM -0300, Arnaldo Carvalho de Melo escreveu:
> Em Thu, Jun 03, 2010 at 08:18:04PM +0200, Stephane Eranian escreveu:
> > perf annotate __lock_acquire -k /home/eranian/perfmon/official/tip/build/vmlinux
> > build id event received for [kernel.kallsyms]:
> > 5c110a704293a259fbe11158dc1b25107ad7a23e
> > build id event received for
> > /lib/modules/2.6.35-rc1-tip/kernel/arch/x86/kernel/cpu/cpufreq/mperf.ko:
> > cb5
> > build id event received for
> > /lib/modules/2.6.35-rc1-tip/kernel/drivers/cpufreq/cpufreq_ondemand.ko:
> > cdb5
> > Using /home/eranian/perfmon/official/tip/build/vmlinux for symbols
> > hist_entry__inc_addr_samples: ip=0xffffffff81073b36
> > 0xffffffff81073b30 __lock_acquire: period++ [ip: 0xffffffff81073b36, 0x6] => 1
> > hist_entry__inc_addr_samples: ip=0xffffffff81073c94
> > 
> > But in the end I get:
> > objdump: '[kernel.kallsyms]': No such file
> 
> Reproduced, working on it now. I've been testing only with vmlinux in
> the path it searches for, not by directly specifying it, will get that
> fixed, thanks,

Should be fixed by this patch:

[root@emilia ~]# perf annotate -k /lib/modules/2.6.35-rc1/build/vmlinux.OFF n_tty_write | head -50


------------------------------------------------
 Percent |	Source code & Disassembly of vmlinux.OFF
------------------------------------------------
         :
         :
         :
         :	Disassembly of section .text:
         :
         :	ffffffff81288820 <n_tty_write>:
         :	 *                lock themselves)
         :	 */
         :
         :	static ssize_t n_tty_write(struct tty_struct *tty, struct file *file,
         :	                           const unsigned char *buf, size_t nr)
         :	{
    0.00 :	ffffffff81288820:       41 57                   push   %r15
         :
         :	DECLARE_PER_CPU(struct task_struct *, current_task);
         :
         :	static __always_inline struct task_struct *get_current(void)
         :	{
         :	        return percpu_read_stable(current_task);
    0.00 :	ffffffff81288822:       65 48 8b 04 25 40 cc    mov    %gs:0xcc40,%rax
    0.00 :	ffffffff81288829:       00 00 
    0.00 :	ffffffff8128882b:       41 56                   push   %r14
    0.00 :	ffffffff8128882d:       41 55                   push   %r13
    0.00 :	ffffffff8128882f:       49 89 cd                mov    %rcx,%r13
    0.00 :	ffffffff81288832:       41 54                   push   %r12
    0.00 :	ffffffff81288834:       49 89 d4                mov    %rdx,%r12
    0.00 :	ffffffff81288837:       55                      push   %rbp
    0.00 :	ffffffff81288838:       48 89 f5                mov    %rsi,%rbp
    0.00 :	ffffffff8128883b:       53                      push   %rbx
    0.00 :	ffffffff8128883c:       48 89 fb                mov    %rdi,%rbx
    0.00 :	ffffffff8128883f:       48 83 ec 58             sub    $0x58,%rsp
         :	        const unsigned char *b = buf;
         :	        DECLARE_WAITQUEUE(wait, current);
    0.00 :	ffffffff81288843:       48 c7 44 24 20 00 00    movq   $0x0,0x20(%rsp)
    0.00 :	ffffffff8128884a:       00 00 
    7.14 :	ffffffff8128884c:       48 c7 44 24 38 00 00    movq   $0x0,0x38(%rsp)
    0.00 :	ffffffff81288853:       00 00 
    0.00 :	ffffffff81288855:       48 c7 44 24 40 00 00    movq   $0x0,0x40(%rsp)
    0.00 :	ffffffff8128885c:       00 00 
    7.14 :	ffffffff8128885e:       48 89 44 24 28          mov    %rax,0x28(%rsp)
    0.00 :	ffffffff81288863:       48 c7 44 24 30 30 49    movq   $0xffffffff81044930,0x30(%rsp)
    0.00 :	ffffffff8128886a:       04 81 
         :	        int c;
         :	        ssize_t retval = 0;
         :
[root@emilia ~]#

>From 842b66de6807e72bddfd24a63742bacd0f853872 Mon Sep 17 00:00:00 2001
From: Arnaldo Carvalho de Melo <acme@redhat.com>
Date: Thu, 3 Jun 2010 18:35:55 -0300
Subject: [PATCH 1/1] perf symbols: Set the DSO long name when using symbol_conf.vmlinux_name
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

We need to set the long name to the name specified via, for instance,
'perf annotate --vmlinux /path/to/vmlinux', if not it will remain as
'[kernel.kallsyms]' and that will make annotate fail when passing this
as the vmlinux name in the call to objdump.

The way this is setup grew unwieldly and dso__load_vmlinux is the
function that should allocate space for the long name, with callers not
assuming that filenames should be allocated somehow by then (strdup,
dso__build_id_filename, etc).

For now this is the minimalistic patch, a proper fix for .36 will be
made.

Reported-by: Stephane Eranian <eranian@google.com>
Cc: David S. Miller <davem@davemloft.net>
Cc: Frédéric Weisbecker <fweisbec@gmail.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Cc: Tom Zanussi <tzanussi@gmail.com>
LKML-Reference: <new-submission>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/util/symbol.c |    8 ++++++--
 1 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c
index 7fd6b15..b63e571 100644
--- a/tools/perf/util/symbol.c
+++ b/tools/perf/util/symbol.c
@@ -1745,7 +1745,12 @@ static int dso__load_kernel_sym(struct dso *self, struct map *map,
 	if (symbol_conf.vmlinux_name != NULL) {
 		err = dso__load_vmlinux(self, map,
 					symbol_conf.vmlinux_name, filter);
-		goto out_try_fixup;
+		if (err > 0) {
+			dso__set_long_name(self,
+					   strdup(symbol_conf.vmlinux_name));
+			goto out_fixup;
+		}
+		return err;
 	}
 
 	if (vmlinux_path != NULL) {
@@ -1806,7 +1811,6 @@ do_kallsyms:
 		pr_debug("Using %s for symbols\n", kallsyms_filename);
 	free(kallsyms_allocated_filename);
 
-out_try_fixup:
 	if (err > 0) {
 out_fixup:
 		if (kallsyms_filename != NULL)
-- 
1.6.5.2


  reply	other threads:[~2010-06-04  0:39 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-06-03 17:23 how to use perf annotate on the kernel Stephane Eranian
2010-06-03 17:54 ` Arnaldo Carvalho de Melo
2010-06-03 18:06   ` Arnaldo Carvalho de Melo
2010-06-03 18:11     ` Arnaldo Carvalho de Melo
2010-06-03 18:18       ` Stephane Eranian
2010-06-04  0:20         ` Arnaldo Carvalho de Melo
2010-06-04  0:39           ` Arnaldo Carvalho de Melo [this message]
2010-06-04  8:55             ` Stephane Eranian
2010-06-03 18:12     ` Stephane Eranian

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=20100604003900.GD10469@ghostprotocols.net \
    --to=acme@infradead.org \
    --cc=davem@davemloft.net \
    --cc=eranian@gmail.com \
    --cc=eranian@google.com \
    --cc=fweisbec@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=paulus@samba.org \
    --cc=perfmon2-devel@lists.sf.net \
    --cc=peterz@infradead.org \
    --cc=tzanussi@gmail.com \
    /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