linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Arnaldo Carvalho de Melo <arnaldo.melo@gmail.com>
To: Jiri Olsa <jolsa@kernel.org>
Cc: lkml <linux-kernel@vger.kernel.org>,
	Ingo Molnar <mingo@kernel.org>,
	Namhyung Kim <namhyung@kernel.org>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Peter Zijlstra <a.p.zijlstra@chello.nl>,
	Adrian Hunter <adrian.hunter@intel.com>,
	Andi Kleen <ak@linux.intel.com>,
	Stephane Eranian <eranian@google.com>,
	Alexey Budankov <alexey.budankov@linux.intel.com>
Subject: Re: [PATCH 07/11] perf session: Add __perf_session__process_dir_events function
Date: Fri, 8 Mar 2019 15:38:05 -0300	[thread overview]
Message-ID: <20190308183805.GG10690@kernel.org> (raw)
In-Reply-To: <20190308134745.5057-8-jolsa@kernel.org>

Em Fri, Mar 08, 2019 at 02:47:41PM +0100, Jiri Olsa escreveu:
> Adding __perf_session__process_dir_events function
> to process events over the directory data.
> 
> All directory events are pushed into sessions ordered
> data and flushed for processing.
> 
> Link: http://lkml.kernel.org/n/tip-n3zl0wo3z18tatv5x7epmjrh@git.kernel.org
> Signed-off-by: Jiri Olsa <jolsa@kernel.org>
> ---
>  tools/perf/util/session.c | 88 ++++++++++++++++++++++++++++++++++++++-
>  1 file changed, 86 insertions(+), 2 deletions(-)
> 
> diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c
> index 0ec34227bd60..b55f4281b1da 100644
> --- a/tools/perf/util/session.c
> +++ b/tools/perf/util/session.c
> @@ -1876,8 +1876,6 @@ reader__process_events(struct reader *rd, struct perf_session *session,
>  	file_offset = page_offset;
>  	head = rd->data_offset - page_offset;
>  
> -	ui_progress__init_size(prog, data_size, "Processing events...");
> -
>  	data_size += rd->data_offset;
>  
>  	mmap_size = MMAP_SIZE;
> @@ -2006,6 +2004,89 @@ static int __perf_session__process_events(struct perf_session *session)
>  	return err;
>  }
>  
> +static s64 process_index(struct perf_session *session,
> +			 union perf_event *event,
> +			 u64 file_offset)
> +{
> +	struct perf_evlist *evlist = session->evlist;
> +	u64 timestamp;
> +	s64 ret;
> +
> +	if (session->header.needs_swap)
> +		event_swap(event, perf_evlist__sample_id_all(evlist));
> +
> +	if (event->header.type >= PERF_RECORD_HEADER_MAX)
> +		return -EINVAL;
> +
> +	events_stats__inc(&evlist->stats, event->header.type);
> +
> +	if (event->header.type >= PERF_RECORD_USER_TYPE_START)
> +		return perf_session__process_user_event(session, event, file_offset);
> +
> +	ret = perf_evlist__parse_sample_timestamp(evlist, event, &timestamp);
> +	if (ret)
> +		return ret;
> +
> +	return ordered_events__queue(&session->ordered_events, event,
> +				     timestamp, file_offset);
> +}
> +
> +static int __perf_session__process_dir_events(struct perf_session *session)
> +{
> +	struct perf_data *data = session->data;
> +	struct perf_tool *tool = session->tool;
> +	struct reader rd = {
> +		.fd		= perf_data__fd(session->data),
> +		.data_size	= session->header.data_size,
> +		.data_offset	= session->header.data_offset,
> +		.process	= process_simple,
> +	};
> +	int i, ret = 0;
> +	struct ui_progress prog;
> +	u64 total_size = perf_data__size(session->data);
> +
> +	perf_tool__fill_defaults(tool);
> +
> +	ui_progress__init_size(&prog, total_size, "Processing events...");
> +
> +	/* Read data from the header file.. */
> +	ret = reader__process_events(&rd, session, &prog);
> +	if (ret)
> +		goto out_err;
> +
> +	/* ... and continue with data files. */
> +	for (i = 0; i < data->dir.nr ; i++) {
> +		struct perf_data_file *file = &data->dir.files[i];
> +
> +		if (file->size == 0)
> +			continue;
> +
> +		rd = (struct reader) {
> +			.fd		= file->fd,
> +			.data_size	= file->size,
> +			.data_offset	= 0,
> +			.process	= process_index,
> +		};
> +
> +		ret = reader__process_events(&rd, session, &prog);
> +		if (ret)
> +			goto out_err;

Don't we have to have some handling of PERF_RECORD_FINISHED_ROUND here?
I.e. what happens if we fill th ordered events with just the contents
of, say, the first CPU and then have those events flushed and processed
before we start even looking at the events in the other CPUs?

I think some detailed explanation of what happens here is in need, no?

- Arnaldo

> +	}
> +
> +	ret = ordered_events__flush(&session->ordered_events, OE_FLUSH__FINAL);
> +
> +out_err:
> +	if (!tool->no_warn)
> +		perf_session__warn_about_errors(session);
> +
> +	/*
> +	 * We may switching perf.data output, make ordered_events
> +	 * reusable.
> +	 */
> +	ordered_events__reinit(&session->ordered_events);
> +	return ret;
> +}
> +
>  int perf_session__process_events(struct perf_session *session)
>  {
>  	if (perf_session__register_idle_thread(session) < 0)
> @@ -2014,6 +2095,9 @@ int perf_session__process_events(struct perf_session *session)
>  	if (perf_data__is_pipe(session->data))
>  		return __perf_session__process_pipe_events(session);
>  
> +	if (perf_data__is_dir(session->data))
> +		return __perf_session__process_dir_events(session);
> +
>  	return __perf_session__process_events(session);
>  }
>  
> -- 
> 2.17.2

