All of lore.kernel.org
 help / color / mirror / Atom feed
From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Don Zickus <dzickus@redhat.com>
Cc: jolsa@redhat.com, Peter Zijlstra <peterz@infradead.org>,
	LKML <linux-kernel@vger.kernel.org>,
	namhyung@gmail.com, eranian@google.com,
	Andi Kleen <andi@firstfloor.org>
Subject: Re: [PATCH 6/7 V2] perf: Add support to dynamically get cacheline size
Date: Fri, 30 May 2014 12:28:30 -0300	[thread overview]
Message-ID: <20140530152830.GB1202@kernel.org> (raw)
In-Reply-To: <1401461425-209679-1-git-send-email-dzickus@redhat.com>

Em Fri, May 30, 2014 at 10:50:25AM -0400, Don Zickus escreveu:
> Different arches may have different cacheline sizes.  Look it up and set
> a global variable for reference.

[acme@zoo linux]$ strings `which getconf` | grep LINESIZE
LEVEL1_ICACHE_LINESIZE
LEVEL1_DCACHE_LINESIZE
LEVEL2_CACHE_LINESIZE
LEVEL3_CACHE_LINESIZE
LEVEL4_CACHE_LINESIZE
[acme@zoo linux]$

man sysconf

That is what I use in pahole, for instance:

[acme@zoo pahole]$ grep sysconf *.c
dwarves_fprintf.c:		long sys_cacheline_size =
sysconf(_SC_LEVEL1_DCACHE_LINESIZE);
[acme@zoo pahole]$

- Arnaldo
 
