diff options
author | Arnaldo Carvalho de Melo <acme@redhat.com> | 2018-05-17 14:03:05 -0400 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2018-05-17 15:03:34 -0400 |
commit | 9ac94e31ca8c6311ec9eb68aea513e39ad809013 (patch) | |
tree | 352e30a3305522b1744c6c333ae497e119b9fac8 /tools/perf/util/util.c | |
parent | 6e1690c4c0b540930f08295b6a95c8660b257745 (diff) |
perf tools: Read the cache line size lazily
It is not read as commonly as 'page_size', so it makes sense to read it
lazily, caching its value when it is first read.
Less files open unconditionally at startup.
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Wang Nan <wangnan0@huawei.com>
Link: https://lkml.kernel.org/n/tip-35xhrq91u94uc1djtclek1ie@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf/util/util.c')
-rw-r--r-- | tools/perf/util/util.c | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/tools/perf/util/util.c b/tools/perf/util/util.c index 1019bbc5dbd8..99ab52165680 100644 --- a/tools/perf/util/util.c +++ b/tools/perf/util/util.c | |||
@@ -38,7 +38,26 @@ void perf_set_multithreaded(void) | |||
38 | } | 38 | } |
39 | 39 | ||
40 | unsigned int page_size; | 40 | unsigned int page_size; |
41 | int cacheline_size; | 41 | |
42 | #ifdef _SC_LEVEL1_DCACHE_LINESIZE | ||
43 | #define cache_line_size(cacheline_sizep) *cacheline_sizep = sysconf(_SC_LEVEL1_DCACHE_LINESIZE) | ||
44 | #else | ||
45 | static void cache_line_size(int *cacheline_sizep) | ||
46 | { | ||
47 | if (sysfs__read_int("devices/system/cpu/cpu0/cache/index0/coherency_line_size", cacheline_sizep)) | ||
48 | pr_debug("cannot determine cache line size"); | ||
49 | } | ||
50 | #endif | ||
51 | |||
52 | int cacheline_size(void) | ||
53 | { | ||
54 | static int size; | ||
55 | |||
56 | if (!size) | ||
57 | cache_line_size(&size); | ||
58 | |||
59 | return size; | ||
60 | } | ||
42 | 61 | ||
43 | int sysctl_perf_event_max_stack = PERF_MAX_STACK_DEPTH; | 62 | int sysctl_perf_event_max_stack = PERF_MAX_STACK_DEPTH; |
44 | int sysctl_perf_event_max_contexts_per_stack = PERF_MAX_CONTEXTS_PER_STACK; | 63 | int sysctl_perf_event_max_contexts_per_stack = PERF_MAX_CONTEXTS_PER_STACK; |