From: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
To: Akihiro Nagai <akihiro.nagai.hw@hitachi.com>
Cc: linux-kernel@vger.kernel.org,
Peter Zijlstra <peterz@infradead.org>,
Paul Mackerras <paulus@samba.org>, Ingo Molnar <mingo@elte.hu>,
Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
Subject: Re: [PATCH -tip 3/7] perf bts: Introduce new sub command 'perf bts trace'
Date: Mon, 06 Dec 2010 12:10:36 +0900 [thread overview]
Message-ID: <4CFC542C.1000603@hitachi.com> (raw)
In-Reply-To: <20101203035913.7827.85214.stgit@localhost6.localdomain6>
(2010/12/03 12:59), Akihiro Nagai wrote:
> Introduce new sub command 'perf bts trace'.
> This command can parse and print bts log recorded by
> 'perf bts record'.
>
> Usage:
> - First, record the bts log 'perf bts record <command>'
> - Second, parse and print bts log 'perf bts trace'
>
> Output:
> 0xffffffff8146fe0e => 0x0000003806200b20
> 0x0000003806200b23 => 0x0000003806204910
> 0xffffffff8146fe0e => 0x0000003806204910
> 0xffffffff8146fe0e => 0x0000003806204936
> 0xffffffff8146fe0e => 0x000000380620493d
> 0x0000003806204981 => 0x00000038062049a3
> 0x00000038062049a7 => 0x0000003806204988
> ...
>
> Signed-off-by: Akihiro Nagai <akihiro.nagai.hw@hitachi.com>
It looks a good step.
Reviewed-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
> Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
> Cc: Peter Zijlstra <peterz@infradead.org>
> Cc: Paul Mackerras <paulus@samba.org>
> Cc: Ingo Molnar <mingo@elte.hu>
> Cc: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
> Cc: linux-kernel@vger.kernel.org
> ---
>
> tools/perf/Documentation/perf-bts.txt | 14 ++++++--
> tools/perf/builtin-bts.c | 59 +++++++++++++++++++++++++++++++--
> 2 files changed, 67 insertions(+), 6 deletions(-)
>
> diff --git a/tools/perf/Documentation/perf-bts.txt b/tools/perf/Documentation/perf-bts.txt
> index 55a2fe6..5920dcc 100644
> --- a/tools/perf/Documentation/perf-bts.txt
> +++ b/tools/perf/Documentation/perf-bts.txt
> @@ -3,22 +3,30 @@ perf-bts(1)
>
> NAME
> ----
> -perf-bts - Record branch-trace-store log
> +perf-bts - Record and print branch-trace-store log
>
> SYNOPSIS
> --------
> [verse]
> -'perf bts' record <command>
> +'perf bts' [<options>] {record|trace}
>
> DESCRIPTION
> -----------
> -This command can record branch-trace-store log.
> +This command can record and print branch-trace-store log.
> Branch-trace-store is a facility of processors. It can record
> address of branch to/from on every branch instruction and interrupt.
>
> 'perf bts record <command>' records branch-trace-store log while specified
> command is executing. And, save to the file "perf.data".
>
> +'perf bts trace' parses recorded branch-trace-store log and prints it.
> +
> +OPTIONS
> +-------
> +-i::
> +--input=::
> + Specify input file name to analyze.
> +
> SEE ALSO
> --------
> linkperf:perf-record[1]
> diff --git a/tools/perf/builtin-bts.c b/tools/perf/builtin-bts.c
> index 587cfad..54e83af 100644
> --- a/tools/perf/builtin-bts.c
> +++ b/tools/perf/builtin-bts.c
> @@ -1,10 +1,25 @@
> #include "builtin.h"
> #include "perf.h"
> #include "util/parse-options.h"
> +#include "util/session.h"
> +#include "util/cache.h"
> +#include <inttypes.h>
> +
> +/* format string of specifying min width to print address */
> +#if __WORDSIZE == 32
> +#define FMT_ADDR_WIDTH "10" /* length of "0x" + 32bit address */
> +#else
> +#define FMT_ADDR_WIDTH "18" /* length of "0x" + 64bit address */
> +#endif
> +/* format string to print address */
> +#define FMT_ADDR "%#0" FMT_ADDR_WIDTH "llx"
> +
> +/* default input file name to analyze */
> +static const char *input_name = "perf.data";
>
> static const char * const bts_usage[] = {
> - "perf bts record <command>",
> - NULL,
> + "perf bts [<options>] {record|trace}",
> + NULL
> };
>
> /* arguments to call 'perf record' */
> @@ -16,11 +31,45 @@ static const char * const record_args[] = {
> "-d",
> };
>
> -/* dummy struct option to call parse_options() */
> static const struct option bts_options[] = {
> + OPT_STRING('i', "input", &input_name, "file", "input file name"),
> OPT_END()
> };
>
> +static int process_sample_event(event_t *event, struct perf_session *session)
> +{
> + struct sample_data data;
> +
> + memset(&data, 0, sizeof(data));
> + event__parse_sample(event, session->sample_type, &data);
> +
> + /* data.ip is 'from address', data.addr is 'to address' */
> + printf(FMT_ADDR " => " FMT_ADDR "\n", data.ip, data.addr);
> +
> + return 0;
> +}
> +
> +static struct perf_event_ops event_ops = {
> + .sample = process_sample_event,
> + .ordered_samples = false,
> +};
> +
> +static int __cmd_trace(void)
> +{
> + struct perf_session *session;
> +
> + session = perf_session__new(input_name, O_RDONLY, 0, false);
> + if (!session) {
> + fprintf(stderr, "failed to create perf_session.\n");
> + return -ENOMEM;
> + }
> +
> + perf_session__process_events(session, &event_ops);
> + perf_session__delete(session);
> +
> + return 0;
> +}
> +
> static int __cmd_record(int argc, const char **argv)
> {
> unsigned int rec_argc, i, j;
> @@ -55,6 +104,10 @@ int cmd_bts(int argc, const char **argv, const char *prefix __used)
>
> if (!strncmp(argv[0], "record", 6))
> return __cmd_record(argc, argv);
> + else if (!strncmp(argv[0], "trace", 5)) {
> + setup_pager();
> + return __cmd_trace();
> + }
> else
> usage_with_options(bts_usage, bts_options);
>
>
> --
> 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/
--
Masami HIRAMATSU
2nd Dept. Linux Technology Center
Hitachi, Ltd., Systems Development Laboratory
E-mail: masami.hiramatsu.pt@hitachi.com
next prev parent reply other threads:[~2010-12-06 3:10 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-12-03 3:58 [PATCH -tip 0/7] perf: Introduce bts sub commands Akihiro Nagai
2010-12-03 3:58 ` [PATCH -tip 1/7] perf: add OPT_CALLBACK_DEFAULT_NOOPT Akihiro Nagai
2010-12-06 2:23 ` Masami Hiramatsu
2010-12-07 6:56 ` [tip:perf/core] perf options: " tip-bot for Akihiro Nagai
2010-12-03 3:59 ` [PATCH -tip 2/7] perf: Introduce perf sub command 'bts record' Akihiro Nagai
2010-12-06 2:26 ` Masami Hiramatsu
2010-12-03 3:59 ` [PATCH -tip 3/7] perf bts: Introduce new sub command 'perf bts trace' Akihiro Nagai
2010-12-06 3:10 ` Masami Hiramatsu [this message]
2010-12-03 3:59 ` [PATCH -tip 4/7] perf bts trace: print pid and command Akihiro Nagai
2010-12-06 3:16 ` Masami Hiramatsu
2010-12-03 3:59 ` [PATCH -tip 5/7] perf bts trace: print file path of the executed elf Akihiro Nagai
2010-12-06 3:17 ` Masami Hiramatsu
2010-12-03 4:00 ` [PATCH -tip 6/7] perf bts trace: print function+offset Akihiro Nagai
2010-12-03 13:00 ` Peter Zijlstra
2010-12-06 10:08 ` Akihiro Nagai
2010-12-06 2:42 ` Frederic Weisbecker
2010-12-06 10:28 ` Akihiro Nagai
2010-12-06 3:20 ` Masami Hiramatsu
2010-12-03 4:00 ` [PATCH -tip 7/7] perf bts trace: add print all option Akihiro Nagai
2010-12-06 3:20 ` Masami Hiramatsu
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=4CFC542C.1000603@hitachi.com \
--to=masami.hiramatsu.pt@hitachi.com \
--cc=acme@ghostprotocols.net \
--cc=akihiro.nagai.hw@hitachi.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=paulus@samba.org \
--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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.