> Signed-off-by: Don Zickus <dzickus@redhat.com>
> 
> ---
> V3: remove unneeded cpumap.h (Namhyung Kim)
> V2: change to be global and setup in perf.c
>     use filename__read_int for setup
> ---
>  tools/perf/perf.c        |  5 +++++
>  tools/perf/util/cpumap.c | 27 +++++++++++++++++++++++++++
>  tools/perf/util/cpumap.h |  3 +++
>  tools/perf/util/util.c   |  1 +
>  tools/perf/util/util.h   |  1 +
>  5 files changed, 37 insertions(+)
> 
> diff --git a/tools/perf/perf.c b/tools/perf/perf.c
> index 431798a..dabf08b 100644
> --- a/tools/perf/perf.c
> +++ b/tools/perf/perf.c
> @@ -13,6 +13,7 @@
>  #include "util/quote.h"
>  #include "util/run-command.h"
>  #include "util/parse-events.h"
> +#include "util/cpumap.h"
>  #include <api/fs/debugfs.h>
>  #include <pthread.h>
>  
> @@ -459,6 +460,10 @@ int main(int argc, const char **argv)
>  	/* The page_size is placed in util object. */
>  	page_size = sysconf(_SC_PAGE_SIZE);
>  
> +	/* The cacheline_size is placed in util objet */
> +	if (cpu__setup_cacheline_size() < 0) 
> +		goto out;
> +
>  	cmd = perf_extract_argv0_path(argv[0]);
>  	if (!cmd)
>  		cmd = "perf-help";
> diff --git a/tools/perf/util/cpumap.c b/tools/perf/util/cpumap.c
> index c4e55b7..1029982 100644
> --- a/tools/perf/util/cpumap.c
> +++ b/tools/perf/util/cpumap.c
> @@ -477,3 +477,30 @@ int cpu__setup_cpunode_map(void)
>  	closedir(dir1);
>  	return 0;
>  }
> +
> +int cpu__setup_cacheline_size(void)
> +{
> +	const char *mnt;
> +	char path[PATH_MAX];
> +	int n, size;
> +	
> +
> +	mnt = sysfs__mountpoint();
> +	if (!mnt)
> +		return -1;
> +
> +	n = snprintf(path, PATH_MAX, "%s/devices/system/cpu/cpu0/cache/index0/coherency_line_size", mnt);
> +	if (n == PATH_MAX) {
> +		pr_err("sysfs path crossed PATH_MAX(%d) size\n", PATH_MAX);
> +		return -1;
> +	}
> +
> +	if (filename__read_int(path, &size)) {
> +		pr_err("Can not read cacheline size\n");
> +		return -1;
> +	}
> +
> +	cacheline_size = size;
> +
> +	return 0;
> +}
> diff --git a/tools/perf/util/cpumap.h b/tools/perf/util/cpumap.h
> index 61a6548..507d7fd 100644
> --- a/tools/perf/util/cpumap.h
> +++ b/tools/perf/util/cpumap.h
> @@ -5,6 +5,7 @@
>  #include <stdbool.h>
>  
>  #include "perf.h"
> +#include "util/util.h"
>  #include "util/debug.h"
>  
>  struct cpu_map {
> @@ -81,4 +82,6 @@ static inline int cpu__get_node(int cpu)
>  	return cpunode_map[cpu];
>  }
>  
> +int cpu__setup_cacheline_size(void);
> +
>  #endif /* __PERF_CPUMAP_H */
> diff --git a/tools/perf/util/util.c b/tools/perf/util/util.c
> index 7fff6be..95aefa7 100644
> --- a/tools/perf/util/util.c
> +++ b/tools/perf/util/util.c
> @@ -17,6 +17,7 @@
>   * XXX We need to find a better place for these things...
>   */
>  unsigned int page_size;
> +int cacheline_size;
>  
>  bool test_attr__enabled;
>  
> diff --git a/tools/perf/util/util.h b/tools/perf/util/util.h
> index b03da44..6686436 100644
> --- a/tools/perf/util/util.h
> +++ b/tools/perf/util/util.h
> @@ -304,6 +304,7 @@ char *rtrim(char *s);
>  void dump_stack(void);
>  
>  extern unsigned int page_size;
> +extern int cacheline_size;
>  
>  void get_term_dimensions(struct winsize *ws);
>  
> -- 
> 1.7.11.7

  reply	other threads:[~2014-05-30 15:28 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-05-27 16:28 [PATCH 0/7 V4] perf: Enable mmap2 and add dcacheline sorting Don Zickus
2014-05-27 16:28 ` [PATCH 1/7] events, perf: Pass protection and flags bits through mmap2 interface Don Zickus
2014-05-27 16:28 ` [PATCH 2/7] Revert "perf: Disable PERF_RECORD_MMAP2 support" Don Zickus
2014-05-30  7:05   ` Namhyung Kim
2014-05-30 14:49   ` [PATCH 2/7 V2] " Don Zickus
2014-06-12 12:02     ` [tip:perf/core] " tip-bot for Don Zickus
2014-05-27 16:28 ` [PATCH 3/7] perf: Update mmap2 interface with protection and flag bits Don Zickus
2014-05-27 16:28 ` [PATCH 4/7] perf report: Add mem-mode documentation to report command Don Zickus
2014-05-27 16:28 ` [PATCH 5/7] perf: Add cpumode to struct hist_entry Don Zickus
2014-06-12 12:03   ` [tip:perf/core] perf tools: " tip-bot for Don Zickus
2014-05-27 16:28 ` [PATCH 6/7] perf: Add support to dynamically get cacheline size Don Zickus
2014-05-30  7:09   ` Namhyung Kim
2014-05-30 14:50   ` [PATCH 6/7 V2] " Don Zickus
2014-05-30 15:28     ` Arnaldo Carvalho de Melo [this message]
2014-05-30 16:20       ` Don Zickus
2014-05-30 20:10   ` [PATCH 6/7 V3] " Don Zickus
2014-06-12 12:03     ` [tip:perf/core] perf tools: " tip-bot for Don Zickus
2014-05-27 16:28 ` [PATCH 7/7] perf: Add dcacheline sort Don Zickus
2014-06-12 12:03   ` [tip:perf/core] perf tools: " tip-bot for Don Zickus
2014-05-30  7:15 ` [PATCH 0/7 V4] perf: Enable mmap2 and add dcacheline sorting 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=20140530152830.GB1202@kernel.org \
    --to=acme@kernel.org \
    --cc=andi@firstfloor.org \
    --cc=dzickus@redhat.com \
    --cc=eranian@google.com \
    --cc=jolsa@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=namhyung@gmail.com \
    --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 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.