misc: add callback hooks and refactor pmc
[vpp.git] / src / plugins / perfmon / perfmon_intel_skx.c
1
2 #include <perfmon/perfmon_intel.h>
3
4 static perfmon_intel_pmc_cpu_model_t cpu_model_table[] = {
5   {0x55, 0x00, 1},
6   {0x55, 0x01, 1},
7   {0x55, 0x02, 1},
8   {0x55, 0x03, 1},
9   {0x55, 0x04, 1},
10 };
11
12 static perfmon_intel_pmc_event_t event_table[] = {
13   {
14    .event_code = {0x00},
15    .umask = 0x01,
16    .event_name = "inst_retired.any",
17    },
18   {
19    .event_code = {0x00},
20    .umask = 0x02,
21    .event_name = "cpu_clk_unhalted.thread",
22    },
23   {
24    .event_code = {0x00},
25    .umask = 0x02,
26    .event_name = "cpu_clk_unhalted.thread_any",
27    },
28   {
29    .event_code = {0x00},
30    .umask = 0x03,
31    .event_name = "cpu_clk_unhalted.ref_tsc",
32    },
33   {
34    .event_code = {0x03},
35    .umask = 0x02,
36    .event_name = "ld_blocks.store_forward",
37    },
38   {
39    .event_code = {0x03},
40    .umask = 0x08,
41    .event_name = "ld_blocks.no_sr",
42    },
43   {
44    .event_code = {0x07},
45    .umask = 0x01,
46    .event_name = "ld_blocks_partial.address_alias",
47    },
48   {
49    .event_code = {0x08},
50    .umask = 0x01,
51    .event_name = "dtlb_load_misses.miss_causes_a_walk",
52    },
53   {
54    .event_code = {0x08},
55    .umask = 0x02,
56    .event_name = "dtlb_load_misses.walk_completed_4k",
57    },
58   {
59    .event_code = {0x08},
60    .umask = 0x04,
61    .event_name = "dtlb_load_misses.walk_completed_2m_4m",
62    },
63   {
64    .event_code = {0x08},
65    .umask = 0x08,
66    .event_name = "dtlb_load_misses.walk_completed_1g",
67    },
68   {
69    .event_code = {0x08},
70    .umask = 0x0E,
71    .event_name = "dtlb_load_misses.walk_completed",
72    },
73   {
74    .event_code = {0x08},
75    .umask = 0x10,
76    .event_name = "dtlb_load_misses.walk_pending",
77    },
78   {
79    .event_code = {0x08},
80    .umask = 0x20,
81    .event_name = "dtlb_load_misses.stlb_hit",
82    },
83   {
84    .event_code = {0x0D},
85    .umask = 0x01,
86    .event_name = "int_misc.recovery_cycles",
87    },
88   {
89    .event_code = {0x0D},
90    .umask = 0x01,
91    .anyt = 1,
92    .event_name = "int_misc.recovery_cycles_any",
93    },
94   {
95    .event_code = {0x0D},
96    .umask = 0x80,
97    .event_name = "int_misc.clear_resteer_cycles",
98    },
99   {
100    .event_code = {0x0E},
101    .umask = 0x01,
102    .cmask = 1,
103    .inv = 1,
104    .event_name = "uops_issued.stall_cycles",
105    },
106   {
107    .event_code = {0x0E},
108    .umask = 0x01,
109    .event_name = "uops_issued.any",
110    },
111   {
112    .event_code = {0x0E},
113    .umask = 0x20,
114    .event_name = "uops_issued.slow_lea",
115    },
116   {
117    .event_code = {0x14},
118    .umask = 0x01,
119    .event_name = "arith.divider_active",
120    },
121   {
122    .event_code = {0x24},
123    .umask = 0x21,
124    .event_name = "l2_rqsts.demand_data_rd_miss",
125    },
126   {
127    .event_code = {0x24},
128    .umask = 0x22,
129    .event_name = "l2_rqsts.rfo_miss",
130    },
131   {
132    .event_code = {0x24},
133    .umask = 0x24,
134    .event_name = "l2_rqsts.code_rd_miss",
135    },
136   {
137    .event_code = {0x24},
138    .umask = 0x27,
139    .event_name = "l2_rqsts.all_demand_miss",
140    },
141   {
142    .event_code = {0x24},
143    .umask = 0x38,
144    .event_name = "l2_rqsts.pf_miss",
145    },
146   {
147    .event_code = {0x24},
148    .umask = 0x3F,
149    .event_name = "l2_rqsts.miss",
150    },
151   {
152    .event_code = {0x24},
153    .umask = 0xc1,
154    .event_name = "l2_rqsts.demand_data_rd_hit",
155    },
156   {
157    .event_code = {0x24},
158    .umask = 0xc2,
159    .event_name = "l2_rqsts.rfo_hit",
160    },
161   {
162    .event_code = {0x24},
163    .umask = 0xc4,
164    .event_name = "l2_rqsts.code_rd_hit",
165    },
166   {
167    .event_code = {0x24},
168    .umask = 0xd8,
169    .event_name = "l2_rqsts.pf_hit",
170    },
171   {
172    .event_code = {0x24},
173    .umask = 0xE1,
174    .event_name = "l2_rqsts.all_demand_data_rd",
175    },
176   {
177    .event_code = {0x24},
178    .umask = 0xE2,
179    .event_name = "l2_rqsts.all_rfo",
180    },
181   {
182    .event_code = {0x24},
183    .umask = 0xE4,
184    .event_name = "l2_rqsts.all_code_rd",
185    },
186   {
187    .event_code = {0x24},
188    .umask = 0xe7,
189    .event_name = "l2_rqsts.all_demand_references",
190    },
191   {
192    .event_code = {0x24},
193    .umask = 0xF8,
194    .event_name = "l2_rqsts.all_pf",
195    },
196   {
197    .event_code = {0x24},
198    .umask = 0xFF,
199    .event_name = "l2_rqsts.references",
200    },
201   {
202    .event_code = {0x28},
203    .umask = 0x07,
204    .event_name = "core_power.lvl0_turbo_license",
205    },
206   {
207    .event_code = {0x28},
208    .umask = 0x18,
209    .event_name = "core_power.lvl1_turbo_license",
210    },
211   {
212    .event_code = {0x28},
213    .umask = 0x20,
214    .event_name = "core_power.lvl2_turbo_license",
215    },
216   {
217    .event_code = {0x28},
218    .umask = 0x40,
219    .event_name = "core_power.throttle",
220    },
221   {
222    .event_code = {0x2E},
223    .umask = 0x41,
224    .event_name = "longest_lat_cache.miss",
225    },
226   {
227    .event_code = {0x2E},
228    .umask = 0x4F,
229    .event_name = "longest_lat_cache.reference",
230    },
231   {
232    .event_code = {0x32},
233    .umask = 0x01,
234    .event_name = "sw_prefetch_access.nta",
235    },
236   {
237    .event_code = {0x32},
238    .umask = 0x02,
239    .event_name = "sw_prefetch_access.t0",
240    },
241   {
242    .event_code = {0x32},
243    .umask = 0x04,
244    .event_name = "sw_prefetch_access.t1_t2",
245    },
246   {
247    .event_code = {0x32},
248    .umask = 0x08,
249    .event_name = "sw_prefetch_access.prefetchw",
250    },
251   {
252    .event_code = {0x3C},
253    .umask = 0x00,
254    .event_name = "cpu_clk_unhalted.thread_p",
255    },
256   {
257    .event_code = {0x3C},
258    .umask = 0x00,
259    .anyt = 1,
260    .event_name = "cpu_clk_unhalted.thread_p_any",
261    },
262   {
263    .event_code = {0x3C},
264    .umask = 0x00,
265    .event_name = "cpu_clk_unhalted.ring0_trans",
266    },
267   {
268    .event_code = {0x3C},
269    .umask = 0x01,
270    .event_name = "cpu_clk_thread_unhalted.ref_xclk",
271    },
272   {
273    .event_code = {0x3C},
274    .umask = 0x01,
275    .anyt = 1,
276    .event_name = "cpu_clk_thread_unhalted.ref_xclk_any",
277    },
278   {
279    .event_code = {0x3C},
280    .umask = 0x01,
281    .event_name = "cpu_clk_unhalted.ref_xclk_any",
282    },
283   {
284    .event_code = {0x3C},
285    .umask = 0x01,
286    .event_name = "cpu_clk_unhalted.ref_xclk",
287    },
288   {
289    .event_code = {0x3C},
290    .umask = 0x02,
291    .event_name = "cpu_clk_thread_unhalted.one_thread_active",
292    },
293   {
294    .event_code = {0x48},
295    .umask = 0x01,
296    .cmask = 1,
297    .event_name = "l1d_pend_miss.pending_cycles",
298    },
299   {
300    .event_code = {0x48},
301    .umask = 0x01,
302    .event_name = "l1d_pend_miss.pending",
303    },
304   {
305    .event_code = {0x48},
306    .umask = 0x02,
307    .event_name = "l1d_pend_miss.fb_full",
308    },
309   {
310    .event_code = {0x49},
311    .umask = 0x01,
312    .event_name = "dtlb_store_misses.miss_causes_a_walk",
313    },
314   {
315    .event_code = {0x49},
316    .umask = 0x02,
317    .event_name = "dtlb_store_misses.walk_completed_4k",
318    },
319   {
320    .event_code = {0x49},
321    .umask = 0x04,
322    .event_name = "dtlb_store_misses.walk_completed_2m_4m",
323    },
324   {
325    .event_code = {0x49},
326    .umask = 0x08,
327    .event_name = "dtlb_store_misses.walk_completed_1g",
328    },
329   {
330    .event_code = {0x49},
331    .umask = 0x0E,
332    .event_name = "dtlb_store_misses.walk_completed",
333    },
334   {
335    .event_code = {0x49},
336    .umask = 0x10,
337    .cmask = 1,
338    .event_name = "dtlb_store_misses.walk_active",
339    },
340   {
341    .event_code = {0x49},
342    .umask = 0x10,
343    .event_name = "dtlb_store_misses.walk_pending",
344    },
345   {
346    .event_code = {0x49},
347    .umask = 0x20,
348    .event_name = "dtlb_store_misses.stlb_hit",
349    },
350   {
351    .event_code = {0x4C},
352    .umask = 0x01,
353    .event_name = "load_hit_pre.sw_pf",
354    },
355   {
356    .event_code = {0x4F},
357    .umask = 0x10,
358    .event_name = "ept.walk_pending",
359    },
360   {
361    .event_code = {0x51},
362    .umask = 0x01,
363    .event_name = "l1d.replacement",
364    },
365   {
366    .event_code = {0x54},
367    .umask = 0x01,
368    .event_name = "tx_mem.abort_conflict",
369    },
370   {
371    .event_code = {0x54},
372    .umask = 0x02,
373    .event_name = "tx_mem.abort_capacity",
374    },
375   {
376    .event_code = {0x54},
377    .umask = 0x04,
378    .event_name = "tx_mem.abort_hle_store_to_elided_lock",
379    },
380   {
381    .event_code = {0x54},
382    .umask = 0x08,
383    .event_name = "tx_mem.abort_hle_elision_buffer_not_empty",
384    },
385   {
386    .event_code = {0x54},
387    .umask = 0x10,
388    .event_name = "tx_mem.abort_hle_elision_buffer_mismatch",
389    },
390   {
391    .event_code = {0x54},
392    .umask = 0x20,
393    .event_name = "tx_mem.abort_hle_elision_buffer_unsupported_alignment",
394    },
395   {
396    .event_code = {0x54},
397    .umask = 0x40,
398    .event_name = "tx_mem.hle_elision_buffer_full",
399    },
400   {
401    .event_code = {0x59},
402    .umask = 0x01,
403    .event_name = "partial_rat_stalls.scoreboard",
404    },
405   {
406    .event_code = {0x5d},
407    .umask = 0x01,
408    .event_name = "tx_exec.misc1",
409    },
410   {
411    .event_code = {0x5d},
412    .umask = 0x02,
413    .event_name = "tx_exec.misc2",
414    },
415   {
416    .event_code = {0x5d},
417    .umask = 0x04,
418    .event_name = "tx_exec.misc3",
419    },
420   {
421    .event_code = {0x5d},
422    .umask = 0x08,
423    .event_name = "tx_exec.misc4",
424    },
425   {
426    .event_code = {0x5d},
427    .umask = 0x10,
428    .event_name = "tx_exec.misc5",
429    },
430   {
431    .event_code = {0x5E},
432    .umask = 0x01,
433    .cmask = 1,
434    .inv = 1,
435    .event_name = "rs_events.empty_end",
436    },
437   {
438    .event_code = {0x5E},
439    .umask = 0x01,
440    .event_name = "rs_events.empty_cycles",
441    },
442   {
443    .event_code = {0x60},
444    .umask = 0x01,
445    .cmask = 1,
446    .event_name = "offcore_requests_outstanding.cycles_with_demand_data_rd",
447    },
448   {
449    .event_code = {0x60},
450    .umask = 0x01,
451    .event_name = "offcore_requests_outstanding.demand_data_rd",
452    },
453   {
454    .event_code = {0x60},
455    .umask = 0x02,
456    .event_name = "offcore_requests_outstanding.demand_code_rd",
457    },
458   {
459    .event_code = {0x60},
460    .umask = 0x02,
461    .cmask = 1,
462    .event_name = "offcore_requests_outstanding.cycles_with_demand_code_rd",
463    },
464   {
465    .event_code = {0x60},
466    .umask = 0x04,
467    .event_name = "offcore_requests_outstanding.demand_rfo",
468    },
469   {
470    .event_code = {0x60},
471    .umask = 0x04,
472    .cmask = 1,
473    .event_name = "offcore_requests_outstanding.cycles_with_demand_rfo",
474    },
475   {
476    .event_code = {0x60},
477    .umask = 0x08,
478    .cmask = 1,
479    .event_name = "offcore_requests_outstanding.cycles_with_data_rd",
480    },
481   {
482    .event_code = {0x60},
483    .umask = 0x08,
484    .event_name = "offcore_requests_outstanding.all_data_rd",
485    },
486   {
487    .event_code = {0x60},
488    .umask = 0x10,
489    .event_name = "offcore_requests_outstanding.l3_miss_demand_data_rd",
490    },
491   {
492    .event_code = {0x79},
493    .umask = 0x04,
494    .cmask = 1,
495    .event_name = "idq.mite_cycles",
496    },
497   {
498    .event_code = {0x79},
499    .umask = 0x04,
500    .event_name = "idq.mite_uops",
501    },
502   {
503    .event_code = {0x79},
504    .umask = 0x08,
505    .cmask = 1,
506    .event_name = "idq.dsb_cycles",
507    },
508   {
509    .event_code = {0x79},
510    .umask = 0x08,
511    .event_name = "idq.dsb_uops",
512    },
513   {
514    .event_code = {0x79},
515    .umask = 0x10,
516    .event_name = "idq.ms_dsb_cycles",
517    },
518   {
519    .event_code = {0x79},
520    .umask = 0x18,
521    .cmask = 1,
522    .event_name = "idq.all_dsb_cycles_any_uops",
523    },
524   {
525    .event_code = {0x79},
526    .umask = 0x18,
527    .cmask = 4,
528    .event_name = "idq.all_dsb_cycles_4_uops",
529    },
530   {
531    .event_code = {0x79},
532    .umask = 0x20,
533    .event_name = "idq.ms_mite_uops",
534    },
535   {
536    .event_code = {0x79},
537    .umask = 0x24,
538    .event_name = "idq.all_mite_cycles_any_uops",
539    },
540   {
541    .event_code = {0x79},
542    .umask = 0x24,
543    .event_name = "idq.all_mite_cycles_4_uops",
544    },
545   {
546    .event_code = {0x79},
547    .umask = 0x30,
548    .cmask = 1,
549    .event_name = "idq.ms_cycles",
550    },
551   {
552    .event_code = {0x79},
553    .umask = 0x30,
554    .event_name = "idq.ms_uops",
555    },
556   {
557    .event_code = {0x79},
558    .umask = 0x30,
559    .edge = 1,
560    .event_name = "idq.ms_switches",
561    },
562   {
563    .event_code = {0x80},
564    .umask = 0x04,
565    .event_name = "icache_16b.ifdata_stall",
566    },
567   {
568    .event_code = {0x83},
569    .umask = 0x01,
570    .event_name = "icache_64b.iftag_hit",
571    },
572   {
573    .event_code = {0x83},
574    .umask = 0x02,
575    .event_name = "icache_64b.iftag_miss",
576    },
577   {
578    .event_code = {0x83},
579    .umask = 0x04,
580    .event_name = "icache_64b.iftag_stall",
581    },
582   {
583    .event_code = {0x85},
584    .umask = 0x01,
585    .event_name = "itlb_misses.miss_causes_a_walk",
586    },
587   {
588    .event_code = {0x85},
589    .umask = 0x02,
590    .event_name = "itlb_misses.walk_completed_4k",
591    },
592   {
593    .event_code = {0x85},
594    .umask = 0x04,
595    .event_name = "itlb_misses.walk_completed_2m_4m",
596    },
597   {
598    .event_code = {0x85},
599    .umask = 0x08,
600    .event_name = "itlb_misses.walk_completed_1g",
601    },
602   {
603    .event_code = {0x85},
604    .umask = 0x0E,
605    .event_name = "itlb_misses.walk_completed",
606    },
607   {
608    .event_code = {0x85},
609    .umask = 0x10,
610    .event_name = "itlb_misses.walk_pending",
611    },
612   {
613    .event_code = {0x85},
614    .umask = 0x10,
615    .event_name = "itlb_misses.walk_active",
616    },
617   {
618    .event_code = {0x85},
619    .umask = 0x20,
620    .event_name = "itlb_misses.stlb_hit",
621    },
622   {
623    .event_code = {0x87},
624    .umask = 0x01,
625    .event_name = "ild_stall.lcp",
626    },
627   {
628    .event_code = {0x9C},
629    .umask = 0x01,
630    .cmask = 1,
631    .inv = 1,
632    .event_name = "idq_uops_not_delivered.cycles_fe_was_ok",
633    },
634   {
635    .event_code = {0x9C},
636    .umask = 0x01,
637    .cmask = 1,
638    .event_name = "idq_uops_not_delivered.cycles_le_3_uop_deliv.core",
639    },
640   {
641    .event_code = {0x9C},
642    .umask = 0x01,
643    .cmask = 2,
644    .event_name = "idq_uops_not_delivered.cycles_le_2_uop_deliv.core",
645    },
646   {
647    .event_code = {0x9C},
648    .umask = 0x01,
649    .cmask = 3,
650    .event_name = "idq_uops_not_delivered.cycles_le_1_uop_deliv.core",
651    },
652   {
653    .event_code = {0x9C},
654    .umask = 0x01,
655    .cmask = 4,
656    .event_name = "idq_uops_not_delivered.cycles_0_uops_deliv.core",
657    },
658   {
659    .event_code = {0x9C},
660    .umask = 0x01,
661    .event_name = "idq_uops_not_delivered.core",
662    },
663   {
664    .event_code = {0xA1},
665    .umask = 0x01,
666    .event_name = "uops_dispatched_port.port_0",
667    },
668   {
669    .event_code = {0xA1},
670    .umask = 0x02,
671    .event_name = "uops_dispatched_port.port_1",
672    },
673   {
674    .event_code = {0xA1},
675    .umask = 0x04,
676    .event_name = "uops_dispatched_port.port_2",
677    },
678   {
679    .event_code = {0xA1},
680    .umask = 0x08,
681    .event_name = "uops_dispatched_port.port_3",
682    },
683   {
684    .event_code = {0xA1},
685    .umask = 0x10,
686    .event_name = "uops_dispatched_port.port_4",
687    },
688   {
689    .event_code = {0xA1},
690    .umask = 0x20,
691    .event_name = "uops_dispatched_port.port_5",
692    },
693   {
694    .event_code = {0xA1},
695    .umask = 0x40,
696    .event_name = "uops_dispatched_port.port_6",
697    },
698   {
699    .event_code = {0xA1},
700    .umask = 0x80,
701    .event_name = "uops_dispatched_port.port_7",
702    },
703   {
704    .event_code = {0xa2},
705    .umask = 0x01,
706    .event_name = "resource_stalls.any",
707    },
708   {
709    .event_code = {0xA2},
710    .umask = 0x08,
711    .event_name = "resource_stalls.sb",
712    },
713   {
714    .event_code = {0xA3},
715    .umask = 0x01,
716    .cmask = 1,
717    .event_name = "cycle_activity.cycles_l2_miss",
718    },
719   {
720    .event_code = {0xA3},
721    .umask = 0x04,
722    .cmask = 4,
723    .event_name = "cycle_activity.stalls_total",
724    },
725   {
726    .event_code = {0xA3},
727    .umask = 0x05,
728    .cmask = 5,
729    .event_name = "cycle_activity.stalls_l2_miss",
730    },
731   {
732    .event_code = {0xA3},
733    .umask = 0x08,
734    .cmask = 8,
735    .event_name = "cycle_activity.cycles_l1d_miss",
736    },
737   {
738    .event_code = {0xA3},
739    .umask = 0x0C,
740    .cmask = 12,
741    .event_name = "cycle_activity.stalls_l1d_miss",
742    },
743   {
744    .event_code = {0xA3},
745    .umask = 0x10,
746    .cmask = 16,
747    .event_name = "cycle_activity.cycles_mem_any",
748    },
749   {
750    .event_code = {0xA3},
751    .umask = 0x14,
752    .cmask = 20,
753    .event_name = "cycle_activity.stalls_mem_any",
754    },
755   {
756    .event_code = {0xA6},
757    .umask = 0x01,
758    .event_name = "exe_activity.exe_bound_0_ports",
759    },
760   {
761    .event_code = {0xA6},
762    .umask = 0x02,
763    .event_name = "exe_activity.1_ports_util",
764    },
765   {
766    .event_code = {0xA6},
767    .umask = 0x04,
768    .event_name = "exe_activity.2_ports_util",
769    },
770   {
771    .event_code = {0xA6},
772    .umask = 0x08,
773    .event_name = "exe_activity.3_ports_util",
774    },
775   {
776    .event_code = {0xA6},
777    .umask = 0x10,
778    .event_name = "exe_activity.4_ports_util",
779    },
780   {
781    .event_code = {0xA6},
782    .umask = 0x40,
783    .event_name = "exe_activity.bound_on_stores",
784    },
785   {
786    .event_code = {0xA8},
787    .umask = 0x01,
788    .event_name = "lsd.uops",
789    },
790   {
791    .event_code = {0xA8},
792    .umask = 0x01,
793    .cmask = 4,
794    .event_name = "lsd.cycles_4_uops",
795    },
796   {
797    .event_code = {0xA8},
798    .umask = 0x01,
799    .cmask = 1,
800    .event_name = "lsd.cycles_active",
801    },
802   {
803    .event_code = {0xAB},
804    .umask = 0x02,
805    .event_name = "dsb2mite_switches.penalty_cycles",
806    },
807   {
808    .event_code = {0xAE},
809    .umask = 0x01,
810    .event_name = "itlb.itlb_flush",
811    },
812   {
813    .event_code = {0xB0},
814    .umask = 0x01,
815    .event_name = "offcore_requests.demand_data_rd",
816    },
817   {
818    .event_code = {0xB0},
819    .umask = 0x02,
820    .event_name = "offcore_requests.demand_code_rd",
821    },
822   {
823    .event_code = {0xB0},
824    .umask = 0x04,
825    .event_name = "offcore_requests.demand_rfo",
826    },
827   {
828    .event_code = {0xB0},
829    .umask = 0x08,
830    .event_name = "offcore_requests.all_data_rd",
831    },
832   {
833    .event_code = {0xB0},
834    .umask = 0x10,
835    .event_name = "offcore_requests.l3_miss_demand_data_rd",
836    },
837   {
838    .event_code = {0xB0},
839    .umask = 0x80,
840    .event_name = "offcore_requests.all_requests",
841    },
842   {
843    .event_code = {0xB1},
844    .umask = 0x01,
845    .cmask = 4,
846    .event_name = "uops_executed.cycles_ge_4_uops_exec",
847    },
848   {
849    .event_code = {0xB1},
850    .umask = 0x01,
851    .cmask = 3,
852    .event_name = "uops_executed.cycles_ge_3_uops_exec",
853    },
854   {
855    .event_code = {0xB1},
856    .umask = 0x01,
857    .cmask = 2,
858    .event_name = "uops_executed.cycles_ge_2_uops_exec",
859    },
860   {
861    .event_code = {0xB1},
862    .umask = 0x01,
863    .cmask = 1,
864    .event_name = "uops_executed.cycles_ge_1_uop_exec",
865    },
866   {
867    .event_code = {0xB1},
868    .umask = 0x01,
869    .cmask = 1,
870    .inv = 1,
871    .event_name = "uops_executed.stall_cycles",
872    },
873   {
874    .event_code = {0xB1},
875    .umask = 0x01,
876    .event_name = "uops_executed.thread",
877    },
878   {
879    .event_code = {0xB1},
880    .umask = 0x02,
881    .event_name = "uops_executed.core",
882    },
883   {
884    .event_code = {0xB1},
885    .umask = 0x02,
886    .cmask = 1,
887    .inv = 1,
888    .event_name = "uops_executed.core_cycles_none",
889    },
890   {
891    .event_code = {0xB1},
892    .umask = 0x02,
893    .cmask = 4,
894    .event_name = "uops_executed.core_cycles_ge_4",
895    },
896   {
897    .event_code = {0xB1},
898    .umask = 0x02,
899    .cmask = 3,
900    .event_name = "uops_executed.core_cycles_ge_3",
901    },
902   {
903    .event_code = {0xB1},
904    .umask = 0x02,
905    .cmask = 2,
906    .event_name = "uops_executed.core_cycles_ge_2",
907    },
908   {
909    .event_code = {0xB1},
910    .umask = 0x02,
911    .cmask = 1,
912    .event_name = "uops_executed.core_cycles_ge_1",
913    },
914   {
915    .event_code = {0xB1},
916    .umask = 0x10,
917    .event_name = "uops_executed.x87",
918    },
919   {
920    .event_code = {0xB2},
921    .umask = 0x01,
922    .event_name = "offcore_requests_buffer.sq_full",
923    },
924   {
925    .event_code = {0xB7, 0xBB},
926    .umask = 0x01,
927    .event_name = "offcore_response",
928    },
929   {
930    .event_code = {0xBD},
931    .umask = 0x01,
932    .event_name = "tlb_flush.dtlb_thread",
933    },
934   {
935    .event_code = {0xBD},
936    .umask = 0x20,
937    .event_name = "tlb_flush.stlb_any",
938    },
939   {
940    .event_code = {0xC0},
941    .umask = 0x00,
942    .event_name = "inst_retired.any_p",
943    },
944   {
945    .event_code = {0xC0},
946    .umask = 0x01,
947    .event_name = "inst_retired.prec_dist",
948    },
949   {
950    .event_code = {0xC0},
951    .umask = 0x01,
952    .cmask = 10,
953    .event_name = "inst_retired.total_cycles_ps",
954    },
955   {
956    .event_code = {0xC2},
957    .umask = 0x02,
958    .cmask = 10,
959    .inv = 1,
960    .event_name = "uops_retired.total_cycles",
961    },
962   {
963    .event_code = {0xC2},
964    .umask = 0x02,
965    .cmask = 1,
966    .inv = 1,
967    .event_name = "uops_retired.stall_cycles",
968    },
969   {
970    .event_code = {0xC2},
971    .umask = 0x02,
972    .event_name = "uops_retired.retire_slots",
973    },
974   {
975    .event_code = {0xC3},
976    .umask = 0x01,
977    .cmask = 1,
978    .edge = 1,
979    .event_name = "machine_clears.count",
980    },
981   {
982    .event_code = {0xC3},
983    .umask = 0x02,
984    .event_name = "machine_clears.memory_ordering",
985    },
986   {
987    .event_code = {0xC3},
988    .umask = 0x04,
989    .event_name = "machine_clears.smc",
990    },
991   {
992    .event_code = {0xC4},
993    .umask = 0x00,
994    .event_name = "br_inst_retired.all_branches",
995    },
996   {
997    .event_code = {0xC4},
998    .umask = 0x01,
999    .event_name = "br_inst_retired.conditional",
1000    },
1001   {
1002    .event_code = {0xC4},
1003    .umask = 0x02,
1004    .event_name = "br_inst_retired.near_call",
1005    },
1006   {
1007    .event_code = {0xC4},
1008    .umask = 0x04,
1009    .event_name = "br_inst_retired.all_branches_pebs",
1010    },
1011   {
1012    .event_code = {0xC4},
1013    .umask = 0x08,
1014    .event_name = "br_inst_retired.near_return",
1015    },
1016   {
1017    .event_code = {0xC4},
1018    .umask = 0x10,
1019    .event_name = "br_inst_retired.not_taken",
1020    },
1021   {
1022    .event_code = {0xC4},
1023    .umask = 0x20,
1024    .event_name = "br_inst_retired.near_taken",
1025    },
1026   {
1027    .event_code = {0xC4},
1028    .umask = 0x40,
1029    .event_name = "br_inst_retired.far_branch",
1030    },
1031   {
1032    .event_code = {0xC5},
1033    .umask = 0x00,
1034    .event_name = "br_misp_retired.all_branches",
1035    },
1036   {
1037    .event_code = {0xC5},
1038    .umask = 0x01,
1039    .event_name = "br_misp_retired.conditional",
1040    },
1041   {
1042    .event_code = {0xC5},
1043    .umask = 0x02,
1044    .event_name = "br_misp_retired.near_call",
1045    },
1046   {
1047    .event_code = {0xC5},
1048    .umask = 0x04,
1049    .event_name = "br_misp_retired.all_branches_pebs",
1050    },
1051   {
1052    .event_code = {0xC5},
1053    .umask = 0x20,
1054    .event_name = "br_misp_retired.near_taken",
1055    },
1056   {
1057    .event_code = {0xC7},
1058    .umask = 0x01,
1059    .event_name = "fp_arith_inst_retired.scalar_double",
1060    },
1061   {
1062    .event_code = {0xC7},
1063    .umask = 0x02,
1064    .event_name = "fp_arith_inst_retired.scalar_single",
1065    },
1066   {
1067    .event_code = {0xC7},
1068    .umask = 0x04,
1069    .event_name = "fp_arith_inst_retired.128b_packed_double",
1070    },
1071   {
1072    .event_code = {0xC7},
1073    .umask = 0x08,
1074    .event_name = "fp_arith_inst_retired.128b_packed_single",
1075    },
1076   {
1077    .event_code = {0xC7},
1078    .umask = 0x10,
1079    .event_name = "fp_arith_inst_retired.256b_packed_double",
1080    },
1081   {
1082    .event_code = {0xC7},
1083    .umask = 0x20,
1084    .event_name = "fp_arith_inst_retired.256b_packed_single",
1085    },
1086   {
1087    .event_code = {0xC7},
1088    .umask = 0x40,
1089    .event_name = "fp_arith_inst_retired.512b_packed_double",
1090    },
1091   {
1092    .event_code = {0xC7},
1093    .umask = 0x80,
1094    .event_name = "fp_arith_inst_retired.512b_packed_single",
1095    },
1096   {
1097    .event_code = {0xC8},
1098    .umask = 0x01,
1099    .event_name = "hle_retired.start",
1100    },
1101   {
1102    .event_code = {0xC8},
1103    .umask = 0x02,
1104    .event_name = "hle_retired.commit",
1105    },
1106   {
1107    .event_code = {0xC8},
1108    .umask = 0x04,
1109    .event_name = "hle_retired.aborted",
1110    },
1111   {
1112    .event_code = {0xC8},
1113    .umask = 0x08,
1114    .event_name = "hle_retired.aborted_mem",
1115    },
1116   {
1117    .event_code = {0xC8},
1118    .umask = 0x10,
1119    .event_name = "hle_retired.aborted_timer",
1120    },
1121   {
1122    .event_code = {0xC8},
1123    .umask = 0x20,
1124    .event_name = "hle_retired.aborted_unfriendly",
1125    },
1126   {
1127    .event_code = {0xC8},
1128    .umask = 0x40,
1129    .event_name = "hle_retired.aborted_memtype",
1130    },
1131   {
1132    .event_code = {0xC8},
1133    .umask = 0x80,
1134    .event_name = "hle_retired.aborted_events",
1135    },
1136   {
1137    .event_code = {0xC9},
1138    .umask = 0x01,
1139    .event_name = "rtm_retired.start",
1140    },
1141   {
1142    .event_code = {0xC9},
1143    .umask = 0x02,
1144    .event_name = "rtm_retired.commit",
1145    },
1146   {
1147    .event_code = {0xC9},
1148    .umask = 0x04,
1149    .event_name = "rtm_retired.aborted",
1150    },
1151   {
1152    .event_code = {0xC9},
1153    .umask = 0x08,
1154    .event_name = "rtm_retired.aborted_mem",
1155    },
1156   {
1157    .event_code = {0xC9},
1158    .umask = 0x10,
1159    .event_name = "rtm_retired.aborted_timer",
1160    },
1161   {
1162    .event_code = {0xC9},
1163    .umask = 0x20,
1164    .event_name = "rtm_retired.aborted_unfriendly",
1165    },
1166   {
1167    .event_code = {0xC9},
1168    .umask = 0x40,
1169    .event_name = "rtm_retired.aborted_memtype",
1170    },
1171   {
1172    .event_code = {0xC9},
1173    .umask = 0x80,
1174    .event_name = "rtm_retired.aborted_events",
1175    },
1176   {
1177    .event_code = {0xCA},
1178    .umask = 0x1E,
1179    .cmask = 1,
1180    .event_name = "fp_assist.any",
1181    },
1182   {
1183    .event_code = {0xCB},
1184    .umask = 0x01,
1185    .event_name = "hw_interrupts.received",
1186    },
1187   {
1188    .event_code = {0xCC},
1189    .umask = 0x20,
1190    .event_name = "rob_misc_events.lbr_inserts",
1191    },
1192   {
1193    .event_code = {0xCC},
1194    .umask = 0x40,
1195    .event_name = "rob_misc_events.pause_inst",
1196    },
1197   {
1198    .event_code = {0xD0},
1199    .umask = 0x11,
1200    .event_name = "mem_inst_retired.stlb_miss_loads",
1201    },
1202   {
1203    .event_code = {0xD0},
1204    .umask = 0x12,
1205    .event_name = "mem_inst_retired.stlb_miss_stores",
1206    },
1207   {
1208    .event_code = {0xD0},
1209    .umask = 0x21,
1210    .event_name = "mem_inst_retired.lock_loads",
1211    },
1212   {
1213    .event_code = {0xD0},
1214    .umask = 0x41,
1215    .event_name = "mem_inst_retired.split_loads",
1216    },
1217   {
1218    .event_code = {0xD0},
1219    .umask = 0x42,
1220    .event_name = "mem_inst_retired.split_stores",
1221    },
1222   {
1223    .event_code = {0xD0},
1224    .umask = 0x81,
1225    .event_name = "mem_inst_retired.all_loads",
1226    },
1227   {
1228    .event_code = {0xD0},
1229    .umask = 0x82,
1230    .event_name = "mem_inst_retired.all_stores",
1231    },
1232   {
1233    .event_code = {0xD1},
1234    .umask = 0x01,
1235    .event_name = "mem_load_retired.l1_hit",
1236    },
1237   {
1238    .event_code = {0xD1},
1239    .umask = 0x02,
1240    .event_name = "mem_load_retired.l2_hit",
1241    },
1242   {
1243    .event_code = {0xD1},
1244    .umask = 0x04,
1245    .event_name = "mem_load_retired.l3_hit",
1246    },
1247   {
1248    .event_code = {0xD1},
1249    .umask = 0x08,
1250    .event_name = "mem_load_retired.l1_miss",
1251    },
1252   {
1253    .event_code = {0xD1},
1254    .umask = 0x10,
1255    .event_name = "mem_load_retired.l2_miss",
1256    },
1257   {
1258    .event_code = {0xD1},
1259    .umask = 0x20,
1260    .event_name = "mem_load_retired.l3_miss",
1261    },
1262   {
1263    .event_code = {0xD1},
1264    .umask = 0x40,
1265    .event_name = "mem_load_retired.fb_hit",
1266    },
1267   {
1268    .event_code = {0xD2},
1269    .umask = 0x01,
1270    .event_name = "mem_load_l3_hit_retired.xsnp_miss",
1271    },
1272   {
1273    .event_code = {0xD2},
1274    .umask = 0x02,
1275    .event_name = "mem_load_l3_hit_retired.xsnp_hit",
1276    },
1277   {
1278    .event_code = {0xD2},
1279    .umask = 0x04,
1280    .event_name = "mem_load_l3_hit_retired.xsnp_hitm",
1281    },
1282   {
1283    .event_code = {0xD2},
1284    .umask = 0x08,
1285    .event_name = "mem_load_l3_hit_retired.xsnp_none",
1286    },
1287   {
1288    .event_code = {0xD3},
1289    .umask = 0x01,
1290    .event_name = "mem_load_l3_miss_retired.local_dram",
1291    },
1292   {
1293    .event_code = {0xD3},
1294    .umask = 0x02,
1295    .event_name = "mem_load_l3_miss_retired.remote_dram",
1296    },
1297   {
1298    .event_code = {0xD3},
1299    .umask = 0x04,
1300    .event_name = "mem_load_l3_miss_retired.remote_hitm",
1301    },
1302   {
1303    .event_code = {0xD3},
1304    .umask = 0x08,
1305    .event_name = "mem_load_l3_miss_retired.remote_fwd",
1306    },
1307   {
1308    .event_code = {0xD4},
1309    .umask = 0x04,
1310    .event_name = "mem_load_misc_retired.uc",
1311    },
1312   {
1313    .event_code = {0xE6},
1314    .umask = 0x01,
1315    .event_name = "baclears.any",
1316    },
1317   {
1318    .event_code = {0xEF},
1319    .umask = 0x01,
1320    .event_name = "core_snoop_response.rsp_ihiti",
1321    },
1322   {
1323    .event_code = {0xEF},
1324    .umask = 0x02,
1325    .event_name = "core_snoop_response.rsp_ihitfse",
1326    },
1327   {
1328    .event_code = {0xEF},
1329    .umask = 0x04,
1330    .event_name = "core_snoop_response.rsp_shitfse",
1331    },
1332   {
1333    .event_code = {0xEF},
1334    .umask = 0x08,
1335    .event_name = "core_snoop_response.rsp_sfwdm",
1336    },
1337   {
1338    .event_code = {0xEF},
1339    .umask = 0x10,
1340    .event_name = "core_snoop_response.rsp_ifwdm",
1341    },
1342   {
1343    .event_code = {0xEF},
1344    .umask = 0x20,
1345    .event_name = "core_snoop_response.rsp_ifwdfe",
1346    },
1347   {
1348    .event_code = {0xEF},
1349    .umask = 0x40,
1350    .event_name = "core_snoop_response.rsp_sfwdfe",
1351    },
1352   {
1353    .event_code = {0xF0},
1354    .umask = 0x40,
1355    .event_name = "l2_trans.l2_wb",
1356    },
1357   {
1358    .event_code = {0xF1},
1359    .umask = 0x1F,
1360    .event_name = "l2_lines_in.all",
1361    },
1362   {
1363    .event_code = {0xF2},
1364    .umask = 0x01,
1365    .event_name = "l2_lines_out.silent",
1366    },
1367   {
1368    .event_code = {0xF2},
1369    .umask = 0x02,
1370    .event_name = "l2_lines_out.non_silent",
1371    },
1372   {
1373    .event_code = {0xF2},
1374    .umask = 0x04,
1375    .event_name = "l2_lines_out.useless_pref",
1376    },
1377   {
1378    .event_code = {0xF2},
1379    .umask = 0x04,
1380    .event_name = "l2_lines_out.useless_hwpf",
1381    },
1382   {
1383    .event_code = {0xF4},
1384    .umask = 0x10,
1385    .event_name = "sq_misc.split_lock",
1386    },
1387   {
1388    .event_code = {0xFE},
1389    .umask = 0x02,
1390    .event_name = "idi_misc.wb_upgrade",
1391    },
1392   {
1393    .event_code = {0xFE},
1394    .umask = 0x04,
1395    .event_name = "idi_misc.wb_downgrade",
1396    },
1397   {
1398    .event_code = {0xB7, 0xBB},
1399    .umask = 0x01,
1400    .event_name = "offcore_response.demand_data_rd.l3_hit.snoop_hit_with_fwd",
1401    },
1402   {
1403    .event_code = {0xB7, 0xBB},
1404    .umask = 0x01,
1405    .event_name = "offcore_response.demand_rfo.l3_hit.snoop_hit_with_fwd",
1406    },
1407   {
1408    .event_code = {0xB7, 0xBB},
1409    .umask = 0x01,
1410    .event_name = "offcore_response.demand_code_rd.l3_hit.snoop_hit_with_fwd",
1411    },
1412   {
1413    .event_code = {0xB7, 0xBB},
1414    .umask = 0x01,
1415    .event_name = "offcore_response.pf_l2_data_rd.l3_hit.snoop_hit_with_fwd",
1416    },
1417   {
1418    .event_code = {0xB7, 0xBB},
1419    .umask = 0x01,
1420    .event_name = "offcore_response.pf_l2_rfo.l3_hit.snoop_hit_with_fwd",
1421    },
1422   {
1423    .event_code = {0xB7, 0xBB},
1424    .umask = 0x01,
1425    .event_name = "offcore_response.pf_l3_data_rd.l3_hit.snoop_hit_with_fwd",
1426    },
1427   {
1428    .event_code = {0xB7, 0xBB},
1429    .umask = 0x01,
1430    .event_name = "offcore_response.pf_l3_rfo.l3_hit.snoop_hit_with_fwd",
1431    },
1432   {
1433    .event_code = {0xB7, 0xBB},
1434    .umask = 0x01,
1435    .event_name = "offcore_response.pf_l1d_and_sw.l3_hit.snoop_hit_with_fwd",
1436    },
1437   {
1438    .event_code = {0xB7, 0xBB},
1439    .umask = 0x01,
1440    .event_name = "offcore_response.all_pf_data_rd.l3_hit.snoop_hit_with_fwd",
1441    },
1442   {
1443    .event_code = {0xB7, 0xBB},
1444    .umask = 0x01,
1445    .event_name = "offcore_response.all_pf_rfo.l3_hit.snoop_hit_with_fwd",
1446    },
1447   {
1448    .event_code = {0xB7, 0xBB},
1449    .umask = 0x01,
1450    .event_name = "offcore_response.all_data_rd.l3_hit.snoop_hit_with_fwd",
1451    },
1452   {
1453    .event_code = {0xB7, 0xBB},
1454    .umask = 0x01,
1455    .event_name = "offcore_response.all_rfo.l3_hit.snoop_hit_with_fwd",
1456    },
1457   {
1458    .event_name = 0,
1459    },
1460 };
1461
1462 PERFMON_REGISTER_INTEL_PMC (cpu_model_table, event_table);
1463