linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Adrian Hunter <adrian.hunter@intel.com>
To: Arnaldo Carvalho de Melo <acme@kernel.org>
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>,
	Paul Mackerras <paulus@samba.org>,
	Stephane Eranian <eranian@google.com>
Subject: Re: [PATCH 05/41] perf tools: Identify which comms are from exec
Date: Tue, 15 Jul 2014 14:43:08 +0300	[thread overview]
Message-ID: <53C513CC.1010202@intel.com> (raw)
In-Reply-To: <20140714203237.GA18133@kernel.org>

On 07/14/2014 11:32 PM, Arnaldo Carvalho de Melo wrote:
> Em Mon, Jul 14, 2014 at 01:02:29PM +0300, Adrian Hunter escreveu:
>> Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
>> ---
>>  tools/perf/util/comm.c    |  7 +++++--
>>  tools/perf/util/comm.h    |  6 ++++--
>>  tools/perf/util/machine.c |  4 +++-
>>  tools/perf/util/thread.c  | 24 +++++++++++++++++++-----
>>  tools/perf/util/thread.h  | 10 +++++++++-
>>  5 files changed, 40 insertions(+), 11 deletions(-)
>>
>> diff --git a/tools/perf/util/comm.c b/tools/perf/util/comm.c
>> index f9e7776..5e1e80e 100644
>> --- a/tools/perf/util/comm.c
>> +++ b/tools/perf/util/comm.c
>> @@ -74,7 +74,7 @@ static struct comm_str *comm_str__findnew(const char *str, struct rb_root *root)
>>  	return new;
>>  }
>>  
>> -struct comm *comm__new(const char *str, u64 timestamp)
>> +struct comm *comm__new(const char *str, u64 timestamp, bool exec)
>>  {
>>  	struct comm *comm = zalloc(sizeof(*comm));
>>  
>> @@ -82,6 +82,7 @@ struct comm *comm__new(const char *str, u64 timestamp)
>>  		return NULL;
>>  
>>  	comm->start = timestamp;
>> +	comm->exec = exec;
>>  
>>  	comm->comm_str = comm_str__findnew(str, &comm_str_root);
>>  	if (!comm->comm_str) {
>> @@ -94,7 +95,7 @@ struct comm *comm__new(const char *str, u64 timestamp)
>>  	return comm;
>>  }
>>  
>> -int comm__override(struct comm *comm, const char *str, u64 timestamp)
>> +int comm__override(struct comm *comm, const char *str, u64 timestamp, bool exec)
>>  {
>>  	struct comm_str *new, *old = comm->comm_str;
>>  
>> @@ -106,6 +107,8 @@ int comm__override(struct comm *comm, const char *str, u64 timestamp)
>>  	comm_str__put(old);
>>  	comm->comm_str = new;
>>  	comm->start = timestamp;
>> +	if (exec && !comm->exec)
>> +		comm->exec = true;
> 
> Why do you need the !comm->exec test?

Dunno

> 
>>  	return 0;
>>  }
>> diff --git a/tools/perf/util/comm.h b/tools/perf/util/comm.h
>> index fac5bd5..51c10ab 100644
>> --- a/tools/perf/util/comm.h
>> +++ b/tools/perf/util/comm.h
>> @@ -11,11 +11,13 @@ struct comm {
>>  	struct comm_str *comm_str;
>>  	u64 start;
>>  	struct list_head list;
>> +	bool exec;
>>  };
>>  
>>  void comm__free(struct comm *comm);
>> -struct comm *comm__new(const char *str, u64 timestamp);
>> +struct comm *comm__new(const char *str, u64 timestamp, bool exec);
>>  const char *comm__str(const struct comm *comm);
>> -int comm__override(struct comm *comm, const char *str, u64 timestamp);
>> +int comm__override(struct comm *comm, const char *str, u64 timestamp,
>> +		   bool exec);
>>  
>>  #endif  /* __PERF_COMM_H */
>> diff --git a/tools/perf/util/machine.c b/tools/perf/util/machine.c
>> index 0fa93c1..2513204 100644
>> --- a/tools/perf/util/machine.c
>> +++ b/tools/perf/util/machine.c
>> @@ -360,11 +360,13 @@ int machine__process_comm_event(struct machine *machine, union perf_event *event
>>  	struct thread *thread = machine__findnew_thread(machine,
>>  							event->comm.pid,
>>  							event->comm.tid);
>> +	bool exec = event->header.misc & PERF_RECORD_MISC_COMM_EXEC;
>>  
>>  	if (dump_trace)
>>  		perf_event__fprintf_comm(event, stdout);
>>  
>> -	if (thread == NULL || thread__set_comm(thread, event->comm.comm, sample->time)) {
>> +	if (thread == NULL ||
>> +	    __thread__set_comm(thread, event->comm.comm, sample->time, exec)) {
>>  		dump_printf("problem processing PERF_RECORD_COMM, skipping event.\n");
>>  		return -1;
>>  	}
>> diff --git a/tools/perf/util/thread.c b/tools/perf/util/thread.c
>> index ca94295..149e417 100644
>> --- a/tools/perf/util/thread.c
>> +++ b/tools/perf/util/thread.c
>> @@ -76,7 +76,7 @@ struct thread *thread__new(pid_t pid, pid_t tid)
>>  			goto err_thread;
>>  
>>  		snprintf(comm_str, 32, ":%d", tid);
>> -		comm = comm__new(comm_str, 0);
>> +		comm = comm__new(comm_str, 0, false);
>>  		free(comm_str);
>>  		if (!comm)
>>  			goto err_thread;
>> @@ -113,19 +113,33 @@ struct comm *thread__comm(const struct thread *thread)
>>  	return list_first_entry(&thread->comm_list, struct comm, list);
>>  }
>>  
>> +struct comm *thread__exec_comm(const struct thread *thread)
>> +{
>> +	struct comm *comm, *last = NULL;
>> +
>> +	list_for_each_entry(comm, &thread->comm_list, list) {
>> +		if (comm->exec)
>> +			return comm;
>> +		last = comm;
>> +	}
>> +
>> +	return last;
>> +}
>> +
>>  /* CHECKME: time should always be 0 if event aren't ordered */
>> -int thread__set_comm(struct thread *thread, const char *str, u64 timestamp)
>> +int __thread__set_comm(struct thread *thread, const char *str, u64 timestamp,
>> +		       bool exec)
>>  {
>>  	struct comm *new, *curr = thread__comm(thread);
>>  	int err;
>>  
>>  	/* Override latest entry if it had no specific time coverage */
>> -	if (!curr->start) {
>> -		err = comm__override(curr, str, timestamp);
>> +	if (!curr->start && !curr->exec) {
>> +		err = comm__override(curr, str, timestamp, exec);
>>  		if (err)
>>  			return err;
>>  	} else {
>> -		new = comm__new(str, timestamp);
>> +		new = comm__new(str, timestamp, exec);
>>  		if (!new)
>>  			return -ENOMEM;
>>  		list_add(&new->list, &thread->comm_list);
>> diff --git a/tools/perf/util/thread.h b/tools/perf/util/thread.h
>> index 9de0629..b4269af 100644
>> --- a/tools/perf/util/thread.h
>> +++ b/tools/perf/util/thread.h
>> @@ -38,9 +38,17 @@ static inline void thread__exited(struct thread *thread)
>>  	thread->dead = true;
>>  }
>>  
>> -int thread__set_comm(struct thread *thread, const char *comm, u64 timestamp);
>> +int __thread__set_comm(struct thread *thread, const char *comm, u64 timestamp,
>> +		       bool exec);
>> +static inline int thread__set_comm(struct thread *thread, const char *comm,
>> +				   u64 timestamp)
>> +{
>> +	return __thread__set_comm(thread, comm, timestamp, false);
>> +}
>> +
> 
> So this is nice, you leave the existing function, setting exec to false,
> so that you don't have to change the existing codepaths where it is not
> from 'exec', and provide a __ prefixed variant where 'exec' can be set.
> 
> Why not to do the same thing for comm__new() ? No uses, i.e. in all
> cases you will need to pass 'exec' as a variable?

There are only 2 comm__new() callers, and they are in files I am changing
anyway.

> 
> I thought about doing the same thing for that machine__findnew_thread,
> i.e. provide a variant where tid and pid is passed and one where just
> the tid is passed, because the pid is unknown.

But you don't want people using the "unknown" variant if they do know
the pid, so forcing them to pass something maybe better.

> 
> BTW, I'll update my perf/core branch with the set of patches that I
> merged, so that you can have where to look for a consolidated tree with
> the things already processed.

Thanks!


  reply	other threads:[~2014-07-15 11:44 UTC|newest]

Thread overview: 122+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-07-14 10:02 [PATCH 00/41] perf tools: Preparation for call graph from Intel BTS Adrian Hunter
2014-07-14 10:02 ` [PATCH 01/41] perf tools: Fix the value used for unknown pids Adrian Hunter
2014-07-18  4:23   ` [tip:perf/core] perf machine: " tip-bot for Adrian Hunter
2014-07-14 10:02 ` [PATCH 02/41] perf tools: Fix map groups of threads with " Adrian Hunter
2014-07-14 20:18   ` Arnaldo Carvalho de Melo
2014-07-15 11:33     ` Adrian Hunter
2014-07-15 19:33       ` Arnaldo Carvalho de Melo
2014-07-16  8:07         ` [PATCH V2 " Adrian Hunter
2014-07-18  4:26           ` [tip:perf/core] perf machine: " tip-bot for Adrian Hunter
2014-07-14 10:02 ` [PATCH 03/41] perf script: Display PERF_RECORD_MISC_COMM_EXEC flag Adrian Hunter
2014-07-18  4:23   ` [tip:perf/core] " tip-bot for Adrian Hunter
2014-07-14 10:02 ` [PATCH 04/41] perf record: Select comm_exec flag if supported Adrian Hunter
2014-07-18  4:23   ` [tip:perf/core] " tip-bot for Adrian Hunter
2014-07-14 10:02 ` [PATCH 05/41] perf tools: Identify which comms are from exec Adrian Hunter
2014-07-14 20:32   ` Arnaldo Carvalho de Melo
2014-07-15 11:43     ` Adrian Hunter [this message]
2014-07-23 14:07       ` Arnaldo Carvalho de Melo
2014-07-23 14:09         ` Arnaldo Carvalho de Melo
2014-07-23 16:46           ` Adrian Hunter
2014-07-23 16:53             ` Arnaldo Carvalho de Melo
2014-07-14 10:02 ` [PATCH 06/41] perf tools: Add machine__thread_exec_comm() Adrian Hunter
2014-07-14 10:02 ` [PATCH 07/41] perf tools: Fix missing kernel map load Adrian Hunter
2014-07-18  4:23   ` [tip:perf/core] " tip-bot for Adrian Hunter
2014-07-14 10:02 ` [PATCH 08/41] perf tools: Fix missing label symbols Adrian Hunter
2014-07-14 20:38   ` Arnaldo Carvalho de Melo
2014-07-15 12:11     ` Adrian Hunter
2014-07-14 10:02 ` [PATCH 09/41] perf tools: Fix missing GNU IFUNC symbols Adrian Hunter
2014-07-18  4:24   ` [tip:perf/core] perf symbols: " tip-bot for Adrian Hunter
2014-07-14 10:02 ` [PATCH 10/41] perf inject: Fix build id injection Adrian Hunter
2014-07-18  4:24   ` [tip:perf/core] " tip-bot for Adrian Hunter
2014-07-14 10:02 ` [PATCH 11/41] perf tools: Fix appending a callchain from a previous sample Adrian Hunter
2014-07-18  4:24   ` [tip:perf/core] perf callchain: " tip-bot for Adrian Hunter
2014-07-14 10:02 ` [PATCH 12/41] perf tools: Fix leak of 'struct thread' on error path Adrian Hunter
2014-07-14 20:43   ` Arnaldo Carvalho de Melo
2014-07-16  7:19     ` [PATCH V2 0/2] perf tools: Allow deletion of a thread with no map groups Adrian Hunter
2014-07-16  7:19       ` [PATCH 1/2] " Adrian Hunter
2014-07-18  4:27         ` [tip:perf/core] perf thread: " tip-bot for Adrian Hunter
2014-07-16  7:19       ` [PATCH V2 2/2] perf tools: Fix leak of 'struct thread' on error path Adrian Hunter
2014-07-18  4:27         ` [tip:perf/core] perf machine: " tip-bot for Adrian Hunter
2014-07-16 14:02   ` [PATCH 12/41] perf tools: " Jiri Olsa
2014-07-16 14:26     ` Adrian Hunter
2014-07-14 10:02 ` [PATCH 13/41] perf tools: Add machine__kernel_ip() Adrian Hunter
2014-07-16 14:15   ` Jiri Olsa
2014-07-16 14:22     ` Adrian Hunter
2014-08-11 12:23       ` Jiri Olsa
2014-08-11 12:36         ` Adrian Hunter
2014-08-11 12:43           ` Jiri Olsa
2014-08-11 12:46             ` Adrian Hunter
2014-08-11 12:55               ` Jiri Olsa
2014-07-14 10:02 ` [PATCH 14/41] perf buildid-cache: Apply force option to copying kcore Adrian Hunter
2014-07-18  4:24   ` [tip:perf/core] " tip-bot for Adrian Hunter
2014-07-14 10:02 ` [PATCH 15/41] perf script: Improve srcline display for BTS Adrian Hunter
2014-07-15 14:16   ` Arnaldo Carvalho de Melo
2014-07-15 17:51     ` Adrian Hunter
2014-07-16  2:08     ` David Ahern
2014-07-14 10:02 ` [PATCH 16/41] perf script: Do not print dangling '=>' " Adrian Hunter
2014-07-14 10:02 ` [PATCH 17/41] perf tools: Record whether a dso is 64-bit Adrian Hunter
2014-07-18  4:24   ` [tip:perf/core] perf symbols: " tip-bot for Adrian Hunter
2014-07-14 10:02 ` [PATCH 18/41] perf tools: Record whether a dso has data Adrian Hunter
2014-07-16 14:20   ` Jiri Olsa
2014-07-17  8:43     ` [PATCH 0/2] perf tools: Fix incorrect fd error comparison Adrian Hunter
2014-07-17  8:43       ` [PATCH 1/2] " Adrian Hunter
2014-07-22  7:51         ` Jiri Olsa
2014-07-28  8:21         ` [tip:perf/core] " tip-bot for Adrian Hunter
2014-07-17  8:43       ` [PATCH V2 2/2] perf tools: Record whether a dso has data Adrian Hunter
2014-07-17  8:58         ` [PATCH V3] " Adrian Hunter
2014-07-22  7:55           ` Jiri Olsa
2014-07-22 13:24             ` Adrian Hunter
2014-07-14 10:02 ` [PATCH 19/41] perf tools: Do not attempt to read data from kallsyms Adrian Hunter
2014-07-18  4:25   ` [tip:perf/core] perf symbols: " tip-bot for Adrian Hunter
2014-07-14 10:02 ` [PATCH 20/41] perf tools: Let a user specify a PMU event without any config terms Adrian Hunter
2014-07-16 14:25   ` Jiri Olsa
2014-07-16 15:04     ` Adrian Hunter
2014-07-16 18:22       ` Jiri Olsa
2014-08-29 18:48         ` Adrian Hunter
2014-08-30  8:53           ` Jiri Olsa
2014-09-01  6:27             ` Adrian Hunter
2014-09-01 19:11               ` Jiri Olsa
2014-09-02  5:39                 ` Adrian Hunter
2014-09-02  9:17                   ` Jiri Olsa
2014-09-01 15:51             ` Arnaldo Carvalho de Melo
2014-09-01 19:15               ` Jiri Olsa
2014-07-14 10:02 ` [PATCH 21/41] perf tools: Let default config be defined for a PMU Adrian Hunter
2014-07-14 10:02 ` [PATCH 22/41] perf tools: Add perf_pmu__scan_file() Adrian Hunter
2014-07-14 10:02 ` [PATCH 23/41] perf tools: Add dsos__hit_all() Adrian Hunter
2014-07-14 10:02 ` [PATCH 24/41] perf tools: Add cpu to struct thread Adrian Hunter
2014-07-15 14:24   ` Arnaldo Carvalho de Melo
2014-07-15 17:58     ` Adrian Hunter
2014-07-14 10:02 ` [PATCH 25/41] perf tools: Add ability to record the current tid for each cpu Adrian Hunter
2014-07-14 10:02 ` [PATCH 26/41] perf tools: Add ability to iterate over a dso's symbols Adrian Hunter
2014-07-18  4:25   ` [tip:perf/core] perf symbols: Add ability to iterate over a dso' s symbols tip-bot for Adrian Hunter
2014-07-14 10:02 ` [PATCH 27/41] perf session: Flag if the event stream is entirely in memory Adrian Hunter
2014-07-18  4:25   ` [tip:perf/core] " tip-bot for Adrian Hunter
2014-07-14 10:02 ` [PATCH 28/41] perf evlist: Pass mmap parameters in a struct Adrian Hunter
2014-07-18  4:25   ` [tip:perf/core] " tip-bot for Adrian Hunter
2014-07-14 10:02 ` [PATCH 29/41] perf tools: Add feature test for __sync_val_compare_and_swap Adrian Hunter
2014-07-18  4:26   ` [tip:perf/core] " tip-bot for Adrian Hunter
2014-07-14 10:02 ` [PATCH 30/41] perf tools: Add option macro OPT_CALLBACK_OPTARG Adrian Hunter
2014-07-18  4:26   ` [tip:perf/core] " tip-bot for Adrian Hunter
2014-07-14 10:02 ` [PATCH 31/41] perf evlist: Add perf_evlist__set_tracking_event() Adrian Hunter
2014-07-14 10:02 ` [PATCH 32/41] perf evsel: Add 'no_aux_samples' option Adrian Hunter
2014-07-18  4:26   ` [tip:perf/core] " tip-bot for Adrian Hunter
2014-07-14 10:02 ` [PATCH 33/41] perf evsel: Add 'immediate' option Adrian Hunter
2014-07-18  4:26   ` [tip:perf/core] " tip-bot for Adrian Hunter
2014-07-14 10:02 ` [PATCH 34/41] perf evlist: Add 'system_wide' option Adrian Hunter
2014-07-15 15:03   ` Arnaldo Carvalho de Melo
2014-07-15 18:05     ` Adrian Hunter
2014-08-11 13:12   ` Jiri Olsa
2014-08-12  5:52     ` Adrian Hunter
2014-07-14 10:02 ` [PATCH 35/41] perf tools: Add id index Adrian Hunter
2014-07-14 10:03 ` [PATCH 36/41] perf pmu: Let pmu's with no events show up on perf list Adrian Hunter
2014-07-14 10:03 ` [PATCH 37/41] perf session: Add ability to skip 4GiB or more Adrian Hunter
2014-07-14 10:03 ` [PATCH 38/41] perf session: Add perf_session__deliver_synth_event() Adrian Hunter
2014-07-15 15:17   ` Arnaldo Carvalho de Melo
2014-07-15 18:32     ` Adrian Hunter
2014-07-14 10:03 ` [PATCH 39/41] perf tools: Allow TSC conversion on any arch Adrian Hunter
2014-07-15 15:20   ` Arnaldo Carvalho de Melo
2014-07-15 16:17     ` Peter Zijlstra
2014-07-15 17:48     ` Adrian Hunter
2014-07-18  4:28   ` [tip:perf/core] " tip-bot for Adrian Hunter
2014-07-14 10:03 ` [PATCH 40/41] perf tools: Move rdtsc() function Adrian Hunter
2014-07-14 10:03 ` [PATCH 41/41] perf evlist: Add perf_evlist__enable_event_idx() 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=53C513CC.1010202@intel.com \
    --to=adrian.hunter@intel.com \
    --cc=acme@kernel.org \
    --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=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 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).