Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756750Ab1CXLbW (ORCPT ); Thu, 24 Mar 2011 07:31:22 -0400 Received: from mail9.hitachi.co.jp ([133.145.228.44]:38546 "EHLO mail9.hitachi.co.jp" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932103Ab1CXLbV (ORCPT ); Thu, 24 Mar 2011 07:31:21 -0400 X-Greylist: delayed 100923 seconds by postgrey-1.27 at vger.kernel.org; Thu, 24 Mar 2011 07:31:20 EDT X-AuditID: b753bd60-a594fba0000001d0-e7-4d8b2b866be7 X-AuditID: b753bd60-a594fba0000001d0-e7-4d8b2b866be7 From: Akihiro Nagai Subject: [PATCH -tip v3 0/6] perf: Introduce branch sub commands To: Arnaldo Carvalho de Melo , Ingo Molnar , Peter Zijlstra , Frederic Weisbecker Cc: linux-kernel@vger.kernel.org, Masami Hiramatsu , 2nddept-manager@sdl.hitachi.co.jp Date: Thu, 24 Mar 2011 20:31:37 +0900 Message-ID: <20110324113137.20235.42265.stgit@localhost6.localdomain6> User-Agent: StGIT/0.14.3 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Brightmail-Tracker: AAAAAA== Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 4437 Lines: 113 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 '. This command is just an alias to 'perf record -e branches:u -c 1 '. 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 ls 0xffffffff8146fe0e irq_return+0x0 => ls 0x0000003806200b20 _start+0x0 ls 0x0000003806200b23 _start+0x3 => ls 0x0000003806204910 _dl_start+0x0 ls 0xffffffff8146fe0e irq_return+0x0 => ls 0x0000003806204910 _dl_start+0x0 ls 0xffffffff8146fe0e irq_return+0x0 => ls 0x0000003806204936 _dl_start+0x26 ls 0xffffffff8146fe0e irq_return+0x0 => ls 0x000000380620493d _dl_start+0x2d ls 0x0000003806204981 _dl_start+0x71 => ls 0x00000038062049a3 _dl_start+0x93 ls 0x00000038062049a7 _dl_start+0x97 => ls 0x0000003806204988 _dl_start+0x78 ... 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 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 (6): 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 | 54 +++++ tools/perf/Makefile | 1 tools/perf/builtin-branch.c | 329 ++++++++++++++++++++++++++++++ tools/perf/builtin.h | 1 tools/perf/command-list.txt | 1 tools/perf/perf.c | 1 6 files changed, 387 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@hitachi.com) -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/