public inbox for linux-perf-users@vger.kernel.org
 help / color / mirror / Atom feed
From: Namhyung Kim <namhyung@kernel.org>
To: Ian Rogers <irogers@google.com>
Cc: Peter Zijlstra <peterz@infradead.org>,
	Ingo Molnar <mingo@redhat.com>,
	Arnaldo Carvalho de Melo <acme@kernel.org>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Jiri Olsa <jolsa@kernel.org>,
	Adrian Hunter <adrian.hunter@intel.com>,
	James Clark <james.clark@linaro.org>,
	Derek Foreman <derek.foreman@collabora.com>,
	Howard Chu <howardchu95@gmail.com>,
	Thomas Falcon <thomas.falcon@intel.com>,
	Swapnil Sapkal <swapnil.sapkal@amd.com>,
	Anubhav Shelat <ashelat@redhat.com>,
	Chun-Tse Shao <ctshao@google.com>,
	Hrishikesh Suresh <hrishikesh123s@gmail.com>,
	linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2 7/7] perf data convert ctf: Pipe mode improvements
Date: Wed, 4 Mar 2026 22:39:50 -0800	[thread overview]
Message-ID: <aaklNmye9-6rsTCb@z2> (raw)
In-Reply-To: <20260228065953.3226283-8-irogers@google.com>

