All of lore.kernel.org
 help / color / mirror / Atom feed
From: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
To: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>,
	Paul Mackerras <paulus@samba.org>, Ingo Molnar <mingo@kernel.org>,
	LKML <linux-kernel@vger.kernel.org>,
	Stephane Eranian <eranian@google.com>,
	Andi Kleen <ak@linux.intel.com>,
	Namhyung Kim <namhyung.kim@lge.com>
Subject: Re: [PATCH 1/6] perf tools: Synthesize data mmap events for threads
Date: Thu, 8 Nov 2012 11:55:22 -0300	[thread overview]
Message-ID: <20121108145522.GL3430@ghostprotocols.net> (raw)
In-Reply-To: <1352273234-28912-2-git-send-email-namhyung@kernel.org>

Em Wed, Nov 07, 2012 at 04:27:09PM +0900, Namhyung Kim escreveu:
> From: Namhyung Kim <namhyung.kim@lge.com>
> 
> Current perf_event__synthesize_mmap_events() only deals with
> executable mappings.  With upcoming memory access sampling,

Not "upcoming", "recently added", since your patch needs the patch, in
Stephane series, that introduces PERF_RECORD_MISC_MMAP_DATA.

> non-executable data mappings are needed also.
> 
> While at it, convert parsing code to use sscanf which makes
> the code cleaner IMHO.

Please split the patch in two, one that does the
PERF_RECORD_MISC_MMAP_DATA and other that converts from hex2u64 to
sscanf.

- Arnaldo
 
> Cc: Stephane Eranian <eranian@google.com>
> Signed-off-by: Namhyung Kim <namhyung@kernel.org>
> ---
>  tools/perf/util/event.c | 78 ++++++++++++++++++++++---------------------------
>  1 file changed, 35 insertions(+), 43 deletions(-)
> 
> diff --git a/tools/perf/util/event.c b/tools/perf/util/event.c
> index ca9ca285406a..068acf606b40 100644
> --- a/tools/perf/util/event.c
> +++ b/tools/perf/util/event.c
> @@ -193,55 +193,47 @@ static int perf_event__synthesize_mmap_events(struct perf_tool *tool,
>  	event->header.misc = PERF_RECORD_MISC_USER;
>  
>  	while (1) {
> -		char bf[BUFSIZ], *pbf = bf;
> -		int n;
> +		char bf[BUFSIZ];
> +		char prot[5], *pprot = prot;
>  		size_t size;
> +		char exec_name[PATH_MAX], *pexec = exec_name;
> +		char anonstr[] = "//anon";
> +
>  		if (fgets(bf, sizeof(bf), fp) == NULL)
>  			break;
>  
> +		/* ensure null termination since stack will be reused */
> +		strcpy(exec_name, "");
> +
>  		/* 00400000-0040c000 r-xp 00000000 fd:01 41038  /bin/cat */
> -		n = hex2u64(pbf, &event->mmap.start);
> -		if (n < 0)
> -			continue;
> -		pbf += n + 1;
> -		n = hex2u64(pbf, &event->mmap.len);
> -		if (n < 0)
> +		sscanf(bf, "%"PRIx64"-%"PRIx64" %s %"PRIx64" %*x:%*x %*u %s\n",
> +		       &event->mmap.start, &event->mmap.len, pprot,
> +		       &event->mmap.pgoff, pexec);
> +
> +		if (prot[2] == 'x' && !strcmp(exec_name, ""))
> +			strcpy(exec_name, anonstr);
> +
> +		/* ignore non-executable anon mappings */
> +		if (!strcmp(exec_name, ""))
>  			continue;
> -		pbf += n + 3;
> -		if (*pbf == 'x') { /* vm_exec */
> -			char anonstr[] = "//anon\n";
> -			char *execname = strchr(bf, '/');
> -
> -			/* Catch VDSO */
> -			if (execname == NULL)
> -				execname = strstr(bf, "[vdso]");
> -
> -			/* Catch anonymous mmaps */
> -			if ((execname == NULL) && !strstr(bf, "["))
> -				execname = anonstr;
> -
> -			if (execname == NULL)
> -				continue;
> -
> -			pbf += 3;
> -			n = hex2u64(pbf, &event->mmap.pgoff);
> -
> -			size = strlen(execname);
> -			execname[size - 1] = '\0'; /* Remove \n */
> -			memcpy(event->mmap.filename, execname, size);
> -			size = PERF_ALIGN(size, sizeof(u64));
> -			event->mmap.len -= event->mmap.start;
> -			event->mmap.header.size = (sizeof(event->mmap) -
> -					        (sizeof(event->mmap.filename) - size));
> -			memset(event->mmap.filename + size, 0, machine->id_hdr_size);
> -			event->mmap.header.size += machine->id_hdr_size;
> -			event->mmap.pid = tgid;
> -			event->mmap.tid = pid;
> -
> -			if (process(tool, event, &synth_sample, machine) != 0) {
> -				rc = -1;
> -				break;
> -			}
> +
> +		if (prot[2] != 'x')
> +			event->header.misc |= PERF_RECORD_MISC_MMAP_DATA;
> +
> +		size = strlen(exec_name) + 1;
> +		memcpy(event->mmap.filename, exec_name, size);
> +		size = PERF_ALIGN(size, sizeof(u64));
> +		event->mmap.len -= event->mmap.start;
> +		event->mmap.header.size = (sizeof(event->mmap) -
> +					   (sizeof(event->mmap.filename) - size));
> +		memset(event->mmap.filename + size, 0, machine->id_hdr_size);
> +		event->mmap.header.size += machine->id_hdr_size;
> +		event->mmap.pid = tgid;
> +		event->mmap.tid = pid;
> +
> +		if (process(tool, event, &synth_sample, machine) != 0) {
> +			rc = -1;
> +			break;
>  		}
>  	}
>  
> -- 
> 1.7.11.7

  reply	other threads:[~2012-11-08 14:55 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-11-07  7:27 [RFC/PATCH 0/6] perf tools: Additional works for memory access sampling Namhyung Kim
2012-11-07  7:27 ` [PATCH 1/6] perf tools: Synthesize data mmap events for threads Namhyung Kim
2012-11-08 14:55   ` Arnaldo Carvalho de Melo [this message]
2012-11-07  7:27 ` [PATCH 2/6] perf tools: Set kernel data mapping length Namhyung Kim
2012-11-14  7:29   ` [tip:perf/core] perf machine: " tip-bot for Namhyung Kim
2012-11-07  7:27 ` [PATCH 3/6] perf tools: Fix detection of stack area Namhyung Kim
2012-11-14  7:30   ` [tip:perf/core] " tip-bot for Namhyung Kim
2012-11-07  7:27 ` [PATCH 4/6] perf tools: Ignore ABS symbols when loading data maps Namhyung Kim
2012-11-07  7:27 ` [PATCH 5/6] perf tools: Fix output of symbol_daddr offset Namhyung Kim
2012-11-07  7:27 ` [PATCH 6/6] perf tools: Free {branch,mem}_info when freeing hist_entry Namhyung Kim
2012-11-14  7:31   ` [tip:perf/core] perf hists: Free branch_info " tip-bot for Namhyung Kim

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=20121108145522.GL3430@ghostprotocols.net \
    --to=acme@ghostprotocols.net \
    --cc=a.p.zijlstra@chello.nl \
    --cc=ak@linux.intel.com \
    --cc=eranian@google.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=namhyung.kim@lge.com \
    --cc=namhyung@kernel.org \
    --cc=paulus@samba.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.