public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Frederic Weisbecker <fweisbec@gmail.com>
To: Akihiro Nagai <akihiro.nagai.hw@hitachi.com>
Cc: Arnaldo Carvalho de Melo <acme@infradead.org>,
	Ingo Molnar <mingo@elte.hu>,
	Peter Zijlstra <peterz@infradead.org>,
	linux-kernel@vger.kernel.org,
	Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>,
	2nddept-manager@sdl.hitachi.co.jp,
	David Ahern <daahern@cisco.com>
Subject: Re: [PATCH -tip v3 0/6] perf: Introduce branch sub commands
Date: Wed, 30 Mar 2011 16:46:43 +0200	[thread overview]
Message-ID: <20110330144639.GA2204@nowhere> (raw)
In-Reply-To: <20110324113137.20235.42265.stgit@localhost6.localdomain6>

On Thu, Mar 24, 2011 at 08:31:37PM +0900, Akihiro Nagai wrote:
> Hi,
> 
> This patch series provides the commands 'perf branch record' and 'perf branch trace'
> version 3. These commands record and analyze a BTS (Branch Trace Store) log.
> And, they provide the interface to use BTS log for application developers.
> 
> BTS is a facility of Intel x86 processors, which records the address of
> 'branch to/from' on every branch/jump instruction and interrupt.
> This facility is very useful for developers to test their software,
> for example, coverage test, execution path analysis, dynamic step count ...etc.
> These test tools have a big advantage, which user doesn't have to modify target
> executable binaries, because the BTS is a hardware feauture.
> 
> But, there are few applications using BTS. Reasons I guess are ...
>  - Few people know what BTS is.
>  - Few people know how to use BTS on Linux box.
>  - It's hard to analyze the BTS log because it includes just a series of addresses.
> 
> So, I want to provide a user-friendly interface to BTS for application developers.
> 
> 
>  About new sub commands
> ========================
> 'perf branch record' provides an easy way to record BTS log.
> Usage is 'perf branch record <command>'.  This command is just an alias to
> 'perf record -e branches:u -c 1 <command>'. But, new one is more simple and
> more intuitive.
> 
> 'perf branch trace' can parse and analyze recorded BTS log and print various
> information of execution path. This command can show address, pid, command name,
> function+offset, file path of elf.
> You can choose the printed information with option.
> 
> Example: 'perf branch trace'
> function+offset
> irq_return+0x0  => _start+0x0
> irq_return+0x0  => _start+0x0
> _start+0x3      => _dl_start+0x0
> irq_return+0x0  => _dl_start+0x0
> irq_return+0x0  => _dl_start+0x26
> irq_return+0x0  => _dl_start+0x2d

These results are a bit surprising. May be we can
jump once from irq_return to _start, in the first schedule()
of a new task perhaps, but thereafter I would expect
further jumps not to happen from irq_return, but rather
from _start. When we have x as a destination in line n, then
I would expect to have x as a source in n + 1.

Also we are supposed to only trace BTS in userspace, but
perhaps, if we are interrupted, after the execution of the iret instruction,
BTS considers the following jump "iret -> interrupted inst" as a branch
in userspace. After all it makes sense, it is a jump in userspace.

So BTS, because of the way it defines a jump inside userspace,
traces irq returns but not irq entries, that would explain the trace
you gave as an example.

I suspect we want to filter irq returns. ie: if the source comes
from the kernel, then filter it by default. And then we can later
think about an option to enable interrupt return tracing if
people want them.

Thanks.

  parent reply	other threads:[~2011-03-30 14:46 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-03-24 11:31 [PATCH -tip v3 0/6] perf: Introduce branch sub commands Akihiro Nagai
2011-03-24 11:31 ` [PATCH -tip v3 1/6] perf: new subcommand perf branch record Akihiro Nagai
2011-03-24 11:32 ` [PATCH -tip v3 2/6] perf branch: Introduce new sub command 'perf branch trace' Akihiro Nagai
2011-03-24 11:32 ` [PATCH -tip v3 3/6] perf branch trace: print pid and command Akihiro Nagai
2011-03-24 17:05   ` David Ahern
2011-03-25 10:14     ` Akihiro Nagai
2011-03-25 15:02       ` David Ahern
2011-03-28 10:34         ` Akihiro Nagai
2011-03-28 14:31           ` David Ahern
2011-04-01 15:13             ` Frederic Weisbecker
2011-04-01 15:15               ` Peter Zijlstra
2011-04-01 15:24                 ` Arnaldo Carvalho de Melo
2011-04-01 17:11               ` David Ahern
2011-04-01 20:20                 ` Peter Zijlstra
2011-04-06 12:15                 ` Frederic Weisbecker
2011-04-06 14:09                   ` Arnaldo Carvalho de Melo
2011-04-06 14:15                     ` Peter Zijlstra
2011-04-06 14:30                       ` Frederic Weisbecker
2011-04-06 14:34                         ` David Ahern
2011-04-06 14:43                           ` Frederic Weisbecker
2011-04-06 14:42                       ` Frederic Weisbecker
2011-04-06 14:55                     ` Frederic Weisbecker
2011-04-06 17:18                       ` Arnaldo Carvalho de Melo
2011-04-04 10:00               ` Akihiro Nagai
2011-04-06 12:52                 ` Frederic Weisbecker
2011-04-11  4:54                   ` Akihiro Nagai
2011-03-24 11:32 ` [PATCH -tip v3 4/6] perf branch trace: print file path of the executed elf Akihiro Nagai
2011-03-24 11:32 ` [PATCH -tip v3 5/6] perf branch trace: print function+offset Akihiro Nagai
2011-03-24 11:32 ` [PATCH -tip v3 6/6] perf branch trace: add print all option Akihiro Nagai
2011-03-30 14:46 ` Frederic Weisbecker [this message]
2011-04-01 10:57   ` [PATCH -tip v3 0/6] perf: Introduce branch sub commands Akihiro Nagai
2011-04-01 12:51     ` Frederic Weisbecker
2011-04-01 14:43 ` Frederic Weisbecker
2011-04-04 10:06   ` Akihiro Nagai

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=20110330144639.GA2204@nowhere \
    --to=fweisbec@gmail.com \
    --cc=2nddept-manager@sdl.hitachi.co.jp \
    --cc=acme@infradead.org \
    --cc=akihiro.nagai.hw@hitachi.com \
    --cc=daahern@cisco.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=masami.hiramatsu.pt@hitachi.com \
    --cc=mingo@elte.hu \
    --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