From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Adrian Hunter <adrian.hunter@intel.com>
Cc: Peter Zijlstra <peterz@infradead.org>,
linux-kernel@vger.kernel.org, David Ahern <dsahern@gmail.com>,
Frederic Weisbecker <fweisbec@gmail.com>,
Jiri Olsa <jolsa@redhat.com>, Namhyung Kim <namhyung@gmail.com>,
Stephane Eranian <eranian@google.com>
Subject: Re: [PATCH 09/44] perf session: Add instruction tracing options
Date: Tue, 21 Apr 2015 11:50:38 -0300 [thread overview]
Message-ID: <20150421145038.GD11111@kernel.org> (raw)
In-Reply-To: <1428594864-29309-10-git-send-email-adrian.hunter@intel.com>
Em Thu, Apr 09, 2015 at 06:53:49PM +0300, Adrian Hunter escreveu:
> It is assumed that AUX area decoding will synthesize events for
> consumption by other tools. At this time, the main use of AUX area
> tracing will be to capture instruction trace (aka processor trace)
> data. The nature of instruction tracing suggests the initial
> inclusion of options for "instructions" and "branches" events, but
> more could be added as needed.
> +++ b/tools/perf/util/auxtrace.c
> @@ -37,6 +37,7 @@
>
> #include "event.h"
> #include "debug.h"
> +#include "parse-options.h"
>
> int auxtrace_mmap__mmap(struct auxtrace_mmap *mm,
> struct auxtrace_mmap_params *mp,
> @@ -200,6 +201,136 @@ out_free:
> return err;
> }
>
> +#define PERF_ITRACE_DEFAULT_PERIOD_TYPE PERF_ITRACE_PERIOD_NANOSECS
> +#define PERF_ITRACE_DEFAULT_PERIOD 100000
> +#define PERF_ITRACE_DEFAULT_CALLCHAIN_SZ 16
> +#define PERF_ITRACE_MAX_CALLCHAIN_SZ 1024
> +
> +void itrace_synth_opts__set_default(struct itrace_synth_opts *synth_opts)
> +{
> + synth_opts->instructions = true;
> + synth_opts->branches = true;
> + synth_opts->errors = true;
> + synth_opts->period_type = PERF_ITRACE_DEFAULT_PERIOD_TYPE;
> + synth_opts->period = PERF_ITRACE_DEFAULT_PERIOD;
> + synth_opts->callchain_sz = PERF_ITRACE_DEFAULT_CALLCHAIN_SZ;
> +}
> +
> +int itrace_parse_synth_opts(const struct option *opt, const char *str,
> + int unset)
> +{
> + struct itrace_synth_opts *synth_opts = opt->value;
> + const char *p;
> + char *endptr;
> +
> + synth_opts->set = true;
> +
> + if (unset) {
> + synth_opts->dont_decode = true;
> + return 0;
> + }
> +
> + if (!str) {
> + itrace_synth_opts__set_default(synth_opts);
> + return 0;
> + }
> +
> + for (p = str; *p;) {
> + switch (*p++) {
> + case 'i':
> + synth_opts->instructions = true;
Is this documented anywhere? I.e. examples for setting up this synth
ops?
> + while (*p == ' ' || *p == ',')
> + p += 1;
> + if (isdigit(*p)) {
> + synth_opts->period = strtoull(p, &endptr, 10);
> + p = endptr;
> + while (*p == ' ' || *p == ',')
> + p += 1;
> + switch (*p++) {
> + case 'i':
> + synth_opts->period_type =
> + PERF_ITRACE_PERIOD_INSTRUCTIONS;
> + break;
> + case 't':
> + synth_opts->period_type =
> + PERF_ITRACE_PERIOD_TICKS;
> + break;
> + case 'm':
> + synth_opts->period *= 1000;
> + /* Fall through */
> + case 'u':
> + synth_opts->period *= 1000;
> + /* Fall through */
> + case 'n':
> + if (*p++ != 's')
> + goto out_err;
> + synth_opts->period_type =
> + PERF_ITRACE_PERIOD_NANOSECS;
> + break;
> + case '\0':
> + goto out;
> + default:
> + goto out_err;
> + }
> + }
> + break;
> + case 'b':
> + synth_opts->branches = true;
> + break;
> + case 'e':
> + synth_opts->errors = true;
> + break;
> + case 'd':
> + synth_opts->log = true;
> + break;
> + case 'c':
> + synth_opts->branches = true;
> + synth_opts->calls = true;
> + break;
> + case 'r':
> + synth_opts->branches = true;
> + synth_opts->returns = true;
> + break;
> + case 'g':
> + synth_opts->instructions = true;
> + synth_opts->callchain = true;
> + synth_opts->callchain_sz =
> + PERF_ITRACE_DEFAULT_CALLCHAIN_SZ;
> + while (*p == ' ' || *p == ',')
> + p += 1;
> + if (isdigit(*p)) {
> + unsigned int val;
> +
> + val = strtoul(p, &endptr, 10);
> + p = endptr;
> + if (!val || val > PERF_ITRACE_MAX_CALLCHAIN_SZ)
> + goto out_err;
> + synth_opts->callchain_sz = val;
> + }
> + break;
> + case ' ':
> + case ',':
> + break;
> + default:
> + goto out_err;
> + }
> + }
> +out:
> + if (synth_opts->instructions) {
> + if (!synth_opts->period_type)
> + synth_opts->period_type =
> + PERF_ITRACE_DEFAULT_PERIOD_TYPE;
> + if (!synth_opts->period)
> + synth_opts->period = PERF_ITRACE_DEFAULT_PERIOD;
> + }
> +
> + return 0;
> +
> +out_err:
> + pr_err("Bad Instruction Tracing options '%s'\n", str);
> + return -EINVAL;
> +}
> +
> int auxtrace_mmap__read(struct auxtrace_mmap *mm, struct auxtrace_record *itr,
> struct perf_tool *tool, process_auxtrace_t fn)
> {
> diff --git a/tools/perf/util/auxtrace.h b/tools/perf/util/auxtrace.h
> index 199fc27..6355315 100644
> --- a/tools/perf/util/auxtrace.h
> +++ b/tools/perf/util/auxtrace.h
> @@ -29,9 +29,49 @@ union perf_event;
> struct perf_session;
> struct perf_evlist;
> struct perf_tool;
> +struct option;
> struct record_opts;
> struct auxtrace_info_event;
>
> +enum itrace_period_type {
> + PERF_ITRACE_PERIOD_INSTRUCTIONS,
> + PERF_ITRACE_PERIOD_TICKS,
> + PERF_ITRACE_PERIOD_NANOSECS,
> +};
> +
> +/**
> + * struct itrace_synth_opts - AUX area tracing synthesis options.
> + * @set: indicates whether or not options have been set
> + * @inject: indicates the event (not just the sample) must be fully synthesized
> + * because 'perf inject' will write it out
> + * @instructions: whether to synthesize 'instructions' events
> + * @branches: whether to synthesize 'branches' events
> + * @errors: whether to synthesize decoder error events
> + * @dont_decode: whether to skip decoding entirely
> + * @log: write a decoding log
> + * @calls: limit branch samples to calls (can be combined with @returns)
> + * @returns: limit branch samples to returns (can be combined with @calls)
> + * @callchain: add callchain to 'instructions' events
> + * @callchain_sz: maximum callchain size
> + * @period: 'instructions' events period
> + * @period_type: 'instructions' events period type
> + */
> +struct itrace_synth_opts {
> + bool set;
> + bool inject;
> + bool instructions;
> + bool branches;
> + bool errors;
> + bool dont_decode;
> + bool log;
> + bool calls;
> + bool returns;
> + bool callchain;
> + unsigned int callchain_sz;
> + unsigned long long period;
> + enum itrace_period_type period_type;
> +};
> +
> /**
> * struct auxtrace - session callbacks to allow AUX area data decoding.
> * @process_event: lets the decoder see all session events
> @@ -186,6 +226,9 @@ int perf_event__synthesize_auxtrace_info(struct auxtrace_record *itr,
> struct perf_tool *tool,
> struct perf_session *session,
> perf_event__handler_t process);
> +int itrace_parse_synth_opts(const struct option *opt, const char *str,
> + int unset);
> +void itrace_synth_opts__set_default(struct itrace_synth_opts *synth_opts);
>
> static inline int auxtrace__process_event(struct perf_session *session,
> union perf_event *event,
> diff --git a/tools/perf/util/session.h b/tools/perf/util/session.h
> index 8a69d3b..9ed5135 100644
> --- a/tools/perf/util/session.h
> +++ b/tools/perf/util/session.h
> @@ -16,12 +16,14 @@ struct ip_callchain;
> struct thread;
>
> struct auxtrace;
> +struct itrace_synth_opts;
>
> struct perf_session {
> struct perf_header header;
> struct machines machines;
> struct perf_evlist *evlist;
> struct auxtrace *auxtrace;
> + struct itrace_synth_opts *itrace_synth_opts;
> struct trace_event tevent;
> bool repipe;
> bool one_mmap;
> --
> 1.9.1
next prev parent reply other threads:[~2015-04-21 14:50 UTC|newest]
Thread overview: 79+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-04-09 15:53 [PATCH 00/44] perf tools: Introduce an abstraction for AUX Area and Instruction Tracing Adrian Hunter
2015-04-09 15:53 ` [PATCH 01/44] perf header: Add AUX area tracing feature Adrian Hunter
2015-05-06 2:58 ` [tip:perf/core] " tip-bot for Adrian Hunter
2015-04-09 15:53 ` [PATCH 02/44] perf evlist: Add support for mmapping an AUX area buffer Adrian Hunter
2015-05-06 2:58 ` [tip:perf/core] " tip-bot for Adrian Hunter
2015-04-09 15:53 ` [PATCH 03/44] perf tools: Add user events for AUX area tracing Adrian Hunter
2015-04-20 23:06 ` Arnaldo Carvalho de Melo
2015-04-20 23:10 ` Arnaldo Carvalho de Melo
2015-04-21 9:23 ` Adrian Hunter
2015-05-06 2:59 ` [tip:perf/core] " tip-bot for Adrian Hunter
2015-04-09 15:53 ` [PATCH 04/44] perf tools: Add support for AUX area recording Adrian Hunter
2015-04-20 23:17 ` Arnaldo Carvalho de Melo
2015-05-06 2:59 ` [tip:perf/core] perf auxtrace: " tip-bot for Adrian Hunter
2015-04-09 15:53 ` [PATCH 05/44] perf record: Add basic AUX area tracing support Adrian Hunter
2015-05-06 2:59 ` [tip:perf/core] " tip-bot for Adrian Hunter
2015-04-09 15:53 ` [PATCH 06/44] perf record: Extend -m option for AUX area tracing mmap pages Adrian Hunter
2015-05-06 2:59 ` [tip:perf/core] " tip-bot for Adrian Hunter
2015-04-09 15:53 ` [PATCH 07/44] perf tools: Add a user event for AUX area tracing errors Adrian Hunter
2015-05-06 3:00 ` [tip:perf/core] " tip-bot for Adrian Hunter
2015-04-09 15:53 ` [PATCH 08/44] perf session: Add hooks to allow transparent decoding of AUX area tracing data Adrian Hunter
2015-04-21 14:41 ` Arnaldo Carvalho de Melo
2015-04-21 14:46 ` Arnaldo Carvalho de Melo
2015-05-06 3:00 ` [tip:perf/core] " tip-bot for Adrian Hunter
2015-04-09 15:53 ` [PATCH 09/44] perf session: Add instruction tracing options Adrian Hunter
2015-04-21 14:50 ` Arnaldo Carvalho de Melo [this message]
2015-04-22 6:23 ` Adrian Hunter
2015-04-23 14:08 ` Arnaldo Carvalho de Melo
2015-05-06 3:00 ` [tip:perf/core] " tip-bot for Adrian Hunter
2015-04-09 15:53 ` [PATCH 10/44] perf auxtrace: Add helpers for AUX area tracing errors Adrian Hunter
2015-05-06 3:01 ` [tip:perf/core] " tip-bot for Adrian Hunter
2015-04-09 15:53 ` [PATCH 11/44] perf auxtrace: Add helpers for queuing AUX area tracing data Adrian Hunter
2015-04-21 9:21 ` [PATCH V2 " Adrian Hunter
2015-05-06 3:01 ` [tip:perf/core] " tip-bot for Adrian Hunter
2015-04-09 15:53 ` [PATCH 12/44] perf auxtrace: Add a heap for sorting AUX area tracing queues Adrian Hunter
2015-04-21 15:01 ` Arnaldo Carvalho de Melo
2015-05-06 3:01 ` [tip:perf/core] " tip-bot for Adrian Hunter
2015-04-09 15:53 ` [PATCH 13/44] perf auxtrace: Add processing for AUX area tracing events Adrian Hunter
2015-05-06 3:01 ` [tip:perf/core] " tip-bot for Adrian Hunter
2015-04-09 15:53 ` [PATCH 14/44] perf auxtrace: Add a hashtable for caching Adrian Hunter
2015-05-06 3:02 ` [tip:perf/core] " tip-bot for Adrian Hunter
2015-04-09 15:53 ` [PATCH 15/44] perf tools: Add member to struct dso for an instruction cache Adrian Hunter
2015-05-06 3:02 ` [tip:perf/core] " tip-bot for Adrian Hunter
2015-04-09 15:53 ` [PATCH 16/44] perf script: Add Instruction Tracing support Adrian Hunter
2015-05-06 3:02 ` [tip:perf/core] " tip-bot for Adrian Hunter
2015-04-09 15:53 ` [PATCH 17/44] perf script: Always allow fields 'addr' and 'cpu' for auxtrace Adrian Hunter
2015-04-09 15:53 ` [PATCH 18/44] perf report: Add Instruction Tracing support Adrian Hunter
2015-04-23 14:16 ` Arnaldo Carvalho de Melo
2015-04-09 15:53 ` [PATCH 19/44] perf inject: Re-pipe AUX area tracing events Adrian Hunter
2015-04-21 9:21 ` [PATCH V2 " Adrian Hunter
2015-05-06 3:03 ` [tip:perf/core] " tip-bot for Adrian Hunter
2015-04-09 15:54 ` [PATCH 20/44] perf inject: Add Instruction Tracing support Adrian Hunter
2015-05-06 3:03 ` [tip:perf/core] " tip-bot for Adrian Hunter
2015-04-09 15:54 ` [PATCH 21/44] perf tools: Add AUX area tracing index Adrian Hunter
2015-04-09 15:54 ` [PATCH 22/44] perf tools: Hit all build ids when AUX area tracing Adrian Hunter
2015-04-09 15:54 ` [PATCH 23/44] perf tools: Add build option NO_AUXTRACE to exclude " Adrian Hunter
2015-04-21 9:21 ` [PATCH V2 " Adrian Hunter
2015-04-09 15:54 ` [PATCH 24/44] perf auxtrace: Add option to synthesize events for transactions Adrian Hunter
2015-04-09 15:54 ` [PATCH 25/44] perf script: Add field option 'flags' to print sample flags Adrian Hunter
2015-05-06 3:03 ` [tip:perf/core] " tip-bot for Adrian Hunter
2015-04-09 15:54 ` [PATCH 26/44] perf tools: Add aux_watermark member of struct perf_event_attr Adrian Hunter
2015-05-06 3:03 ` [tip:perf/core] " tip-bot for Adrian Hunter
2015-04-09 15:54 ` [PATCH 27/44] perf tools: Add support for PERF_RECORD_AUX Adrian Hunter
2015-04-09 15:54 ` [PATCH 28/44] perf tools: Add support for PERF_RECORD_ITRACE_START Adrian Hunter
2015-04-09 15:54 ` [PATCH 29/44] perf tools: Add AUX area tracing Snapshot Mode Adrian Hunter
2015-04-09 15:54 ` [PATCH 30/44] perf record: Add AUX area tracing Snapshot Mode support Adrian Hunter
2015-04-09 15:54 ` [PATCH 31/44] perf auxtrace: Add Intel PT as an AUX area tracing type Adrian Hunter
2015-04-09 15:54 ` [PATCH 32/44] perf tools: Add Intel PT packet decoder Adrian Hunter
2015-04-09 15:54 ` [PATCH 33/44] perf tools: Add Intel PT instruction decoder Adrian Hunter
2015-04-09 15:54 ` [PATCH 34/44] perf tools: Add Intel PT log Adrian Hunter
2015-04-09 15:54 ` [PATCH 35/44] perf tools: Add Intel PT decoder Adrian Hunter
2015-04-09 15:54 ` [PATCH 36/44] perf tools: Add Intel PT support Adrian Hunter
2015-04-09 15:54 ` [PATCH 37/44] perf tools: Take Intel PT into use Adrian Hunter
2015-04-09 15:54 ` [PATCH 38/44] perf tools: Allow auxtrace data alignment Adrian Hunter
2015-04-09 15:54 ` [PATCH 39/44] perf tools: Add Intel BTS support Adrian Hunter
2015-04-09 15:54 ` [PATCH 40/44] perf tools: Output sample flags and insn_len from intel_pt Adrian Hunter
2015-04-09 15:54 ` [PATCH 41/44] perf tools: Output sample flags and insn_len from intel_bts Adrian Hunter
2015-04-09 15:54 ` [PATCH 42/44] perf tools: Intel PT to always update thread stack trace number Adrian Hunter
2015-04-09 15:54 ` [PATCH 43/44] perf tools: Intel BTS " Adrian Hunter
2015-04-09 15:54 ` [PATCH 44/44] perf tools: Add example call-graph script Adrian Hunter
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=20150421145038.GD11111@kernel.org \
--to=acme@kernel.org \
--cc=adrian.hunter@intel.com \
--cc=dsahern@gmail.com \
--cc=eranian@google.com \
--cc=fweisbec@gmail.com \
--cc=jolsa@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=namhyung@gmail.com \
--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.