From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Jiri Olsa <jolsa@kernel.org>
Cc: lkml <linux-kernel@vger.kernel.org>,
David Ahern <dsahern@gmail.com>, Ingo Molnar <mingo@kernel.org>,
Namhyung Kim <namhyung@kernel.org>,
Peter Zijlstra <a.p.zijlstra@chello.nl>,
"Liang, Kan" <kan.liang@intel.com>
Subject: Re: [PATCH 03/52] perf tools: Add thread_map event
Date: Mon, 26 Oct 2015 14:42:06 -0300 [thread overview]
Message-ID: <20151026174206.GN27006@kernel.org> (raw)
In-Reply-To: <1445784728-21732-4-git-send-email-jolsa@kernel.org>
Em Sun, Oct 25, 2015 at 03:51:19PM +0100, Jiri Olsa escreveu:
> Adding thread_map event to pass/store thread maps
> as data in pipe/perf.data.
>
> Storing thread ID along with the standard comm[16]
> thread name string.
>
> Link: http://lkml.kernel.org/n/tip-2l07qyf3buhnt83q4ezqz5sj@git.kernel.org
> Signed-off-by: Jiri Olsa <jolsa@kernel.org>
> ---
> tools/perf/util/event.c | 1 +
> tools/perf/util/event.h | 13 +++++++++++++
> tools/perf/util/session.c | 26 ++++++++++++++++++++++++++
> tools/perf/util/tool.h | 3 ++-
> 4 files changed, 42 insertions(+), 1 deletion(-)
>
> diff --git a/tools/perf/util/event.c b/tools/perf/util/event.c
> index 8b10621b415c..771545a27b9b 100644
> --- a/tools/perf/util/event.c
> +++ b/tools/perf/util/event.c
> @@ -37,6 +37,7 @@ static const char *perf_event__names[] = {
> [PERF_RECORD_AUXTRACE_INFO] = "AUXTRACE_INFO",
> [PERF_RECORD_AUXTRACE] = "AUXTRACE",
> [PERF_RECORD_AUXTRACE_ERROR] = "AUXTRACE_ERROR",
> + [PERF_RECORD_THREAD_MAP] = "THREAD_MAP",
> };
>
> const char *perf_event__name(unsigned int id)
> diff --git a/tools/perf/util/event.h b/tools/perf/util/event.h
> index a0dbcbd4f6d8..f075f9ed0051 100644
> --- a/tools/perf/util/event.h
> +++ b/tools/perf/util/event.h
> @@ -226,6 +226,7 @@ enum perf_user_event_type { /* above any possible kernel type */
> PERF_RECORD_AUXTRACE_INFO = 70,
> PERF_RECORD_AUXTRACE = 71,
> PERF_RECORD_AUXTRACE_ERROR = 72,
> + PERF_RECORD_THREAD_MAP = 73,
> PERF_RECORD_HEADER_MAX
> };
>
> @@ -356,6 +357,17 @@ struct context_switch_event {
> u32 next_prev_tid;
> };
>
> +struct thread_map_data_event {
Humm, I think "data" here is way too vague here, how about
"thread_map_event_entry"?
Moving of "entry" to the end also helps in understanding that this is
not an "event" per se, it doesn't have the perv_event_header, etc, its
just an entry in a 'struct thread_map_event'.
I'm tentatively doing this change in my local branch, please let me know
if you have any reason to object to such a change,
- Arnaldo
> + u64 pid;
> + char comm[16];
> +};
> +
> +struct thread_map_event {
> + struct perf_event_header header;
> + u64 nr;
> + struct thread_map_data_event data[];
> +};
> +
> union perf_event {
> struct perf_event_header header;
> struct mmap_event mmap;
> @@ -378,6 +390,7 @@ union perf_event {
> struct aux_event aux;
> struct itrace_start_event itrace_start;
> struct context_switch_event context_switch;
> + struct thread_map_event thread_map;
> };
>
> void perf_event__print_totals(void);
> diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c
> index 428149bc64d2..ec1ecd31003b 100644
> --- a/tools/perf/util/session.c
> +++ b/tools/perf/util/session.c
> @@ -296,6 +296,16 @@ int process_event_auxtrace_error_stub(struct perf_tool *tool __maybe_unused,
> return 0;
> }
>
> +
> +static
> +int process_event_thread_map_stub(struct perf_tool *tool __maybe_unused,
> + union perf_event *event __maybe_unused,
> + struct perf_session *session __maybe_unused)
> +{
> + dump_printf(": unhandled!\n");
> + return 0;
> +}
> +
> void perf_tool__fill_defaults(struct perf_tool *tool)
> {
> if (tool->sample == NULL)
> @@ -346,6 +356,8 @@ void perf_tool__fill_defaults(struct perf_tool *tool)
> tool->auxtrace = process_event_auxtrace_stub;
> if (tool->auxtrace_error == NULL)
> tool->auxtrace_error = process_event_auxtrace_error_stub;
> + if (tool->thread_map == NULL)
> + tool->thread_map = process_event_thread_map_stub;
> }
>
> static void swap_sample_id_all(union perf_event *event, void *data)
> @@ -616,6 +628,17 @@ static void perf_event__auxtrace_error_swap(union perf_event *event,
> event->auxtrace_error.ip = bswap_64(event->auxtrace_error.ip);
> }
>
> +static void perf_event__thread_map_swap(union perf_event *event,
> + bool sample_id_all __maybe_unused)
> +{
> + unsigned i;
> +
> + event->thread_map.nr = bswap_64(event->thread_map.nr);
> +
> + for (i = 0; i < event->thread_map.nr; i++)
> + event->thread_map.data[i].pid = bswap_64(event->thread_map.data[i].pid);
> +}
> +
> typedef void (*perf_event__swap_op)(union perf_event *event,
> bool sample_id_all);
>
> @@ -643,6 +666,7 @@ static perf_event__swap_op perf_event__swap_ops[] = {
> [PERF_RECORD_AUXTRACE_INFO] = perf_event__auxtrace_info_swap,
> [PERF_RECORD_AUXTRACE] = perf_event__auxtrace_swap,
> [PERF_RECORD_AUXTRACE_ERROR] = perf_event__auxtrace_error_swap,
> + [PERF_RECORD_THREAD_MAP] = perf_event__thread_map_swap,
> [PERF_RECORD_HEADER_MAX] = NULL,
> };
>
> @@ -1179,6 +1203,8 @@ static s64 perf_session__process_user_event(struct perf_session *session,
> case PERF_RECORD_AUXTRACE_ERROR:
> perf_session__auxtrace_error_inc(session, event);
> return tool->auxtrace_error(tool, event, session);
> + case PERF_RECORD_THREAD_MAP:
> + return tool->thread_map(tool, event, session);
> default:
> return -EINVAL;
> }
> diff --git a/tools/perf/util/tool.h b/tools/perf/util/tool.h
> index cab8cc24831b..1af4774960c3 100644
> --- a/tools/perf/util/tool.h
> +++ b/tools/perf/util/tool.h
> @@ -55,7 +55,8 @@ struct perf_tool {
> event_op2 build_id,
> id_index,
> auxtrace_info,
> - auxtrace_error;
> + auxtrace_error,
> + thread_map;
> event_op3 auxtrace;
> bool ordered_events;
> bool ordering_requires_timestamps;
> --
> 2.4.3
next prev parent reply other threads:[~2015-10-26 17:42 UTC|newest]
Thread overview: 99+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-10-25 14:51 [PATCHv5 00/52] perf stat: Add scripting support Jiri Olsa
2015-10-25 14:51 ` [PATCH 01/52] perf cpu_map: Add cpu_map__empty_new function Jiri Olsa
2015-10-29 9:41 ` [tip:perf/core] " tip-bot for Jiri Olsa
2015-10-25 14:51 ` [PATCH 02/52] perf stat: Cache aggregated map entries in extra cpumap Jiri Olsa
2015-10-29 9:41 ` [tip:perf/core] " tip-bot for Jiri Olsa
2015-10-25 14:51 ` [PATCH 03/52] perf tools: Add thread_map event Jiri Olsa
2015-10-26 17:42 ` Arnaldo Carvalho de Melo [this message]
2015-10-26 17:45 ` Jiri Olsa
2015-10-26 17:48 ` Arnaldo Carvalho de Melo
2015-10-26 17:55 ` Jiri Olsa
2015-10-26 17:57 ` Arnaldo Carvalho de Melo
2015-12-18 9:00 ` [tip:perf/core] perf thread_map: Add thread_map user level event tip-bot for Jiri Olsa
2015-10-25 14:51 ` [PATCH 04/52] perf tools: Add thread_map event sythesize function Jiri Olsa
2015-12-18 9:00 ` [tip:perf/core] perf thread_map: " tip-bot for Jiri Olsa
2015-10-25 14:51 ` [PATCH 05/52] perf tools: Add thread_map__new_event function Jiri Olsa
2015-12-18 9:01 ` [tip:perf/core] perf thread_map: " tip-bot for Jiri Olsa
2015-10-25 14:51 ` [PATCH 06/52] perf tools: Add perf_event__fprintf_thread_map function Jiri Olsa
2015-12-18 9:01 ` [tip:perf/core] perf thread_map: " tip-bot for Jiri Olsa
2015-10-25 14:51 ` [PATCH 07/52] perf tools: Add cpu_map event Jiri Olsa
2015-12-18 9:01 ` [tip:perf/core] perf cpu_map: Add cpu_map user level event tip-bot for Jiri Olsa
2015-10-25 14:51 ` [PATCH 08/52] perf tools: Add cpu_map event synthesize function Jiri Olsa
2015-12-18 9:02 ` [tip:perf/core] perf cpu_map: " tip-bot for Jiri Olsa
2015-10-25 14:51 ` [PATCH 09/52] perf tools: Add cpu_map__new_event function Jiri Olsa
2015-12-18 9:02 ` [tip:perf/core] perf cpu_map: " tip-bot for Jiri Olsa
2015-10-25 14:51 ` [PATCH 10/52] perf tools: Add perf_event__fprintf_cpu_map function Jiri Olsa
2015-12-18 9:02 ` [tip:perf/core] perf cpu_map: " tip-bot for Jiri Olsa
2015-10-25 14:51 ` [PATCH 11/52] perf tools: Add stat config event Jiri Olsa
2015-10-27 13:16 ` Arnaldo Carvalho de Melo
2015-10-27 13:30 ` Jiri Olsa
2015-10-27 13:44 ` Arnaldo Carvalho de Melo
2015-10-27 13:51 ` Jiri Olsa
2015-10-27 14:13 ` Arnaldo Carvalho de Melo
2015-12-18 9:03 ` [tip:perf/core] perf tools: Add stat config user level event tip-bot for Jiri Olsa
2015-10-25 14:51 ` [PATCH 12/52] perf tools: Add stat config event synthesize function Jiri Olsa
2015-12-18 9:03 ` [tip:perf/core] " tip-bot for Jiri Olsa
2015-10-25 14:51 ` [PATCH 13/52] perf tools: Add stat config event read function Jiri Olsa
2015-12-18 9:03 ` [tip:perf/core] " tip-bot for Jiri Olsa
2015-10-25 14:51 ` [PATCH 14/52] perf tools: Add stat event Jiri Olsa
2015-12-18 9:04 ` [tip:perf/core] perf tools: Add stat user level event tip-bot for Jiri Olsa
2015-10-25 14:51 ` [PATCH 15/52] perf tools: Add stat event synthesize function Jiri Olsa
2015-12-18 9:04 ` [tip:perf/core] " tip-bot for Jiri Olsa
2015-10-25 14:51 ` [PATCH 16/52] perf tools: Add stat event read function Jiri Olsa
2015-12-18 9:04 ` [tip:perf/core] " tip-bot for Jiri Olsa
2015-10-25 14:51 ` [PATCH 17/52] perf tools: Add stat round event Jiri Olsa
2015-12-18 9:05 ` [tip:perf/core] perf tools: Add stat round user level event tip-bot for Jiri Olsa
2015-10-25 14:51 ` [PATCH 18/52] perf tools: Add stat round event synthesize function Jiri Olsa
2015-12-18 9:05 ` [tip:perf/core] " tip-bot for Jiri Olsa
2015-10-25 14:51 ` [PATCH 19/52] perf tools: Add stat events fprintf functions Jiri Olsa
2015-12-18 9:05 ` [tip:perf/core] " tip-bot for Jiri Olsa
2015-10-25 14:51 ` [PATCH 20/52] perf tools: Add event_update event Jiri Olsa
2015-12-18 9:06 ` [tip:perf/core] perf tools: Add event_update user level event tip-bot for Jiri Olsa
2015-10-25 14:51 ` [PATCH 21/52] perf tools: Add event_update event unit type Jiri Olsa
2015-12-18 9:06 ` [tip:perf/core] " tip-bot for Jiri Olsa
2015-10-25 14:51 ` [PATCH 22/52] perf tools: Add event_update event scale type Jiri Olsa
2015-12-18 9:06 ` [tip:perf/core] " tip-bot for Jiri Olsa
2015-10-25 14:51 ` [PATCH 23/52] perf tools: Add event_update event name type Jiri Olsa
2015-12-18 9:07 ` [tip:perf/core] " tip-bot for Jiri Olsa
2015-10-25 14:51 ` [PATCH 24/52] perf tools: Add event_update event cpus type Jiri Olsa
2015-12-18 9:07 ` [tip:perf/core] " tip-bot for Jiri Olsa
2015-10-25 14:51 ` [PATCH 25/52] perf tools: Add perf_event__fprintf_event_update function Jiri Olsa
2015-12-18 9:07 ` [tip:perf/core] " tip-bot for Jiri Olsa
2015-10-25 14:51 ` [PATCH 26/52] perf report: Display newly added events in raw dump Jiri Olsa
2015-12-18 9:07 ` [tip:perf/core] " tip-bot for Jiri Olsa
2015-10-25 14:51 ` [PATCH 27/52] perf tools: Introduce stat feature Jiri Olsa
2015-12-18 9:08 ` [tip:perf/core] perf tools: Introduce stat perf.data header feature tip-bot for Jiri Olsa
2015-10-25 14:51 ` [PATCH 28/52] perf tools: Move id_offset out of struct perf_evsel union Jiri Olsa
2015-10-29 9:40 ` [tip:perf/core] perf evsel: Move id_offset out of struct perf_evsel union member tip-bot for Jiri Olsa
2015-10-25 14:51 ` [PATCH 29/52] perf stat record: Add record command Jiri Olsa
2015-10-27 14:26 ` Arnaldo Carvalho de Melo
2015-10-25 14:51 ` [PATCH 30/52] perf stat record: Initialize record features Jiri Olsa
2015-10-25 14:51 ` [PATCH 31/52] perf stat record: Synthesize stat record data Jiri Olsa
2015-10-27 14:42 ` Arnaldo Carvalho de Melo
2015-10-28 12:15 ` Jiri Olsa
2015-10-28 13:03 ` Jiri Olsa
2015-10-28 13:04 ` Jiri Olsa
2015-10-25 14:51 ` [PATCH 32/52] perf stat record: Store events IDs in perf data file Jiri Olsa
2015-10-25 14:51 ` [PATCH 33/52] perf stat record: Add pipe support for record command Jiri Olsa
2015-10-25 14:51 ` [PATCH 34/52] perf stat record: Write stat events on record Jiri Olsa
2015-10-25 14:51 ` [PATCH 35/52] perf stat record: Write stat round " Jiri Olsa
2015-10-25 14:51 ` [PATCH 36/52] perf stat record: Do not allow record with multiple runs mode Jiri Olsa
2015-10-25 14:51 ` [PATCH 37/52] perf stat record: Synthesize event update events Jiri Olsa
2015-10-25 14:51 ` [PATCH 38/52] perf stat report: Add report command Jiri Olsa
2015-10-25 14:51 ` [PATCH 39/52] perf stat report: Process cpu/threads maps Jiri Olsa
2015-10-25 14:51 ` [PATCH 40/52] perf stat report: Process stat config event Jiri Olsa
2015-10-25 14:51 ` [PATCH 41/52] perf stat report: Add support to initialize aggr_map from file Jiri Olsa
2015-10-25 14:51 ` [PATCH 42/52] perf stat report: Process stat and stat round events Jiri Olsa
2015-10-25 14:51 ` [PATCH 43/52] perf stat report: Process event update events Jiri Olsa
2015-10-25 14:52 ` [PATCH 44/52] perf stat report: Move csv_sep initialization before report command Jiri Olsa
2015-10-25 14:52 ` [PATCH 45/52] perf stat report: Allow to override aggr_mode Jiri Olsa
2015-10-25 14:52 ` [PATCH 46/52] perf script: Process cpu/threads maps Jiri Olsa
2015-10-25 14:52 ` [PATCH 47/52] perf script: Process stat config event Jiri Olsa
2015-10-25 14:52 ` [PATCH 48/52] perf script: Add process_stat/process_stat_interval scripting interface Jiri Olsa
2015-10-25 14:52 ` [PATCH 49/52] perf script: Add stat default handlers Jiri Olsa
2015-10-25 14:52 ` [PATCH 50/52] perf script: Display stat events by default Jiri Olsa
2015-10-25 14:52 ` [PATCH 51/52] perf script: Add python support for stat events Jiri Olsa
2015-10-25 14:52 ` [PATCH 52/52] perf script: Add stat-cpi.py script Jiri Olsa
2015-10-26 17:34 ` [PATCHv5 00/52] perf stat: Add scripting support Arnaldo Carvalho de Melo
2015-10-27 14:24 ` Liang, Kan
2015-10-27 14:48 ` Arnaldo Carvalho de Melo
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=20151026174206.GN27006@kernel.org \
--to=acme@kernel.org \
--cc=a.p.zijlstra@chello.nl \
--cc=dsahern@gmail.com \
--cc=jolsa@kernel.org \
--cc=kan.liang@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=namhyung@kernel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).