vmm: Move the vmcall overrides to the VM struct
[akaros.git] / user / perfmon / events / intel_snb_unc_events.h
1 /*
2  * Copyright (c) 2012 Google, Inc
3  * Contributed by Stephane Eranian <eranian@gmail.com>
4  *
5  * Permission is hereby granted, free of charge, to any person obtaining a copy
6  * of this software and associated documentation files (the "Software"), to deal
7  * in the Software without restriction, including without limitation the rights
8  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
9  * of the Software, and to permit persons to whom the Software is furnished to do so,
10  * subject to the following conditions:
11  *
12  * The above copyright notice and this permission notice shall be included in all
13  * copies or substantial portions of the Software.
14  *
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
16  * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
17  * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
18  * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
19  * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
20  * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21  *
22  * This file is part of libpfm, a performance monitoring support library for
23  * applications on Linux.
24  *
25  * PMU: snb_unc (Intel Sandy Bridge uncore PMU)
26  */
27
28 static const intel_x86_umask_t snb_unc_cbo_xsnp_response[]={
29    { .uname  = "MISS",
30      .udesc  = "Number of snoop misses",
31      .ucode  = 0x100,
32      .grpid  = 0,
33    },
34    { .uname  = "INVAL",
35      .udesc  = "Number of snoop invalidates of a non-modified line",
36      .ucode  = 0x200,
37      .grpid  = 0,
38    },
39    { .uname  = "HIT",
40      .udesc  = "Number of snoop hits of a non-modified line",
41      .ucode  = 0x400,
42      .grpid  = 0,
43    },
44    { .uname  = "HITM",
45      .udesc  = "Number of snoop hits of a modified line",
46      .ucode  = 0x800,
47      .grpid  = 0,
48    },
49    { .uname  = "INVAL_M",
50      .udesc  = "Number of snoop invalidates of a modified line",
51      .ucode  = 0x1000,
52      .grpid  = 0,
53    },
54    { .uname  = "ANY_SNP",
55      .udesc  = "Number of snoops",
56      .ucode  = 0x1f00,
57      .grpid  = 0,
58      .uflags = INTEL_X86_NCOMBO | INTEL_X86_DFL,
59    },
60    { .uname  = "EXTERNAL_FILTER",
61      .udesc  = "Filter on cross-core snoops initiated by this Cbox due to external snoop request",
62      .ucode  = 0x2000,
63      .grpid  = 1,
64      .uflags = INTEL_X86_NCOMBO,
65    },
66    { .uname  = "XCORE_FILTER",
67      .udesc  = "Filter on cross-core snoops initiated by this Cbox due to processor core memory request",
68      .ucode  = 0x4000,
69      .grpid  = 1,
70      .uflags = INTEL_X86_NCOMBO | INTEL_X86_DFL,
71    },
72    { .uname  = "EVICTION_FILTER",
73      .udesc  = "Filter on cross-core snoops initiated by this Cbox due to LLC eviction",
74      .ucode  = 0x8000,
75      .grpid  = 1,
76      .uflags = INTEL_X86_NCOMBO,
77    },
78 };
79
80 static const intel_x86_umask_t snb_unc_cbo_cache_lookup[]={
81    { .uname  = "STATE_M",
82      .udesc  = "Number of LLC lookup requests for a line in modified state",
83      .ucode  = 0x100,
84      .grpid  = 0,
85      .uflags = INTEL_X86_NCOMBO,
86    },
87    { .uname  = "STATE_E",
88      .udesc  = "Number of LLC lookup requests for a line in exclusive state",
89      .ucode  = 0x200,
90      .grpid  = 0,
91      .uflags = INTEL_X86_NCOMBO,
92    },
93    { .uname  = "STATE_S",
94      .udesc  = "Number of LLC lookup requests for a line in shared state",
95      .ucode  = 0x400,
96      .grpid  = 0,
97      .uflags = INTEL_X86_NCOMBO,
98    },
99    { .uname  = "STATE_I",
100      .udesc  = "Number of LLC lookup requests for a line in invalid state",
101      .ucode  = 0x800,
102      .grpid  = 0,
103      .uflags = INTEL_X86_NCOMBO,
104    },
105    { .uname  = "STATE_MESI",
106      .udesc  = "Number of LLC lookup requests for a line",
107      .ucode  = 0xf00,
108      .grpid  = 0,
109      .uflags = INTEL_X86_NCOMBO | INTEL_X86_DFL,
110    },
111    { .uname  = "READ_FILTER",
112      .udesc  = "Filter on processor core initiated cacheable read requests",
113      .ucode  = 0x1000,
114      .grpid  = 1,
115      .uflags = INTEL_X86_NCOMBO,
116    },
117    { .uname  = "WRITE_FILTER",
118      .udesc  = "Filter on processor core initiated cacheable write requests",
119      .ucode  = 0x2000,
120      .grpid  = 1,
121      .uflags = INTEL_X86_NCOMBO,
122    },
123    { .uname  = "EXTSNP_FILTER",
124      .udesc  = "Filter on external snoop requests",
125      .ucode  = 0x4000,
126      .grpid  = 1,
127      .uflags = INTEL_X86_NCOMBO,
128    },
129    { .uname  = "ANY_FILTER",
130      .udesc  = "Filter on any IRQ or IPQ initiated requests including uncacheable, non-coherent requests",
131      .ucode  = 0x8000,
132      .grpid  = 1,
133      .uflags = INTEL_X86_NCOMBO | INTEL_X86_DFL,
134    },
135 };
136
137 static const intel_x86_umask_t snb_unc_arb_trk_occupancy[]={
138    { .uname  = "ALL",
139      .udesc  = "Counts cycles weighted by the number of requests waiting for data returning from the memory controller, (includes coherent and non-coherent requests initiated by cores, processor graphic units, or LLC)",
140      .ucode = 0x100,
141      .uflags= INTEL_X86_NCOMBO | INTEL_X86_DFL,
142    },
143 };
144
145 static const intel_x86_umask_t snb_unc_arb_trk[]={
146    { .uname  = "ALL",
147      .udesc  = "Counts number of coherent and in-coherent requests initiated by cores, processor graphic units, or LLC",
148      .ucode = 0x100,
149      .uflags= INTEL_X86_NCOMBO | INTEL_X86_DFL,
150    },
151    { .uname  = "WRITES",
152      .udesc  = "Counts the number of allocated write entries, include full, partial, and LLC evictions",
153      .ucode = 0x2000,
154      .uflags= INTEL_X86_NCOMBO,
155    },
156    { .uname  = "EVICTIONS",
157      .udesc  = "Counts the number of LLC evictions allocated",
158      .ucode = 0x8000,
159      .uflags= INTEL_X86_NCOMBO,
160    },
161 };
162
163 static const intel_x86_umask_t snb_unc_arb_coh_trk_occupancy[]={
164    { .uname  = "ALL",
165      .udesc  = "Cycles weighted by number of requests pending in Coherency Tracker",
166      .ucode = 0x100,
167      .uflags= INTEL_X86_NCOMBO | INTEL_X86_DFL,
168    },
169 };
170
171 static const intel_x86_umask_t snb_unc_arb_coh_trk_request[]={
172    { .uname  = "ALL",
173      .udesc  = "Number of requests allocated in Coherency Tracker",
174      .ucode = 0x100,
175      .uflags= INTEL_X86_NCOMBO | INTEL_X86_DFL,
176    },
177 };
178
179 static const intel_x86_entry_t intel_snb_unc_cbo0_pe[]={
180 { .name   = "UNC_CLOCKTICKS",
181   .desc   = "uncore clock ticks",
182   .cntmsk = 1ULL << 32,
183   .code = 0xff, /* perf_event pseudo encoding */
184   .flags = INTEL_X86_FIXED,
185 },
186 { .name   = "UNC_CBO_XSNP_RESPONSE",
187   .desc   = "Snoop responses",
188   .modmsk = INTEL_SNB_UNC_ATTRS,
189   .cntmsk = 0xff,
190   .code = 0x22,
191   .numasks = LIBPFM_ARRAY_SIZE(snb_unc_cbo_xsnp_response),
192   .ngrp = 2,
193   .umasks = snb_unc_cbo_xsnp_response,
194 },
195 { .name   = "UNC_CBO_CACHE_LOOKUP",
196   .desc   = "LLC cache lookups",
197   .modmsk = INTEL_SNB_UNC_ATTRS,
198   .cntmsk = 0xff,
199   .code = 0x34,
200   .numasks = LIBPFM_ARRAY_SIZE(snb_unc_cbo_cache_lookup),
201   .ngrp = 2,
202   .umasks = snb_unc_cbo_cache_lookup,
203 },
204 };
205
206 static const intel_x86_entry_t intel_snb_unc_cbo_pe[]={
207 { .name   = "UNC_CBO_XSNP_RESPONSE",
208   .desc   = "Snoop responses (must provide a snoop type and filter)",
209   .modmsk = INTEL_SNB_UNC_ATTRS,
210   .cntmsk = 0xff,
211   .code = 0x22,
212   .numasks = LIBPFM_ARRAY_SIZE(snb_unc_cbo_xsnp_response),
213   .ngrp = 2,
214   .umasks = snb_unc_cbo_xsnp_response,
215 },
216 { .name   = "UNC_CBO_CACHE_LOOKUP",
217   .desc   = "LLC cache lookups",
218   .modmsk = INTEL_SNB_UNC_ATTRS,
219   .cntmsk = 0xff,
220   .code = 0x34,
221   .numasks = LIBPFM_ARRAY_SIZE(snb_unc_cbo_cache_lookup),
222   .ngrp = 2,
223   .umasks = snb_unc_cbo_cache_lookup,
224 },
225 };
226
227 static const intel_x86_entry_t intel_snb_unc_arb_pe[]={
228 { .name   = "UNC_ARB_TRK_OCCUPANCY",
229   .desc   = "ARB tracker occupancy",
230   .modmsk = INTEL_SNB_UNC_ATTRS,
231   .cntmsk = 0x1,
232   .code = 0x80,
233   .numasks = LIBPFM_ARRAY_SIZE(snb_unc_arb_trk_occupancy),
234   .ngrp = 1,
235   .umasks = snb_unc_arb_trk_occupancy,
236 },
237 { .name   = "UNC_ARB_COH_TRK_OCCUPANCY",
238   .desc   = "Coherency traffic occupancy",
239   .modmsk = INTEL_SNB_UNC_ATTRS,
240   .cntmsk = 0x1,
241   .code = 0x83,
242   .flags= INTEL_X86_PEBS,
243   .numasks = LIBPFM_ARRAY_SIZE(snb_unc_arb_coh_trk_occupancy),
244   .ngrp = 1,
245   .umasks = snb_unc_arb_coh_trk_occupancy,
246 },
247 { .name   = "UNC_ARB_COH_TRK_REQUEST",
248   .desc   = "Coherency traffic requests",
249   .modmsk = INTEL_SNB_UNC_ATTRS,
250   .cntmsk = 0x1,
251   .code = 0x84,
252   .numasks = LIBPFM_ARRAY_SIZE(snb_unc_arb_coh_trk_request),
253   .ngrp = 1,
254   .umasks = snb_unc_arb_coh_trk_request,
255 },
256 };