On Fri, Feb 27, 2026 at 10:59:53PM -0800, Ian Rogers wrote:
> Handle the finished_round event. Set up the CTF events when the
> feature event desc is read. In pipe mode the attr events will create
> the evsels and the feature event desc events will name the evsels. The
> CTF events need the evsel name, so wait until feature event descs are
> read (in pipe mode) before setting up the events except for tracepoint
> events. Handle the tracing_data event so that tracepoint information
> is available when setting up tracepoint events.
> 
> Signed-off-by: Ian Rogers <irogers@google.com>
> ---
>  tools/perf/util/data-convert-bt.c | 54 +++++++++++++++++++++++++++++--
>  1 file changed, 51 insertions(+), 3 deletions(-)
> 
> diff --git a/tools/perf/util/data-convert-bt.c b/tools/perf/util/data-convert-bt.c
> index 665bf8eea24b..5d35e9822b8f 100644
> --- a/tools/perf/util/data-convert-bt.c
> +++ b/tools/perf/util/data-convert-bt.c
> @@ -1223,13 +1223,28 @@ static int add_event(struct ctf_writer *cw, struct evsel *evsel)
>  	return -1;
>  }
>  
> -static int setup_events(struct ctf_writer *cw, struct perf_session *session)
> +enum setup_events_type {
> +	SETUP_EVENTS_ALL,
> +	SETUP_EVENTS_NOT_TRACEPOINT,
> +	SETUP_EVENTS_TRACEPOINT_ONLY,
> +};
> +
> +static int setup_events(struct ctf_writer *cw, struct perf_session *session,
> +			enum setup_events_type type)
>  {
>  	struct evlist *evlist = session->evlist;
>  	struct evsel *evsel;
>  	int ret;
>  
>  	evlist__for_each_entry(evlist, evsel) {
> +		bool is_tracepoint = evsel->core.attr.type == PERF_TYPE_TRACEPOINT;
> +
> +		if (is_tracepoint && type == SETUP_EVENTS_NOT_TRACEPOINT)
> +			continue;
> +
> +		if (!is_tracepoint && type == SETUP_EVENTS_TRACEPOINT_ONLY)
> +			continue;
> +
>  		ret = add_event(cw, evsel);
>  		if (ret)
>  			return ret;
> @@ -1418,6 +1433,18 @@ static int process_feature_event(const struct perf_tool *tool,
>  		return ret;
>  
>  	switch (fe->feat_id) {
> +	case HEADER_EVENT_DESC:
> +		/*
> +		 * In non-pipe mode (not here) the evsels combine the desc with
> +		 * the perf_event_attr when it is parsed. In pipe mode the
> +		 * perf_event_attr events appear first and then the event desc
> +		 * feature events that set the names appear after. Once we have
> +		 * the full evsel data we can generate the babeltrace
> +		 * events. For tracepoint events we still don't have the tracing
> +		 * data and so need to wait until the tracing data event to add
> +		 * those events to babeltrace.
> +		 */
> +		return setup_events(cw, session, SETUP_EVENTS_NOT_TRACEPOINT);
>  	case HEADER_HOSTNAME:
>  		if (session->header.env.hostname) {
>  			return bt_ctf_writer_add_environment_field(cw->writer, "host",
> @@ -1448,6 +1475,26 @@ static int process_feature_event(const struct perf_tool *tool,
>  	return 0;
>  }
>  
> +static int process_tracing_data(const struct perf_tool *tool,
> +				struct perf_session *session,
> +				union perf_event *event)
> +{
> +	struct convert *c = container_of(tool, struct convert, tool);
> +	struct ctf_writer *cw = &c->writer;
> +	int ret;
> +
> +	ret = perf_event__process_tracing_data(tool, session, event);
> +	if (ret < 0)
> +		return ret;
> +
> +	/*
> +	 * Now the attr was set up by the attr event, the name by the feature
> +	 * event desc event and the tracepoint data set up above, the tracepoint
> +	 * babeltrace events can be added.
> +	 */
> +	return setup_events(cw, session, SETUP_EVENTS_TRACEPOINT_ONLY);
> +}
> +
>  static int ctf_writer__setup_clock(struct ctf_writer *cw,
>  				   struct perf_session *session,
>  				   bool tod)
> @@ -1677,9 +1724,10 @@ int bt_convert__perf2ctf(const char *input, const char *path,
>  	c.tool.exit            = perf_event__process_exit;
>  	c.tool.fork            = perf_event__process_fork;
>  	c.tool.lost            = perf_event__process_lost;
> -	c.tool.tracing_data    = perf_event__process_tracing_data;
> +	c.tool.tracing_data    = process_tracing_data;
>  	c.tool.build_id        = perf_event__process_build_id;
>  	c.tool.namespaces      = perf_event__process_namespaces;
> +	c.tool.finished_round  = perf_event__process_finished_round;
>  	c.tool.attr            = perf_event__process_attr;
>  	c.tool.feature         = process_feature_event;
>  	c.tool.ordering_requires_timestamps = true;
> @@ -1725,7 +1773,7 @@ int bt_convert__perf2ctf(const char *input, const char *path,
>  		goto free_writer;
>  
>  	/* CTF events setup */
> -	if (setup_events(cw, session))
> +	if (setup_events(cw, session, SETUP_EVENTS_ALL))

I was wondering if it'd add duplicate events in pipe mode.  But it turns
out that it would do nothing in pipe mode as no event was found at the
moment.

Can you please update the comment that it's for file, and pipe mode will
be handled differently?

Thanks,
Namhyung


>  		goto free_writer;
>  
>  	if (opts->all && setup_non_sample_events(cw, session))
> -- 
> 2.53.0.473.g4a7958ca14-goog
> 

      reply	other threads:[~2026-03-05  6:39 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-02-28  6:59 [PATCH v2 0/7] perf data/pipe handling improvements Ian Rogers
2026-02-28  6:59 ` [PATCH v2 1/7] perf clockid: Add missing include Ian Rogers
2026-02-28  6:59 ` [PATCH v2 2/7] perf header: Add utility to convert feature number to a string Ian Rogers
2026-02-28  6:59 ` [PATCH v2 3/7] perf session: Extra logging for failed to process events Ian Rogers
2026-02-28  6:59 ` [PATCH v2 4/7] perf header: Refactor pipe mode end marker handling Ian Rogers
2026-03-05  6:23   ` Namhyung Kim
2026-02-28  6:59 ` [PATCH v2 5/7] perf ordered-events: Event processing consistency with the regular reader Ian Rogers
2026-03-05  6:27   ` Namhyung Kim
2026-02-28  6:59 ` [PATCH v2 6/7] perf evsel: Make unknown event names more unique Ian Rogers
2026-02-28  6:59 ` [PATCH v2 7/7] perf data convert ctf: Pipe mode improvements Ian Rogers
2026-03-05  6:39   ` Namhyung Kim [this message]

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=aaklNmye9-6rsTCb@z2 \
    --to=namhyung@kernel.org \
    --cc=acme@kernel.org \
    --cc=adrian.hunter@intel.com \
    --cc=alexander.shishkin@linux.intel.com \
    --cc=ashelat@redhat.com \
    --cc=ctshao@google.com \
    --cc=derek.foreman@collabora.com \
    --cc=howardchu95@gmail.com \
    --cc=hrishikesh123s@gmail.com \
    --cc=irogers@google.com \
    --cc=james.clark@linaro.org \
    --cc=jolsa@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-perf-users@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=peterz@infradead.org \
    --cc=swapnil.sapkal@amd.com \
    --cc=thomas.falcon@intel.com \
    /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