lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <4DDE7EAD.7000603@gmail.com>
Date:	Thu, 26 May 2011 10:24:13 -0600
From:	David Ahern <dsahern@...il.com>
To:	Frederic Weisbecker <fweisbec@...il.com>,
	Akihiro Nagai <akihiro.nagai.hw@...achi.com>
CC:	Arnaldo Carvalho de Melo <acme@...radead.org>,
	Ingo Molnar <mingo@...e.hu>,
	Peter Zijlstra <peterz@...radead.org>,
	linux-kernel@...r.kernel.org,
	Masami Hiramatsu <masami.hiramatsu.pt@...achi.com>,
	pp-manager@....hitachi.co.jp
Subject: Re: [PATCH -tip v4 0/7] perf: Introduce branch sub commands



On 05/26/2011 07:28 AM, Frederic Weisbecker wrote:
> (Adding David Ahern in Cc)
> 
> Ok that's all good except this needs to use the "perf script" centralized
> dump.
> 
> Currently running "perf script" without an actual script dumps
> the events by default, whatever kind of event they are: hardware,
> software, tracepoints, ...
> So we want the branch output to be supported there, so we can reuse
> some code and interface.
> 
> For example, "perf script -f branch:comm,tid,sym" would print the
> comm, tid and the sym for to and from addresses.
> 
> That's better than creating a new set of options in a new command
> that people need to relearn while everybody could simply get
> familiarized with common perf script options.
> 
> Of course we can still have a "perf branch" command, which could
> be a tiny shortcut that maps to perf record and perf script.
> 
> Like:
> 
> 	perf branch record
> 	perf branch [trace] -f tid,sym,comm
> 
> Would map to:
> 
> 	perf record branch:u
> 	perf script -f branch:tid,sym,comm
> 
> And may be if one day we can do something more tricky than a
> linear output for branches (like source code coloring/browsing),
> then it may be implemented inside perf branch and not rely on
> another subcommand. Until then we are only dealing with raw linear
> dump, and that's a core job for perf script where we want to
> centralize that kind of facility.

I mentioned that when v3 was posted.

The sample address can be converted to symbols and the output can be
added to perf-script rather easily. Attached is an example. I was going
to submit it back in April and got distracted. I'll rebase, move the
addr->sym conversion to a function and submit later today.

David

> 
> Thanks.
> 
> On Thu, May 26, 2011 at 02:02:46PM +0900, Akihiro Nagai wrote:
>> Hi,
>>
>> This patch series provides the commands 'perf branch record' and
>> 'perf branch trace' version 4. 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 -d <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
>> _start+0x3      => _dl_start+0x0
>> _dl_start+0x71  => _dl_start+0x93
>> _dl_start+0x97  => _dl_start+0x78
>> _dl_start+0x97  => _dl_start+0x78
>> _dl_start+0xa3  => _dl_start+0x3c0
>> _dl_start+0x3c8 => _dl_start+0x3e8
>> ...
>>
>> This is the default behavior of 'perf branch trace'. It prints function+offset.
>>
>> Example2: 'perf branch -cas trace'
>> command address            function+offset
>> ls      0x0000003e9b000b23 _start+0x3      => 0x0000003e9b004540 _dl_start+0x0
>> ls      0x0000003e9b0045b1 _dl_start+0x71  => 0x0000003e9b0045d3 _dl_start+0x93
>> ls      0x0000003e9b0045d7 _dl_start+0x97  => 0x0000003e9b0045b8 _dl_start+0x78
>> ls      0x0000003e9b0045d7 _dl_start+0x97  => 0x0000003e9b0045b8 _dl_start+0x78
>> ls      0x0000003e9b0045e3 _dl_start+0xa3  => 0x0000003e9b004900 _dl_start+0x3c0
>> ls      0x0000003e9b004908 _dl_start+0x3c8 => 0x0000003e9b004928 _dl_start+0x3e8
>> ...
>>
>> In the future, I'd like to make this more informative. For example
>>  - Show source file path
>>  - Show line number
>>  - Show inlined function name
>>  - Draw call graph
>>  - Browse source code and coloring
>>  - Make BTS record fast
>> and more!
>>
>> Changes in V4:
>>  - Add kenel filter
>>  - Print PID and command only once in a line
>>  - Add output TSV mode
>>
>> Changes in V3:
>>  - Update to the latest -tip tree
>>  - Rename to 'perf branch'
>>  - Process only BTS records
>>  - Fix bug of getting elf_filepath
>>  - Fix return value of __cmd_trace
>>
>> Changes in V2:
>>  - Update to the latest -tip tree
>>  - Add bts explanation to the subcommand list
>>  - Remove the patch already merged (add OPT_CALLBACK_DEFAULT_NOOPT)
>>  - Add comments
>>  - Add new function to the todo list
>>
>> Thanks,
>>
>> ---
>>
>> Akihiro Nagai (7):
>>       perf branch trace: add kernel filter
>>       perf branch trace: add print all option
>>       perf branch trace: print function+offset
>>       perf branch trace: print file path of the executed elf
>>       perf branch trace: print pid and command
>>       perf branch: Introduce new sub command 'perf branch trace'
>>       perf: new subcommand perf branch record
>>
>>
>>  tools/perf/Documentation/perf-branch.txt |   62 +++++
>>  tools/perf/Makefile                      |    1 
>>  tools/perf/builtin-branch.c              |  361 ++++++++++++++++++++++++++++++
>>  tools/perf/builtin.h                     |    1 
>>  tools/perf/command-list.txt              |    1 
>>  tools/perf/perf.c                        |    1 
>>  6 files changed, 427 insertions(+), 0 deletions(-)
>>  create mode 100644 tools/perf/Documentation/perf-branch.txt
>>  create mode 100644 tools/perf/builtin-branch.c
>>
>> -- 
>> Akihiro Nagai (akihiro.nagai.hw@...achi.com)

View attachment "perf-sample-addr.patch" of type "text/plain" (3025 bytes)

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