25#define I386_P6_MESI_UMASKS \
26 .pme_flags = PFMLIB_I386_P6_UMASK_COMBO, \
30 .pme_udesc = "invalid state", \
34 .pme_udesc = "shared state", \
38 .pme_udesc = "exclusive state", \
42 .pme_udesc = "modified state", \
46#define I386_PM_MESI_PREFETCH_UMASKS \
47 .pme_flags = PFMLIB_I386_P6_UMASK_COMBO, \
51 .pme_udesc = "invalid state", \
55 .pme_udesc = "shared state", \
59 .pme_udesc = "exclusive state", \
63 .pme_udesc = "modified state", \
66 { .pme_uname = "EXCL_HW_PREFETCH", \
67 .pme_udesc = "exclude hardware prefetched lines", \
70 { .pme_uname = "ONLY_HW_PREFETCH", \
71 .pme_udesc = "only hardware prefetched lines", \
72 .pme_ucode = 0x1 << 4 \
74 { .pme_uname = "NON_HW_PREFETCH", \
75 .pme_udesc = "non hardware prefetched lines", \
76 .pme_ucode = 0x2 << 4 \
80#define I386_P6_PII_ONLY_PME \
81 {.pme_name = "MMX_INSTR_EXEC",\
83 .pme_desc = "Number of MMX instructions executed"\
85 {.pme_name = "MMX_INSTR_RET",\
87 .pme_desc = "Number of MMX instructions retired"\
90#define I386_P6_PII_PIII_PME \
91 {.pme_name = "MMX_SAT_INSTR_EXEC",\
93 .pme_desc = "Number of MMX saturating instructions executed"\
95 {.pme_name = "MMX_UOPS_EXEC",\
97 .pme_desc = "Number of MMX micro-ops executed"\
99 {.pme_name = "MMX_INSTR_TYPE_EXEC",\
101 .pme_desc = "Number of MMX instructions executed by type",\
102 .pme_flags = PFMLIB_I386_P6_UMASK_COMBO, \
105 { .pme_uname = "MUL", \
106 .pme_udesc = "MMX packed multiply instructions executed", \
109 { .pme_uname = "SHIFT", \
110 .pme_udesc = "MMX packed shift instructions executed", \
113 { .pme_uname = "PACK", \
114 .pme_udesc = "MMX pack operation instructions executed", \
117 { .pme_uname = "UNPACK", \
118 .pme_udesc = "MMX unpack operation instructions executed", \
121 { .pme_uname = "LOGICAL", \
122 .pme_udesc = "MMX packed logical instructions executed", \
125 { .pme_uname = "ARITH", \
126 .pme_udesc = "MMX packed arithmetic instructions executed", \
131 {.pme_name = "FP_MMX_TRANS",\
133 .pme_desc = "Number of MMX transitions",\
136 { .pme_uname = "TO_FP", \
137 .pme_udesc = "from MMX instructions to floating-point instructions", \
140 { .pme_uname = "TO_MMX", \
141 .pme_udesc = "from floating-point instructions to MMX instructions", \
146 {.pme_name = "MMX_ASSIST",\
148 .pme_desc = "Number of MMX micro-ops executed"\
150 {.pme_name = "SEG_RENAME_STALLS",\
152 .pme_desc = "Number of Segment Register Renaming Stalls", \
153 .pme_flags = PFMLIB_I386_P6_UMASK_COMBO, \
156 { .pme_uname = "ES", \
157 .pme_udesc = "Segment register ES", \
160 { .pme_uname = "DS", \
161 .pme_udesc = "Segment register DS", \
164 { .pme_uname = "FS", \
165 .pme_udesc = "Segment register FS", \
168 { .pme_uname = "GS", \
169 .pme_udesc = "Segment register GS", \
174 {.pme_name = "SEG_REG_RENAMES",\
176 .pme_desc = "Number of Segment Register Renames", \
177 .pme_flags = PFMLIB_I386_P6_UMASK_COMBO, \
180 { .pme_uname = "ES", \
181 .pme_udesc = "Segment register ES", \
184 { .pme_uname = "DS", \
185 .pme_udesc = "Segment register DS", \
188 { .pme_uname = "FS", \
189 .pme_udesc = "Segment register FS", \
192 { .pme_uname = "GS", \
193 .pme_udesc = "Segment register GS", \
198 {.pme_name = "RET_SEG_RENAMES",\
200 .pme_desc = "Number of segment register rename events retired"\
203#define I386_P6_PIII_PME \
204 {.pme_name = "EMON_KNI_PREF_DISPATCHED",\
206 .pme_desc = "Number of Streaming SIMD extensions prefetch/weakly-ordered instructions dispatched " \
207 "(speculative prefetches are included in counting). Pentium III and later",\
210 { .pme_uname = "NTA", \
211 .pme_udesc = "prefetch NTA", \
214 { .pme_uname = "T1", \
215 .pme_udesc = "prefetch T1", \
218 { .pme_uname = "T2", \
219 .pme_udesc = "prefetch T2", \
222 { .pme_uname = "WEAK", \
223 .pme_udesc = "weakly ordered stores", \
228 {.pme_name = "EMON_KNI_PREF_MISS",\
230 .pme_desc = "Number of prefetch/weakly-ordered instructions that miss all caches. Pentium III and later",\
233 { .pme_uname = "NTA", \
234 .pme_udesc = "prefetch NTA", \
237 { .pme_uname = "T1", \
238 .pme_udesc = "prefetch T1", \
241 { .pme_uname = "T2", \
242 .pme_udesc = "prefetch T2", \
245 { .pme_uname = "WEAK", \
246 .pme_udesc = "weakly ordered stores", \
253#define I386_P6_CPU_CLK_UNHALTED \
254 {.pme_name = "CPU_CLK_UNHALTED",\
256 .pme_desc = "Number cycles during which the processor is not halted"\
260#define I386_P6_NOT_PM_PME \
261 {.pme_name = "L2_LD",\
263 .pme_desc = "Number of L2 data loads. This event indicates that a normal, unlocked, load memory access "\
264 "was received by the L2. It includes only L2 cacheable memory accesses; it does not include I/O "\
265 "accesses, other non-memory accesses, or memory accesses such as UC/WT memory accesses. It does include "\
266 "L2 cacheable TLB miss memory accesses",\
269 {.pme_name = "L2_LINES_IN",\
271 .pme_desc = "Number of lines allocated in the L2"\
273 {.pme_name = "L2_LINES_OUT",\
275 .pme_desc = "Number of lines removed from the L2 for any reason"\
277 {.pme_name = "L2_M_LINES_OUTM",\
279 .pme_desc = "Number of modified lines removed from the L2 for any reason"\
283#define I386_P6_PIII_NOT_PM_PME \
284 {.pme_name = "EMON_KNI_INST_RETIRED",\
286 .pme_desc = "Number of SSE instructions retired. Pentium III and later",\
289 { .pme_uname = "PACKED_SCALAR", \
290 .pme_udesc = "packed and scalar instructions", \
293 { .pme_uname = "SCALAR", \
294 .pme_udesc = "scalar only", \
299 {.pme_name = "EMON_KNI_COMP_INST_RET",\
301 .pme_desc = "Number of SSE computation instructions retired. Pentium III and later",\
304 { .pme_uname = "PACKED_SCALAR", \
305 .pme_udesc = "packed and scalar instructions", \
308 { .pme_uname = "SCALAR", \
309 .pme_udesc = "scalar only", \
317#define I386_P6_COMMON_PME \
318 {.pme_name = "INST_RETIRED",\
320 .pme_desc = "Number of instructions retired"\
322 {.pme_name = "DATA_MEM_REFS",\
324 .pme_desc = "All loads from any memory type. All stores to any memory type"\
325 "Each part of a split is counted separately. The internal logic counts not only memory loads and stores"\
326 " but also internal retries. 80-bit floating point accesses are double counted, since they are decomposed"\
327 " into a 16-bit exponent load and a 64-bit mantissa load. Memory accesses are only counted when they are "\
328 " actually performed (such as a load that gets squashed because a previous cache miss is outstanding to the"\
329 " same address, and which finally gets performe, is only counted once). Does ot include I/O accesses or other"\
330 " non-memory accesses"\
332 {.pme_name = "DCU_LINES_IN",\
334 .pme_desc = "Total lines allocated in the DCU"\
336 {.pme_name = "DCU_M_LINES_IN",\
338 .pme_desc = "Number of M state lines allocated in the DCU"\
340 {.pme_name = "DCU_M_LINES_OUT",\
342 .pme_desc = "Number of M state lines evicted from the DCU. This includes evictions via snoop HITM, intervention"\
345 {.pme_name = "DCU_MISS_OUTSTANDING",\
347 .pme_desc = "Weighted number of cycle while a DCU miss is outstanding, incremented by the number of cache misses"\
348 " at any particular time. Cacheable read requests only are considered. Uncacheable requests are excluded"\
349 " Read-for-ownerships are counted, as well as line fills, invalidates, and stores"\
351 {.pme_name = "IFU_IFETCH",\
353 .pme_desc = "Number of instruction fetches, both cacheable and noncacheable including UC fetches"\
355 {.pme_name = "IFU_IFETCH_MISS",\
357 .pme_desc = "Number of instruction fetch misses. All instructions fetches that do not hit the IFU (i.e., that"\
358 " produce memory requests). Includes UC accesses"\
360 {.pme_name = "ITLB_MISS",\
362 .pme_desc = "Number of ITLB misses"\
364 {.pme_name = "IFU_MEM_STALL",\
366 .pme_desc = "Number of cycles instruction fetch is stalled for any reason. Includs IFU cache misses, ITLB misses,"\
367 " ITLB faults, and other minor stalls"\
369 {.pme_name = "ILD_STALL",\
371 .pme_desc = "Number of cycles that the instruction length decoder is stalled"\
373 {.pme_name = "L2_IFETCH",\
375 .pme_desc = "Number of L2 instruction fetches. This event indicates that a normal instruction fetch was received by"\
376 " the L2. The count includes only L2 cacheable instruction fetches: it does not include UC instruction fetches"\
377 " It does not include ITLB miss accesses",\
378 I386_P6_MESI_UMASKS \
380 {.pme_name = "L2_ST",\
382 .pme_desc = "Number of L2 data stores. This event indicates that a normal, unlocked, store memory access "\
383 "was received by the L2. Specifically, it indictes that the DCU sent a read-for ownership request to " \
384 "the L2. It also includes Invalid to Modified reqyests sent by the DCU to the L2. " \
385 "It includes only L2 cacheable memory accesses; it does not include I/O " \
386 "accesses, other non-memory accesses, or memory accesses such as UC/WT memory accesses. It does include " \
387 "L2 cacheable TLB miss memory accesses", \
388 I386_P6_MESI_UMASKS \
390 {.pme_name = "L2_M_LINES_INM",\
392 .pme_desc = "Number of modified lines allocated in the L2"\
394 {.pme_name = "L2_RQSTS",\
396 .pme_desc = "Total number of L2 requests",\
397 I386_P6_MESI_UMASKS \
399 {.pme_name = "L2_ADS",\
401 .pme_desc = "Number of L2 address strobes"\
403 {.pme_name = "L2_DBUS_BUSY",\
405 .pme_desc = "Number of cycles during which the L2 cache data bus was busy"\
407 {.pme_name = "L2_DBUS_BUSY_RD",\
409 .pme_desc = "Number of cycles during which the data bus was busy transferring read data from L2 to the processor"\
411 {.pme_name = "BUS_DRDY_CLOCKS",\
413 .pme_desc = "Number of clocks during which DRDY# is asserted. " \
414 "Utilization of the external system data bus during data transfers", \
417 { .pme_uname = "SELF", \
418 .pme_udesc = "clocks when processor is driving bus", \
421 { .pme_uname = "ANY", \
422 .pme_udesc = "clocks when any agent is driving bus", \
427 {.pme_name = "BUS_LOCK_CLOCKS",\
429 .pme_desc = "Number of clocks during which LOCK# is asserted on the external system bus", \
432 { .pme_uname = "SELF", \
433 .pme_udesc = "clocks when processor is driving bus", \
436 { .pme_uname = "ANY", \
437 .pme_udesc = "clocks when any agent is driving bus", \
442 {.pme_name = "BUS_REQ_OUTSTANDING",\
444 .pme_desc = "Number of bus requests outstanding. This counter is incremented " \
445 "by the number of cacheable read bus requests outstanding in any given cycle", \
447 {.pme_name = "BUS_TRANS_BRD",\
449 .pme_desc = "Number of burst read transactions", \
452 { .pme_uname = "SELF", \
453 .pme_udesc = "clocks when processor is driving bus", \
456 { .pme_uname = "ANY", \
457 .pme_udesc = "clocks when any agent is driving bus", \
462 {.pme_name = "BUS_TRANS_RFO",\
464 .pme_desc = "Number of completed read for ownership transactions",\
467 { .pme_uname = "SELF", \
468 .pme_udesc = "clocks when processor is driving bus", \
471 { .pme_uname = "ANY", \
472 .pme_udesc = "clocks when any agent is driving bus", \
477 {.pme_name = "BUS_TRANS_WB",\
479 .pme_desc = "Number of completed write back transactions",\
482 { .pme_uname = "SELF", \
483 .pme_udesc = "clocks when processor is driving bus", \
486 { .pme_uname = "ANY", \
487 .pme_udesc = "clocks when any agent is driving bus", \
492 {.pme_name = "BUS_TRAN_IFETCH",\
494 .pme_desc = "Number of completed instruction fetch transactions",\
497 { .pme_uname = "SELF", \
498 .pme_udesc = "clocks when processor is driving bus", \
501 { .pme_uname = "ANY", \
502 .pme_udesc = "clocks when any agent is driving bus", \
507 {.pme_name = "BUS_TRAN_INVAL",\
509 .pme_desc = "Number of completed invalidate transactions",\
512 { .pme_uname = "SELF", \
513 .pme_udesc = "clocks when processor is driving bus", \
516 { .pme_uname = "ANY", \
517 .pme_udesc = "clocks when any agent is driving bus", \
522 {.pme_name = "BUS_TRAN_PWR",\
524 .pme_desc = "Number of completed partial write transactions",\
527 { .pme_uname = "SELF", \
528 .pme_udesc = "clocks when processor is driving bus", \
531 { .pme_uname = "ANY", \
532 .pme_udesc = "clocks when any agent is driving bus", \
537 {.pme_name = "BUS_TRANS_P",\
539 .pme_desc = "Number of completed partial transactions",\
542 { .pme_uname = "SELF", \
543 .pme_udesc = "clocks when processor is driving bus", \
546 { .pme_uname = "ANY", \
547 .pme_udesc = "clocks when any agent is driving bus", \
552 {.pme_name = "BUS_TRANS_IO",\
554 .pme_desc = "Number of completed I/O transactions",\
557 { .pme_uname = "SELF", \
558 .pme_udesc = "clocks when processor is driving bus", \
561 { .pme_uname = "ANY", \
562 .pme_udesc = "clocks when any agent is driving bus", \
567 {.pme_name = "BUS_TRAN_DEF",\
569 .pme_desc = "Number of completed deferred transactions",\
572 { .pme_uname = "SELF", \
573 .pme_udesc = "clocks when processor is driving bus", \
576 { .pme_uname = "ANY", \
577 .pme_udesc = "clocks when any agent is driving bus", \
582 {.pme_name = "BUS_TRAN_BURST",\
584 .pme_desc = "Number of completed burst transactions",\
587 { .pme_uname = "SELF", \
588 .pme_udesc = "clocks when processor is driving bus", \
591 { .pme_uname = "ANY", \
592 .pme_udesc = "clocks when any agent is driving bus", \
597 {.pme_name = "BUS_TRAN_ANY",\
599 .pme_desc = "Number of all completed bus transactions. Address bus utilization " \
600 "can be calculated knowing the minimum address bus occupancy. Includes special cycles, etc.",\
603 { .pme_uname = "SELF", \
604 .pme_udesc = "clocks when processor is driving bus", \
607 { .pme_uname = "ANY", \
608 .pme_udesc = "clocks when any agent is driving bus", \
613 {.pme_name = "BUS_TRAN_MEM",\
615 .pme_desc = "Number of completed memory transactions",\
618 { .pme_uname = "SELF", \
619 .pme_udesc = "clocks when processor is driving bus", \
622 { .pme_uname = "ANY", \
623 .pme_udesc = "clocks when any agent is driving bus", \
628 {.pme_name = "BUS_DATA_RECV",\
630 .pme_desc = "Number of bus clock cycles during which this processor is receiving data"\
632 {.pme_name = "BUS_BNR_DRV",\
634 .pme_desc = "Number of bus clock cycles during which this processor is driving the BNR# pin"\
636 {.pme_name = "BUS_HIT_DRV",\
638 .pme_desc = "Number of bus clock cycles during which this processor is driving the HIT# pin"\
640 {.pme_name = "BUS_HITM_DRV",\
642 .pme_desc = "Number of bus clock cycles during which this processor is driving the HITM# pin"\
644 {.pme_name = "BUS_SNOOP_STALL",\
646 .pme_desc = "Number of clock cycles during which the bus is snoop stalled"\
648 {.pme_name = "FLOPS",\
650 .pme_desc = "Number of computational floating-point operations retired. " \
651 "Excludes floating-point computational operations that cause traps or assists. " \
652 "Includes internal sub-operations for complex floating-point instructions like transcendentals. " \
653 "Excludes floating point loads and stores", \
654 .pme_flags = PFMLIB_I386_P6_CTR0_ONLY \
656 {.pme_name = "FP_COMP_OPS_EXE",\
658 .pme_desc = "Number of computational floating-point operations executed. The number of FADD, FSUB, " \
659 "FCOM, FMULs, integer MULs and IMULs, FDIVs, FPREMs, FSQRTS, integer DIVs, and IDIVs. " \
660 "This number does not include the number of cycles, but the number of operations. " \
661 "This event does not distinguish an FADD used in the middle of a transcendental flow " \
662 "from a separate FADD instruction", \
663 .pme_flags = PFMLIB_I386_P6_CTR0_ONLY \
665 {.pme_name = "FP_ASSIST",\
667 .pme_desc = "Number of floating-point exception cases handled by microcode.", \
668 .pme_flags = PFMLIB_I386_P6_CTR1_ONLY \
672 .pme_desc = "Number of multiplies." \
673 "This count includes integer as well as FP multiplies and is speculative", \
674 .pme_flags = PFMLIB_I386_P6_CTR1_ONLY \
678 .pme_desc = "Number of divides." \
679 "This count includes integer as well as FP divides and is speculative", \
680 .pme_flags = PFMLIB_I386_P6_CTR1_ONLY \
682 {.pme_name = "CYCLES_DIV_BUSY",\
684 .pme_desc = "Number of cycles during which the divider is busy, and cannot accept new divides. " \
685 "This includes integer and FP divides, FPREM, FPSQRT, etc. and is speculative", \
686 .pme_flags = PFMLIB_I386_P6_CTR0_ONLY \
688 {.pme_name = "LD_BLOCKS",\
690 .pme_desc = "Number of load operations delayed due to store buffer blocks. Includes counts " \
691 "caused by preceding stores whose addresses are unknown, preceding stores whose addresses " \
692 "are known but whose data is unknown, and preceding stores that conflicts with the load " \
693 "but which incompletely overlap the load" \
695 {.pme_name = "SB_DRAINS",\
697 .pme_desc = "Number of store buffer drain cycles. Incremented every cycle the store buffer is draining. " \
698 "Draining is caused by serializing operations like CPUID, synchronizing operations " \
699 "like XCHG, interrupt acknowledgment, as well as other conditions (such as cache flushing)."\
701 {.pme_name = "MISALIGN_MEM_REF",\
703 .pme_desc = "Number of misaligned data memory references. Incremented by 1 every cycle during "\
704 "which, either the processor's load or store pipeline dispatches a misaligned micro-op "\
705 "Counting is performed if it is the first or second half or if it is blocked, squashed, "\
706 "or missed. In this context, misaligned means crossing a 64-bit boundary"\
708 {.pme_name = "UOPS_RETIRED",\
710 .pme_desc = "Number of micro-ops retired"\
712 {.pme_name = "INST_DECODED",\
714 .pme_desc = "Number of instructions decoded"\
716 {.pme_name = "HW_INT_RX",\
718 .pme_desc = "Number of hardware interrupts received"\
720 {.pme_name = "CYCLES_INT_MASKED",\
722 .pme_desc = "Number of processor cycles for which interrupts are disabled"\
724 {.pme_name = "CYCLES_INT_PENDING_AND_MASKED",\
726 .pme_desc = "Number of processor cycles for which interrupts are disabled and interrupts are pending."\
728 {.pme_name = "BR_INST_RETIRED",\
730 .pme_desc = "Number of branch instructions retired"\
732 {.pme_name = "BR_MISS_PRED_RETIRED",\
734 .pme_desc = "Number of mispredicted branches retired"\
736 {.pme_name = "BR_TAKEN_RETIRED",\
738 .pme_desc = "Number of taken branches retired"\
740 {.pme_name = "BR_MISS_PRED_TAKEN_RET",\
742 .pme_desc = "Number of taken mispredicted branches retired"\
744 {.pme_name = "BR_INST_DECODED",\
746 .pme_desc = "Number of branch instructions decoded"\
748 {.pme_name = "BTB_MISSES",\
750 .pme_desc = "Number of branches for which the BTB did not produce a prediction"\
752 {.pme_name = "BR_BOGUS",\
754 .pme_desc = "Number of bogus branches"\
756 {.pme_name = "BACLEARS",\
758 .pme_desc = "Number of times BACLEAR is asserted. This is the number of times that " \
759 "a static branch prediction was made, in which the branch decoder decided " \
760 "to make a branch prediction because the BTB did not" \
762 {.pme_name = "RESOURCE_STALLS",\
764 .pme_desc = "Incremented by 1 during every cycle for which there is a resource related stall. " \
765 "Includes register renaming buffer entries, memory buffer entries. Does not include " \
766 "stalls due to bus queue full, too many cache misses, etc. In addition to resource " \
767 "related stalls, this event counts some other events. Includes stalls arising during " \
768 "branch misprediction recovery, such as if retirement of the mispredicted branch is " \
769 "delayed and stalls arising while store buffer is draining from synchronizing operations" \
771 {.pme_name = "PARTIAL_RAT_STALLS",\
773 .pme_desc = "Number of cycles or events for partial stalls. This includes flag partial stalls"\
775 {.pme_name = "SEGMENT_REG_LOADS",\
777 .pme_desc = "Number of segment register loads."\
791#define PME_I386_PPRO_CPU_CLK_UNHALTED 0
792#define PME_I386_PPRO_INST_RETIRED 1
793#define PME_I386_PPRO_EVENT_COUNT (sizeof(i386_ppro_pe)/sizeof(pme_i386_p6_entry_t))
807#define PME_I386_PII_CPU_CLK_UNHALTED 0
808#define PME_I386_PII_INST_RETIRED 1
809#define PME_I386_PII_EVENT_COUNT (sizeof(i386_pII_pe)/sizeof(pme_i386_p6_entry_t))
824#define PME_I386_PIII_CPU_CLK_UNHALTED 0
825#define PME_I386_PIII_INST_RETIRED 1
826#define PME_I386_PIII_EVENT_COUNT (sizeof(i386_pIII_pe)/sizeof(pme_i386_p6_entry_t))
839 .pme_desc =
"Number cycles during which the processor is not halted and not in a thermal trip"
846 {.pme_name =
"EMON_EST_TRANS",
848 .pme_desc =
"Number of Enhanced Intel SpeedStep technology transitions",
851 { .pme_uname =
"ALL",
852 .pme_udesc =
"All transitions",
855 { .pme_uname =
"FREQ",
856 .pme_udesc =
"Only frequency transitions",
861 {.pme_name =
"EMON_THERMAL_TRIP",
863 .pme_desc =
"Duration/occurrences in thermal trip; to count the number of thermal trips; edge detect must be used"
865 {.pme_name =
"BR_INST_EXEC",
867 .pme_desc =
"Branch instructions executed (not necessarily retired)"
869 {.pme_name =
"BR_MISSP_EXEC",
871 .pme_desc =
"Branch instructions executed that were mispredicted at execution"
873 {.pme_name =
"BR_BAC_MISSP_EXEC",
875 .pme_desc =
"Branch instructions executed that were mispredicted at Front End (BAC)"
877 {.pme_name =
"BR_CND_EXEC",
879 .pme_desc =
"Conditional branch instructions executed"
881 {.pme_name =
"BR_CND_MISSP_EXEC",
883 .pme_desc =
"Conditional branch instructions executed that were mispredicted"
885 {.pme_name =
"BR_IND_EXEC",
887 .pme_desc =
"Indirect branch instructions executed"
889 {.pme_name =
"BR_IND_MISSP_EXEC",
891 .pme_desc =
"Indirect branch instructions executed that were mispredicted"
893 {.pme_name =
"BR_RET_EXEC",
895 .pme_desc =
"Return branch instructions executed"
897 {.pme_name =
"BR_RET_MISSP_EXEC",
899 .pme_desc =
"Return branch instructions executed that were mispredicted at Execution"
901 {.pme_name =
"BR_RET_BAC_MISSP_EXEC",
903 .pme_desc =
"Return branch instructions executed that were mispredicted at Front End (BAC)"
905 {.pme_name =
"BR_CALL_EXEC",
907 .pme_desc =
"CALL instructions executed"
909 {.pme_name =
"BR_CALL_MISSP_EXEC",
911 .pme_desc =
"CALL instructions executed that were mispredicted"
913 {.pme_name =
"BR_IND_CALL_EXEC",
915 .pme_desc =
"Indirect CALL instructions executed"
917 {.pme_name =
"EMON_SIMD_INSTR_RETIRED",
919 .pme_desc =
"Number of retired MMX instructions"
921 {.pme_name =
"EMON_SYNCH_UOPS",
923 .pme_desc =
"Sync micro-ops"
925 {.pme_name =
"EMON_ESP_UOPS",
927 .pme_desc =
"Total number of micro-ops"
929 {.pme_name =
"EMON_FUSED_UOPS_RET",
931 .pme_desc =
"Total number of micro-ops",
935 { .pme_uname =
"ALL",
936 .pme_udesc =
"All fused micro-ops",
939 { .pme_uname =
"LD_OP",
940 .pme_udesc =
"Only load+Op micro-ops",
943 { .pme_uname =
"STD_STA",
944 .pme_udesc =
"Only std+sta micro-ops",
949 {.pme_name =
"EMON_UNFUSION",
951 .pme_desc =
"Number of unfusion events in the ROB, happened on a FP exception to a fused micro-op"
953 {.pme_name =
"EMON_PREF_RQSTS_UP",
955 .pme_desc =
"Number of upward prefetches issued"
957 {.pme_name =
"EMON_PREF_RQSTS_DN",
959 .pme_desc =
"Number of downward prefetches issued"
961 {.pme_name =
"EMON_SSE_SSE2_INST_RETIRED",
963 .pme_desc =
"Streaming SIMD extensions instructions retired",
966 { .pme_uname =
"SSE_PACKED_SCALAR_SINGLE",
967 .pme_udesc =
"SSE Packed Single and Scalar Single",
970 { .pme_uname =
"SSE_SCALAR_SINGLE",
971 .pme_udesc =
"SSE Scalar Single",
974 { .pme_uname =
"SSE2_PACKED_DOUBLE",
975 .pme_udesc =
"SSE2 Packed Double",
978 { .pme_uname =
"SSE2_SCALAR_DOUBLE",
979 .pme_udesc =
"SSE2 Scalar Double",
984 {.pme_name =
"EMON_SSE_SSE2_COMP_INST_RETIRED",
986 .pme_desc =
"Computational SSE instructions retired",
989 { .pme_uname =
"SSE_PACKED_SINGLE",
990 .pme_udesc =
"SSE Packed Single",
993 { .pme_uname =
"SSE_SCALAR_SINGLE",
994 .pme_udesc =
"SSE Scalar Single",
997 { .pme_uname =
"SSE2_PACKED_DOUBLE",
998 .pme_udesc =
"SSE2 Packed Double",
1001 { .pme_uname =
"SSE2_SCALAR_DOUBLE",
1002 .pme_udesc =
"SSE2 Scalar Double",
1007 {.pme_name =
"L2_LD",
1009 .pme_desc =
"Number of L2 data loads",
1012 {.pme_name =
"L2_LINES_IN",
1014 .pme_desc =
"Number of L2 lines allocated",
1017 {.pme_name =
"L2_LINES_OUT",
1019 .pme_desc =
"Number of L2 lines evicted",
1022 {.pme_name =
"L2_M_LINES_OUT",
1024 .pme_desc =
"Number of L2 M-state lines evicted",
1028#define PME_I386_PM_CPU_CLK_UNHALTED 0
1029#define PME_I386_PM_INST_RETIRED 1
1030#define PME_I386_PM_EVENT_COUNT (sizeof(i386_pm_pe)/sizeof(pme_i386_p6_entry_t))
static pme_i386_p6_entry_t i386_ppro_pe[]
#define I386_P6_PIII_NOT_PM_PME
#define I386_P6_NOT_PM_PME
#define I386_P6_PII_ONLY_PME
static pme_i386_p6_entry_t i386_pII_pe[]
static pme_i386_p6_entry_t i386_pIII_pe[]
#define I386_P6_CPU_CLK_UNHALTED
#define I386_PM_MESI_PREFETCH_UMASKS
#define I386_P6_COMMON_PME
static pme_i386_p6_entry_t i386_pm_pe[]
#define I386_P6_PII_PIII_PME
#define PFMLIB_I386_P6_UMASK_COMBO