On Thu, Mar 24, 2011 at 08:31:37PM +0900, Akihiro Nagai wrote:Exactly, perf_sample has only one pid/tid field.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
_dl_start+0x71 => _dl_start+0x93
_dl_start+0x97 => _dl_start+0x78
...
This is the default behavior of 'perf branch trace'. It prints function+offset.
Example2: 'perf branch -cas trace'
command address function+offset
ls 0xffffffff8146fe0e irq_return+0x0 => ls 0x0000003806200b20 _start+0x0
You probably want to display the comm (and/or the pid/tid) only once. Those are not
going to change between the source and destination.