aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/perf_counter.h
diff options
context:
space:
mode:
authorIngo Molnar <mingo@elte.hu>2009-06-05 14:22:46 -0400
committerIngo Molnar <mingo@elte.hu>2009-06-06 07:14:47 -0400
commit8326f44da090d6d304d29b9fdc7fb3e20889e329 (patch)
treea15b2a2155c64a327b3cdf1da0997755d49390eb /include/linux/perf_counter.h
parenta21ca2cac582886a3e95c8bb84ff7c52d4d15e54 (diff)
perf_counter: Implement generalized cache event types
Extend generic event enumeration with the PERF_TYPE_HW_CACHE method. This is a 3-dimensional space: { L1-D, L1-I, L2, ITLB, DTLB, BPU } x { load, store, prefetch } x { accesses, misses } User-space passes in the 3 coordinates and the kernel provides a counter. (if the hardware supports that type and if the combination makes sense.) Combinations that make no sense produce a -EINVAL. Combinations that are not supported by the hardware produce -ENOTSUP. Extend the tools to deal with this, and rewrite the event symbol parsing code with various popular aliases for the units and access methods above. So 'l1-cache-miss' and 'l1d-read-ops' are both valid aliases. ( x86 is supported for now, with the Nehalem event table filled in, and with Core2 and Atom having placeholder tables. ) Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Mike Galbraith <efault@gmx.de> Cc: Paul Mackerras <paulus@samba.org> Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com> Cc: Marcelo Tosatti <mtosatti@redhat.com> Cc: Arnaldo Carvalho de Melo <acme@redhat.com> LKML-Reference: <new-submission> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'include/linux/perf_counter.h')
-rw-r--r--include/linux/perf_counter.h34
1 files changed, 34 insertions, 0 deletions
diff --git a/include/linux/perf_counter.h b/include/linux/perf_counter.h
index f794c69b34c9..3586df840f69 100644
--- a/include/linux/perf_counter.h
+++ b/include/linux/perf_counter.h
@@ -28,6 +28,7 @@ enum perf_event_types {
28 PERF_TYPE_HARDWARE = 0, 28 PERF_TYPE_HARDWARE = 0,
29 PERF_TYPE_SOFTWARE = 1, 29 PERF_TYPE_SOFTWARE = 1,
30 PERF_TYPE_TRACEPOINT = 2, 30 PERF_TYPE_TRACEPOINT = 2,
31 PERF_TYPE_HW_CACHE = 3,
31 32
32 /* 33 /*
33 * available TYPE space, raw is the max value. 34 * available TYPE space, raw is the max value.
@@ -56,6 +57,39 @@ enum attr_ids {
56}; 57};
57 58
58/* 59/*
60 * Generalized hardware cache counters:
61 *
62 * { L1-D, L1-I, L2, LLC, ITLB, DTLB, BPU } x
63 * { read, write, prefetch } x
64 * { accesses, misses }
65 */
66enum hw_cache_id {
67 PERF_COUNT_HW_CACHE_L1D,
68 PERF_COUNT_HW_CACHE_L1I,
69 PERF_COUNT_HW_CACHE_L2,
70 PERF_COUNT_HW_CACHE_DTLB,
71 PERF_COUNT_HW_CACHE_ITLB,
72 PERF_COUNT_HW_CACHE_BPU,
73
74 PERF_COUNT_HW_CACHE_MAX,
75};
76
77enum hw_cache_op_id {
78 PERF_COUNT_HW_CACHE_OP_READ,
79 PERF_COUNT_HW_CACHE_OP_WRITE,
80 PERF_COUNT_HW_CACHE_OP_PREFETCH,
81
82 PERF_COUNT_HW_CACHE_OP_MAX,
83};
84
85enum hw_cache_op_result_id {
86 PERF_COUNT_HW_CACHE_RESULT_ACCESS,
87 PERF_COUNT_HW_CACHE_RESULT_MISS,
88
89 PERF_COUNT_HW_CACHE_RESULT_MAX,
90};
91
92/*
59 * Special "software" counters provided by the kernel, even if the hardware 93 * Special "software" counters provided by the kernel, even if the hardware
60 * does not support performance counters. These counters measure various 94 * does not support performance counters. These counters measure various
61 * physical and sw events of the kernel (and allow the profiling of them as 95 * physical and sw events of the kernel (and allow the profiling of them as