-- 

- Arnaldo

  reply	other threads:[~2019-03-08 18:38 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-03-08 13:47 [PATCHv5 00/11] perf record: Add support to store data in directory Jiri Olsa
2019-03-08 13:47 ` [PATCH 01/11] perf data: Add directory support Jiri Olsa
2019-03-08 17:26   ` Arnaldo Carvalho de Melo
2019-03-22 22:03   ` [tip:perf/urgent] perf data: Support having perf.data stored as a directory tip-bot for Jiri Olsa
2019-03-08 13:47 ` [PATCH 02/11] perf data: Don't store auxtrace index for directory data file Jiri Olsa
2019-03-22 22:03   ` [tip:perf/urgent] " tip-bot for Jiri Olsa
2019-03-08 13:47 ` [PATCH 03/11] perf data: Add perf_data__update_dir function Jiri Olsa
2019-03-22 22:04   ` [tip:perf/urgent] perf data: Add perf_data__update_dir() function tip-bot for Jiri Olsa
2019-03-08 13:47 ` [PATCH 04/11] perf data: Make perf_data__size to work over directory Jiri Olsa
2019-03-08 17:33   ` Arnaldo Carvalho de Melo
2019-03-09 17:21     ` Jiri Olsa
2019-03-22 22:05   ` [tip:perf/urgent] perf data: Make perf_data__size() " tip-bot for Jiri Olsa
2019-03-08 13:47 ` [PATCH 05/11] perf header: Add DIR_FORMAT feature to describe directory data Jiri Olsa
2019-03-08 18:24   ` Arnaldo Carvalho de Melo
2019-03-09 17:21     ` Jiri Olsa
2019-03-22 22:05   ` [tip:perf/urgent] " tip-bot for Jiri Olsa
2019-03-08 13:47 ` [PATCH 06/11] perf session: Add process callback to reader object Jiri Olsa
2019-03-22 22:06   ` [tip:perf/urgent] " tip-bot for Jiri Olsa
2019-03-08 13:47 ` [PATCH 07/11] perf session: Add __perf_session__process_dir_events function Jiri Olsa
2019-03-08 18:38   ` Arnaldo Carvalho de Melo [this message]
2019-03-08 18:39     ` Arnaldo Carvalho de Melo
2019-03-09 17:21     ` Jiri Olsa
2019-03-08 13:47 ` [PATCH 08/11] perf session: Add path to reader object Jiri Olsa
2019-03-08 13:47 ` [PATCH 09/11] perf record: Add --dir option to store data in directory Jiri Olsa
2019-03-08 13:47 ` [PATCH 10/11] perf record: Add --output-dir " Jiri Olsa
2019-03-08 13:47 ` [PATCH 11/11] perf record: Describe perf.data directory format Jiri Olsa
  -- strict thread matches above, loose matches on Subject: below --
2019-02-26  8:48 [PATCHv4 00/11] perf record: Add support to store data in directory Jiri Olsa
2019-02-26  8:48 ` [PATCH 07/11] perf session: Add __perf_session__process_dir_events function Jiri Olsa

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=20190308183805.GG10690@kernel.org \
    --to=arnaldo.melo@gmail.com \
    --cc=a.p.zijlstra@chello.nl \
    --cc=adrian.hunter@intel.com \
    --cc=ak@linux.intel.com \
    --cc=alexander.shishkin@linux.intel.com \
    --cc=alexey.budankov@linux.intel.com \
    --cc=eranian@google.com \
    --cc=jolsa@kernel.org \
    --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).