public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Lin Ming <ming.m.lin@intel.com>
To: Arnaldo Carvalho de Melo <acme@infradead.org>
Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Frederic Weisbecker <fweisbec@gmail.com>,
	LKML <linux-kernel@vger.kernel.org>,
	"2nddept-manager@sdl.hitachi.co.jp" 
	<2nddept-manager@sdl.hitachi.co.jp>
Subject: Re: [RFC PATCH] perf report: add sort by file lines
Date: Thu, 31 Mar 2011 22:19:36 +0800	[thread overview]
Message-ID: <1301581176.2271.9.camel@localhost> (raw)
In-Reply-To: <20110331134638.GA25095@ghostprotocols.net>

On Thu, 2011-03-31 at 21:46 +0800, Arnaldo Carvalho de Melo wrote:
> Em Thu, Mar 31, 2011 at 04:45:55PM +0800, Lin Ming escreveu:
> > On Wed, 2011-03-30 at 09:04 +0800, Masami Hiramatsu wrote:
> > > > foo:
> > > > 	.cfi_startproc
> > > > 	pushq	%rbp
> > > > 	.cfi_def_cfa_offset 16
> > > > 	movq	%rsp, %rbp
> > > > 	.cfi_offset 6, -16
> > > > 	.cfi_def_cfa_register 6
> > > > 	movq	%rdi, -8(%rbp)
> > > > 	movq	%rsi, -16(%rbp)
> > > > 	movq	-8(%rbp), %rax    /* load foo arg from stack */
> > > > 	movq	24(%rax), %rax    /* load foo->bar */
> > > > 	movq	-16(%rbp), %rdx   /* load tmp arg from stack */
> > > > 	movl	32(%rdx), %edx    /* load tmp->blah */
> > > > 	movl	%edx, 20(%rax)    /* store bar->fubar */  <<==(1)
> > > > 	leave
> > > > 	ret
> > > > 	.cfi_endproc
> > > 
> > > At (1), dwarf tells us the location of 'foo' is -8(%rbp) and 'tmp' is
> > > -16(%rbp), but doesn't know to what 20(%rax) is mapped, because
> > > foo->bar->fubar is not a real variable.
> > 
> > I am considering if it is possible to do "instruction unwind" to get a
> > map from (temporarily used) register to a specific member of a data
> > structure pointed by a pointer.
> > 
> > 4004a0: 	movq	-8(%rbp), %rax    /* load foo arg from stack */
> > 4004a4:		movq	24(%rax), %rax    /* load foo->bar */
> > 4004a8:		movq	-16(%rbp), %rdx   /* load tmp arg from stack */
> > 4004ac:		movl	32(%rdx), %edx    /* load tmp->blah */
> > 4004af:		movl	%edx, 20(%rax)    /* store bar->fubar */ 
> > 
> > foo: -8(%rbp)
> > tmp: -16(%rbp)
> > 
> > Assume we are now at ip 4004af, from the instruction decoder, we know
> > it's a store operation, and we want to find out what %rax is.
> > 
> > 1. unwind to 4004ac
> >    Ignore this, because it does not touch %rax
> > 
> > 2. unwind to 4004a8
> >    Ignore this, because it does not touch %rax
> > 
> > 3. unwind to 4004a4
> >    20(%rax) => 20(24(%rax)), continue to unwind because we still
> >    have no idea what %rax is
> > 
> > 4. unwind to 4004a0
> >    20(24(%rax)) => 20(24(-8(%rbp))), stop unwind, because we now know
> >    -8(%rbp) is foo.
> > 
> > So the original 20(%rax) is replace as 20(24(-8(%rbp))), and it means
> > foo->bar->fubar
> > 
> > Does this make sense?
> 
> I think it does, so we do just like with annotation, but parsing objdump
> -S output, is that what you're planning?

I mean to use libopcodes to decode the instructions.
But to parse objdump -S output maybe a better and simpler idea.

> 
> After we have the members we can do data annotation, in much the same
> way we do with code annotation, i.e. augmenting pahole output.

What is data annotation? Is it to list the percentage of access for each
member of the structure? For example,

struct bar {
        int poekoe[5];      //10%
        int fubar;          //20%
};

Lin Ming

> 
> - Arnaldo



  reply	other threads:[~2011-03-31 14:19 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-03-29  9:32 [RFC PATCH] perf report: add sort by file lines Lin Ming
2011-03-29  9:46 ` Masami Hiramatsu
2011-03-29  9:54 ` Peter Zijlstra
2011-03-29 16:45   ` Lin Ming
2011-03-29 17:03     ` Peter Zijlstra
2011-03-29 17:06       ` Peter Zijlstra
2011-03-29 17:08         ` Peter Zijlstra
2011-03-29 17:45           ` Arnaldo Carvalho de Melo
2011-03-30  1:04             ` Masami Hiramatsu
2011-03-30  2:18               ` Arnaldo Carvalho de Melo
2011-03-31  6:57               ` Lin Ming
2011-04-01 10:48                 ` Masami Hiramatsu
2011-03-31  8:45               ` Lin Ming
2011-03-31 13:46                 ` Arnaldo Carvalho de Melo
2011-03-31 14:19                   ` Lin Ming [this message]
2011-03-31 15:35                     ` Arnaldo Carvalho de Melo
2011-03-31 14:01                 ` Peter Zijlstra
2011-03-31 14:34                   ` Lin Ming
2011-03-31 14:51                     ` Lin Ming
2011-03-31 16:28                     ` Peter Zijlstra
2011-03-31 16:32                       ` Peter Zijlstra
2011-04-01 13:02                         ` Lin Ming
2011-04-01 13:48                           ` Peter Zijlstra
2011-04-01 10:44                       ` Masami Hiramatsu
2011-04-01 11:05                         ` Peter Zijlstra
2011-04-01 13:22                           ` Lin Ming
2011-04-01 13:49                             ` Peter Zijlstra
2011-04-01 13:57                               ` Lin Ming

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=1301581176.2271.9.camel@localhost \
    --to=ming.m.lin@intel.com \
    --cc=2nddept-manager@sdl.hitachi.co.jp \
    --cc=acme@infradead.org \
    --cc=fweisbec@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=masami.hiramatsu.pt@hitachi.com \
    --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