PMC.CORE2(3)
๐ pmc.core2 โ measurement events for Intel Core2 family CPUs ๐
๐ธ NAME ๐ธ
pmc.core2 โ measurement events for Intel Core2 family CPUs, aka the manual page pmc.core2(3) bestie ๐
๐ LIBRARY ๐
Performance Counters Library (libpmc, -lpmc) ๐ซถ
๐ช SYNOPSIS ๐ช
okay so first you gotta pull in the header:
#include <pmc.h>
๐ DESCRIPTION ๐
Intel Core2 CPUs contain PMCs conforming to version 2 of the Intel performance measurement architecture. These CPUs may contain up to two classes of PMCs:
PMC_CLASS_IAFโ Fixed-function counters that count only one hardware event per counter.PMC_CLASS_IAPโ Programmable counters that may be configured to count one of a defined set of hardware events.
The number of PMCs available in each class and their widths need to be determined at run time by calling pmc_cpuinfo(3) ๐.
Intel Core2 PMCs are documented in โVolume 3: System Programming Guideโ, IA-32 Intel(R) Architecture Software Developer's Manual, Order Number 253669-027US, Intel Corporation, July 2008 ๐โจ.
๐ง CORE2 FIXED FUNCTION PMCS ๐ง
These PMCs and their supported events are documented in pmc.iaf(3). Not all CPUs in this family implement fixed-function counters ๐ซถ.
๐ฅ CORE2 PROGRAMMABLE PMCS ๐ฅ
The programmable PMCs support the following capabilities, fr fr:
PMC_CAP_CASCADEโ NoPMC_CAP_EDGEโ YesPMC_CAP_INTERRUPTโ YesPMC_CAP_INVERTโ YesPMC_CAP_READโ YesPMC_CAP_PRECISEโ NoPMC_CAP_SYSTEMโ YesPMC_CAP_TAGGINGโ NoPMC_CAP_THRESHOLDโ YesPMC_CAP_USERโ YesPMC_CAP_WRITEโ Yes
๐ Event Qualifiers ๐
Event specifiers for these PMCs support the following common qualifiers:
cmask=valueโ Configure the PMC to increment only if the number of configured events measured in a cycle is greater than or equal to value.edgeโ Configure the PMC to count the number of de-asserted to asserted transitions of the conditions expressed by the other qualifiers. If specified, the counter will increment only once whenever a condition becomes true, irrespective of the number of clocks during which the condition remains true.invโ Invert the sense of comparison when thecmaskqualifier is present, making the counter increment when the number of events per cycle is less than the value specified by thecmaskqualifier.osโ Configure the PMC to count events happening at processor privilege level 0.usrโ Configure the PMC to count events occurring at privilege levels 1, 2 or 3.
If neither of the os or usr qualifiers are specified, the default is to enable both ๐ซถ.
Events that require core-specificity to be specified use an additional qualifier core=core, where argument core is one of:
core=coreโ pick your core vibe:allโ Measure event conditions on all cores.thisโ Measure event conditions on this core.
The default is this ๐
.
Events that require an agent qualifier to be specified use an additional qualifier agent=agent, where argument agent is one of:
agent=agentโ choose your bus-agent energy:thisโ Measure events associated with this bus agent.anyโ Measure events caused by any bus agent.
The default is this โจ.
Events that require a hardware prefetch qualifier to be specified use an additional qualifier prefetch=prefetch, where argument prefetch is one of:
prefetch=prefetchโ prefetch mode, bestie:bothโ Include all prefetches.onlyโ Only count hardware prefetches.excludeโ Exclude hardware prefetches.
The default is both ๐ฆ.
Events that require a cache coherence qualifier to be specified use an additional qualifier cachestate=state, where argument state contains one or more of the following letters:
cachestate=stateโ cache-state letters, go off:eโ Count cache lines in the exclusive state.iโ Count cache lines in the invalid state.mโ Count cache lines in the modified state.sโ Count cache lines in the shared state.
The default is eims ๐.
Events that require a snoop response qualifier to be specified use an additional qualifier snoopresponse=response, where argument response comprises of the following keywords separated by + signs:
snoopresponse=responseโ snoop-response vibes:cleanโ Measure CLEAN responses.hitโ Measure HIT responses.hitmโ Measure HITM responses.
The default is to measure all the above responses ๐.
Events that require a snoop type qualifier use an additional qualifier snooptype=type, where argument type comprises the one of the following keywords:
snooptype=typeโ snoop-type moment:cmp2iโ Measure CMP2I snoops.cmp2sโ Measure CMP2S snoops.
The default is to measure both snoops ๐.
๐ Event Specifiers (Programmable PMCs) ๐
Core2 programmable PMCs support the following events:
BACLEARSโ (EventE6H, Umask00H) The number of times the front end is resteered.BOGUS_BRโ (EventE4H, Umask00H) The number of byte sequences mistakenly detected as taken branch instructions.BR_BAC_MISSP_EXECโ (Event8AH, Umask00H) The number of branch instructions that were mispredicted when decoded.BR_CALL_MISSP_EXECโ (Event93H, Umask00H) The number of mispredicted CALL instructions that were executed.BR_CALL_EXECโ (Event92H, Umask00H) The number of CALL instructions executed.BR_CND_EXECโ (Event8BH, Umask00H) The number of conditional branches executed, but not necessarily retired.BR_CND_MISSP_EXECโ (Event8CH, Umask00H) The number of mispredicted conditional branches executed.BR_IND_CALL_EXECโ (Event94H, Umask00H) The number of indirect CALL instructions executed.BR_IND_EXECโ (Event8DH, Umask00H) The number of indirect branch instructions executed.BR_IND_MISSP_EXECโ (Event8EH, Umask00H) The number of mispredicted indirect branch instructions executed.BR_INST_DECODEDโ (EventE0H, Umask00H) The number of branch instructions decoded.BR_INST_EXECโ (Event88H, Umask00H) The number of branches executed, but not necessarily retired.BR_INST_RETIRED.ANYโ (EventC4H, Umask00H) (Alias โBranch Instruction Retiredโ) The number of branch instructions retired. This is an architectural performance event.BR_INST_RETIRED.MISPREDโ (EventC5H, Umask00H) (Alias โBranch Misses Retiredโ) The number of mispredicted branch instructions retired. This is an architectural performance event.BR_INST_RETIRED.MISPRED_NOT_TAKENโ (EventC4H, Umask02H) The number of not taken branch instructions retired that were mispredicted.BR_INST_RETIRED.MISPRED_TAKENโ (EventC4H, Umask08H) The number of taken branch instructions retired that were mispredicted.BR_INST_RETIRED.PRED_NOT_TAKENโ (EventC4H, Umask01H) The number of not taken branch instructions retired that were correctly predicted.BR_INST_RETIRED.PRED_TAKENโ (EventC4H, Umask04H) The number of taken branch instructions retired that were correctly predicted.BR_INST_RETIRED.TAKENโ (EventC4H, Umask0CH) The number of taken branch instructions retired.BR_MISSP_EXECโ (Event89H, Umask00H) The number of mispredicted branch instructions that were executed.BR_RET_MISSP_EXECโ (Event90H, Umask00H) The number of mispredicted RET instructions executed.BR_RET_BAC_MISSP_EXECโ (Event91H, Umask00H) The number of RET instructions executed that were mispredicted at decode time.BR_RET_EXECโ (Event8FH, Umask00H) The number of RET instructions executed.BR_TKN_BUBBLE_1โ (Event97H, Umask00H) The number of branch predicted taken with bubble 1.BR_TKN_BUBBLE_2โ (Event98H, Umask00H) The number of branch predicted taken with bubble 2.BUSQ_EMPTY [,core=core]โ (Event7DH) The number of cycles during which the core did not have any pending transactions in the bus queue.BUS_BNR_DRV [,agent=agent]โ (Event61H) The number of Bus Not Ready signals asserted on the bus.BUS_DATA_RCV [,core=core]โ (Event64H) The number of bus cycles during which the processor is receiving data.BUS_DRDY_CLOCKS [,agent=agent]โ (Event62H) The number of bus cycles during which the Data Ready signal is asserted on the bus.BUS_HIT_DRV [,agent=agent]โ (Event7AH) The number of bus cycles during which the processor drives theHIT#pin.BUS_HITM_DRV [,agent=agent]โ (Event7BH) The number of bus cycles during which the processor drives theHITM#pin.BUS_IO_WAIT [,core=core]โ (Event7FH) The number of core cycles during which I/O requests wait in the bus queue.BUS_LOCK_CLOCKS [,agent=agent] [,core=core]โ (Event63H) The number of bus cycles during which the LOCK signal was asserted on the bus.BUS_REQUEST_OUTSTANDING [,agent=agent] [,core=core]โ (Event60H) The number of pending full cache line read transactions on the bus occurring in each cycle.BUS_TRANS_P [,agent=agent] [,core=core]โ (Event6BH) The number of partial bus transactions.BUS_TRANS_IFETCH [,agent=agent] [,core=core]โ (Event68H) The number of instruction fetch full cache line bus transactions.BUS_TRANS_INVAL [,agent=agent] [,core=core]โ (Event69H) The number of invalidate bus transactions.BUS_TRANS_PWR [,agent=agent] [,core=core]โ (Event6AH) The number of partial write bus transactions.BUS_TRANS_DEF [,agent=agent] [,core=core]โ (Event6DH) The number of deferred bus transactions.BUS_TRANS_BURST [,agent=agent] [,core=core]โ (Event6EH) The number of burst transactions.BUS_TRANS_MEM [,agent=agent] [,core=core]โ (Event6FH) The number of memory bus transactions.BUS_TRANS_ANY [,agent=agent] [,core=core]โ (Event70H) The number of bus transactions of any kind.BUS_TRANS_BRD [,agent=agent] [,core=core]โ (Event65H) The number of burst read transactions.BUS_TRANS_IO [,agent=agent] [,core=core]โ (Event6CH) The number of completed I/O bus transactions due to IN and OUT instructions.BUS_TRANS_RFO [,agent=agent] [,core=core]โ (Event66H) The number of Read For Ownership bus transactions.BUS_TRANS_WB [,agent=agent] [,core=core]โ (Event67H) The number explicit write-back bus transactions due to dirty line evictions.CMP_SNOOP[,core=core] [,snooptype=snoop]โ (Event78H) the number of times the L1 data cache gets snooped by the other core in the same processor ๐ like your bestie peeking at your notes, but silicon.CPU_CLK_UNHALTED.BUSโ (Event3CH, Umask01H) (Alias"Unhalted Reference Cycles") the number of bus cycles when the core is not in the halt state. This is an architectural performance event โจCPU_CLK_UNHALTED.CORE_Pโ (Event3CH, Umask00H) (Alias"Unhalted Core Cycles") the number of core cycles while the core is not in a halt state. Also an architectural performance event โจCPU_CLK_UNHALTED.NO_OTHERโ (Event3CH, Umask02H) the number of bus cycles during which the core stays unhalted and the other core is halted ๐ซถ the literal "not me being the only one awake" metric.CYCLES_DIV_BUSYโ (Event14H, Umask00H) the number of cycles the divider is busy. Lowkey important: this event is only available onPMC0.CYCLES_INT_MASKEDโ (EventC6H, Umask01H) the number of cycles during which interrupts are disabled ๐ the "do not disturb" of cycles.CYCLES_INT_PENDING_AND_MASKEDโ (EventC6H, Umask02H) the number of cycles during which there were pending interrupts while interrupts were disabled ๐ญ the group chat blowing up while you're on airplane mode.CYCLES_L1I_MEM_STALLEDโ (Event86H, Umask00H) the number of cycles for which an instruction fetch stalls ๐ง stuck in traffic, instruction edition.DELAYED_BYPASS.FPโ (Event19H, Umask00H) the number of floating point operations that used data immediately after that data was generated by a non floating point execution unit. Reusing the tea before it's even brewed ๐DELAYED_BYPASS.LOADโ (Event19H, Umask01H) the number of delayed bypass penalty cycles that a load operation incurred.DELAYED_BYPASS.SIMDโ (Event19H, Umask02H) the number of times SIMD operations use data immediately after that data was generated by a non-SIMD execution unit.DIVโ (Event13H, Umask00H) the number of divide operations executed. Only available onPMC1, bestie, don't come for me.DTLB_MISSES.ANYโ (Event08H, Umask01H) the number of Data TLB misses, including the ones that come from speculative accesses ๐ the full picture, no filters.DTLB_MISSES.L0_MISS_LDโ (Event08H, Umask04H) the number of level 0 DTLB misses due to load operations.DTLB_MISSES.MISS_LDโ (Event08H, Umask02H) the number of Data TLB misses due to load operations.DTLB_MISSES.MISS_STโ (Event08H, Umask08H) the number of Data TLB misses due to store operations.EIST_TRANSโ (Event3AH, Umask00H) the number of Enhanced Intel SpeedStep Technology transitions โก the CPU switching vibes.ESP.ADDITIONSโ (EventABH, Umask02H) the number of automatic additions to the%espregister.ESP.SYNCHโ (EventABH, Umask01H) the number of times the%espregister was explicitly used in an address expression after it gets implicitly used by aPUSHorPOPinstruction ๐ซ yes it's as specific as it sounds.EXT_SNOOP[,agent=agent] [,snoopresponse=response]โ (Event77H) the number of snoop responses to bus transactions ๐กFP_ASSISTโ (Event11H, Umask00H) the number of floating point operations executed that needed a microcode assist ๐ญ asking the group chat for help.FP_COMP_OPS_EXEโ (Event10H, Umask00H) the number of floating point computational micro-ops executed. The event is available only onPMC0.FP_MMX_TRANS_TO_FPโ (EventCCH, Umask02H) the number of transitions from MMX instructions to floating point instructions ๐ฆ a glow-up in real time.FP_MMX_TRANS_TO_MMXโ (EventCCH, Umask01H) the number of transitions from floating point instructions to MMX instructions.HW_INT_RCVโ (EventC8H, Umask00H) the number of hardware interrupts received ๐ the CPU got a text.IDLE_DURING_DIVโ (Event18H, Umask00H) the number of cycles the divider is busy and no other execution unit or load operation was in progress. Available only onPMC0๐ธILD_STALLโ (Event87H, Umask00H) the number of cycles the instruction length decoder stalled due to a length changing prefix.INST_QUEUE.FULLโ (Event83H, Umask02H) the number of cycles during which the instruction queue is full ๐ no room at the function, sorry.INST_RETIRED.ANY_Pโ (EventC0H, Umask00H) (Alias"Instruction Retired") the number of instructions retired. This is an architectural performance event โจ the main character metric, fr fr.INST_RETIRED.LOADSโ (EventC0H, Umask01H) the number of instructions retired that contained a load operation.INST_RETIRED.OTHERโ (EventC0H, Umask04H) the number of instructions retired that did not contain a load or a store operation ๐ฆ the neither-here-nor-there girlies.INST_RETIRED.STORESโ (EventC0H, Umask02H) the number of instructions retired that contained a store operation.INST_RETIRED.VM_Hโ (EventC0H, Umask08H) (Core2Extreme) the number of instructions retired while in VMX root operation ๐ฅ special edition, only on that hardware.ITLB.FLUSHโ (Event82H, Umask40H) the number of ITLB flushes ๐ฟ clearing the cache of the instruction TLB, basically.ITLB.LARGE_MISSโ (Event82H, Umask10H) the number of instruction fetches from large pages that miss the ITLB.ITLB.MISSESโ (Event82H, Umask12H) the number of instruction fetches from both large and small pages that miss the ITLB ๐ both flavours, one count.ITLB.SMALL_MISSโ (Event82H, Umask02H) the number of instruction fetches from small pages that miss the ITLB.ITLB_MISS_RETIREDโ (EventC9H, Umask00H) the number of retired instructions that missed the ITLB when they were fetched ๐ญ missed it on the first try, iconic.L1D_ALL_REFโ (Event43H, Umask01H) the number of references to L1 data cache, counting loads and stores of all memory types ๐ every single visitor counted.L1D_ALL_CACHE_REFโ (Event43H, Umask02H) the number of data reads and writes to cacheable memory.L1D_CACHE_LOCK[,cachestate=state]โ (Event42H) the number of locked reads from cacheable memory ๐L1D_CACHE_LOCK_DURATIONโ (Event42H, Umask10H) the number of cycles during which any cache line is locked by any locking instruction โณ it's giving "occupied".L1D_CACHE_LD[,cachestate=state]โ (Event40H) the number of data reads from cacheable memory, excluding locked reads.L1D_CACHE_ST[,cachestate=state]โ (Event41H) the number of data writes to cacheable memory, excluding locked writes.L1D_M_EVICTโ (Event47H, Umask00H) the number of modified cache lines evicted from the L1 data cache ๐ we had to let them go.L1D_M_REPLโ (Event46H, Umask00H) the number of modified lines allocated in the L1 data cache.L1D_PEND_MISSโ (Event48H, Umask00H) the total number of outstanding L1 data cache misses at any clock ๐ซถ the "unread messages" badge, essentially.L1D_PREFETCH.REQUESTSโ (Event4EH, Umask10H) the number of times the L1 data cache requested to prefetch a data cache line ๐ฎ manifesting the data before you need it.L1D_REPLโ (Event45H, Umask0FH) the number of lines brought into the L1 data cache.L1D_SPLIT.LOADSโ (Event49H, Umask01H) the number of load operations that span two cache lines ๐ one leg in each, honestly relatable.L1D_SPLIT.STORESโ (Event49H, Umask02H) the number of store operations that span two cache lines.L1I_MISSESโ (Event81H, Umask00H) the number of instruction fetch unit misses.L1I_READSโ (Event80H, Umask00H) the number of instruction fetches.L2_ADS[,core=core]โ (Event21H) the number of cycles that the L2 address bus is in use ๐ the line is busy.L2_DBUS_BUSY_RD[,core=core]โ (Event23H) the number of cycles during which the L2 data bus is busy transferring data to the core.L2_IFETCH[,cachestate=state] [,core=core]โ (Event28H) the number of instruction cache line requests from the instruction fetch unit.L2_LD[,cachestate=state] [,core=core] [,prefetch=prefetch]โ (Event29H) the number of L2 cache read requests from the L1 cache and the L2 prefetchers.L2_LINES_IN[,core=core] [,prefetch=prefetch]โ (Event24H) the number of cache lines allocated in the L2 cache.L2_LINES_OUT[,core=core] [,prefetch=prefetch]โ (Event26H) the number of L2 cache lines evicted.L2_LOCK[,cachestate=state] [,core=core]โ (Event2BH) the number of locked accesses to cache lines that miss the L1 data cache ๐L2_M_LINES_IN[,core=core]โ (Event25H) the number of L2 cache line modifications.L2_M_LINES_OUT[,core=core] [,prefetch=prefetch]โ (Event27H) the number of modified lines evicted from the L2 cache.L2_NO_REQ[,core=core]โ (Event32H) the number of cycles during which no L2 cache requests were pending from a core ๐ the quiet girl era.L2_REJECT_BUSQ[,cachestate=state] [,core=core] [,prefetch=prefetch]โ (Event30H) the number of L2 cache requests that were rejected ๐ left on read.L2_RQSTS[,cachestate=state] [,core=core] [,prefetch=prefetch]โ (Event2EH) the number of completed L2 cache requests โจ finished, not just started.L2_RQSTS.SELF.DEMAND.I_STATEโ (Event2EH, Umask41H) (Alias"LLC Misses") the number of completed L2 cache demand requests from this core that missed the L2 cache. This is an architectural performance event ๐L2_RQSTS.SELF.DEMAND.MESIโ (Event2EH, Umask4FH) (Alias"LLC References") the number of completed L2 cache demand requests from this core. Also an architectural performance event ๐L2_ST[,cachestate=state] [,core=core]โ (Event2AH) the number of store operations that miss the L1 cache and request data from the L2 cache.LOAD_BLOCK.L1Dโ (Event03H, Umask20H) the number of loads blocked by the L1 data cache ๐ held up at the door.LOAD_BLOCK.OVERLAP_STOREโ (Event03H, Umask08H) the number of loads that partially overlap an earlier store or are aliased with a previous store.LOAD_BLOCK.STAโ (Event03H, Umask02H) the number of loads blocked by preceding stores whose address is yet to be calculated ๐งฎ we don't even know where they live yet.LOAD_BLOCK.STDโ (Event03H, Umask04H) the number of loads blocked by preceding stores to the same address whose data value is not known ๐ญ "I'll tell you later" โ the load.LOAD_BLOCK.UNTIL_RETIREโ (Event03H, Umask10H) the number of load operations that were blocked until retirement.LOAD_HIT_PREโ (Event4CH, Umask00H) the number of load operations that conflicted with a prefetch to the same cache line ๐ซ collided with your own future self.MACHINE_NUKES.SMCโ (EventC3H, Umask01H) the number of times a program writes to a code section ๐ฅ self-modifying code said "watch this", and the machine said nope.
okay we're still deep in the event list โ hydrate, stretch, and keep scrolling bestie, it's worth it ๐
MACHINE_NUKES.MEM_ORDERโ EventC3H, Umask04H: how many times the execution pipeline got restarted because of a memory ordering conflict or a memory disambiguation misprediction. yes the name is dramatic. no it's not wrong. ๐MACRO_INSTS.CISC_DECODEDโ EventAAH, Umask08H: the number of complex instructions decoded.MACRO_INSTS.DECODEDโ EventAAH, Umask01H: the number of instructions decoded. justโฆ all of them, decoded. slay.MEMORY_DISAMBIGUATION.RESETโ Event09H, Umask01H: the number of cycles during which memory disambiguation misprediction occurs.MEMORY_DISAMBIGUATION.SUCCESSโ Event09H, Umask02H: the number of load operations that were successfully disambiguated. we love a success story ๐ซถMEM_LOAD_RETIRED.DTLB_MISSโ EventCBH, Umask10H: the number of retired loads that missed the DTLB.MEM_LOAD_RETIRED.L1D_LINE_MISSโ EventCBH, Umask02H: the number of retired load operations that missed L1 data cache and that sent a request to L2 cache. โ ๏ธ this event is only available on PMC0.MEM_LOAD_RETIRED.L1D_MISSโ EventCBH, Umask01H: the number of retired load operations that missed L1 data cache. also only available on PMC0 โ don't say I didn't warn you ๐MEM_LOAD_RETIRED.L2_LINE_MISSโ EventCBH, Umask08H: the number of load operations that missed L2 cache and that caused a bus request.MEM_LOAD_RETIRED.L2_MISSโ EventCBH, Umask04H: the number of load operations that missed L2 cache.MULโ Event12H, Umask00H: the number of multiply operations executed. โ ๏ธ this one is only available on PMC1 โ yes, different counter than the L1D ones above, stay awake ๐PAGE_WALKS.COUNTโ Event0CH, Umask01H: the number of page walks executed because of an ITLB or DTLB miss.PAGE_WALKS.CYCLESโ Event0CH, Umask02H: the number of cycles spent in a page walk caused by an ITLB or DTLB miss.PREF_RQSTS_DNโ EventF8H, Umask00H: the number of downward prefetches issued from the Data Prefetch Logic unit to L2 cache.PREF_RQSTS_UPโ EventF0H, Umask00H: the number of upward prefetches issued from the Data Prefetch Logic unit to L2 cache. ok but why is "upward prefetch" such a vibe โจRAT_STALLS.ANYโ EventD2H, Umask0FH: the number of stall cycles due to any ofRAT_STALLS.FLAGSRAT_STALLS.FPSW,RAT_STALLS.PARTIALandRAT_STALLS.ROB_READ_PORT. it's the "all of the above" package deal ๐RAT_STALLS.FLAGSโ EventD2H, Umask04H: the number of cycles execution stalled due to a flag register induced stall.RAT_STALLS.FPSWโ EventD2H, Umask08H: the number of times the floating point status word was written.RAT_STALLS.OTHER_SERIALIZATION_STALLSโ EventD2H, Umask10H, Core2Extreme: the number of stalls due to other RAT resource serialization not counted by umask0FH. so like, the leftovers. the misc. the "other" of the group chat ๐ซถRAT_STALLS.PARTIAL_CYCLESโ EventD2H, Umask02H: the number of cycles of added instruction execution latency due to the use of a register that was partially written by previous instructions.RAT_STALLS.ROB_READ_PORTโ EventD2H, Umask01H: the number of cycles when ROB read port stalls occurred.RESOURCE_STALLS.ANYโ EventDCH, Umask1FH: the number of cycles during which any resource related stall occurred. the umbrella event, the main character of stalls ๐RESOURCE_STALLS.BR_MISS_CLEARโ EventDCH, Umask10H: the number of cycles stalled due to branch misprediction.RESOURCE_STALLS.FPCWโ EventDCH, Umask08H: the number of cycles stalled due to writing the floating point control word.RESOURCE_STALLS.LD_STโ EventDCH, Umask04H: the number of cycles during which the number of loads and stores in the pipeline exceeded their limits.RESOURCE_STALLS.ROB_FULLโ EventDCH, Umask01H: the number of cycles when the reorder buffer was full.RESOURCE_STALLS.RS_FULLโ EventDCH, Umask02H: the number of cycles during which theRSwas full.RS_UOPS_DISPATCHEDโ EventA0H, Umask00H: the number of micro-ops dispatched for execution.RS_UOPS_DISPATCHED.PORT0โ EventA1H, Umask01H: the number of cycles micro-ops were dispatched for execution on port 0.RS_UOPS_DISPATCHED.PORT1โ EventA1H, Umask02H: the number of cycles micro-ops were dispatched for execution on port 1.RS_UOPS_DISPATCHED.PORT2โ EventA1H, Umask04H: the number of cycles micro-ops were dispatched for execution on port 2.RS_UOPS_DISPATCHED.PORT3โ EventA1H, Umask08H: the number of cycles micro-ops were dispatched for execution on port 3.RS_UOPS_DISPATCHED.PORT4โ EventA1H, Umask10H: the number of cycles micro-ops were dispatched for execution on port 4.RS_UOPS_DISPATCHED.PORT5โ EventA1H, Umask20H: the number of cycles micro-ops were dispatched for execution on port 5. six ports, six umasks, one extremely tired scaler ๐ฅSB_DRAIN_CYCLESโ Event04H, Umask01H: the number of cycles while the store buffer is draining.SEGMENT_REG_LOADSโ Event06H, Umask00H: the number of segment register loads.SEG_REG_RENAMES.ANYโ EventD5H, Umask0FH: the number of times the any segment register was renamed.SEG_REG_RENAMES.DSโ EventD5H, Umask02H: the number of times the%dsregister is renamed.SEG_REG_RENAMES.ESโ EventD5H, Umask01H: the number of times the%esregister is renamed.SEG_REG_RENAMES.FSโ EventD5H, Umask04H: the number of times the%fsregister is renamed.SEG_REG_RENAMES.GSโ EventD5H, Umask08H: the number of times the%gsregister is renamed. that's the whole segment register squad, accounted for ๐ซกSEG_RENAME_STALLS.ANYโ EventD4H, Umask0FH: the number of stalls due to lack of resource to rename any segment register.SEG_RENAME_STALLS.DSโ EventD4H, Umask02H: the number of stalls due to lack of renaming resources for the%dsregister.SEG_RENAME_STALLS.ESโ EventD4H, Umask01H: the number of stalls due to lack of renaming resources for the%esregister.SEG_RENAME_STALLS.FSโ EventD4H, Umask04H: the number of stalls due to lack of renaming resources for the%fsregister.SEG_RENAME_STALLS.GSโ EventD4H, Umask08H: the number of stalls due to lack of renaming resources for the%gsregister.SIMD_ASSISTโ EventCDH, Umask00H: the number SIMD assists invoked.SIMD_COMP_INST_RETIRED.PACKED_DOUBLEโ EventCAH, Umask04H: the number of computational SSE2 packed double precision instructions retired.SIMD_COMP_INST_RETIRED.PACKED_SINGLEโ EventCAH, Umask01H: the number of computational SSE2 packed single precision instructions retired.SIMD_COMP_INST_RETIRED.SCALAR_DOUBLEโ EventCAH, Umask08H: the number of computational SSE2 scalar double precision instructions retired.SIMD_COMP_INST_RETIRED.SCALAR_SINGLEโ EventCAH, Umask02H: the number of computational SSE2 scalar single precision instructions retired.SIMD_INSTR_RETIREDโ EventCEH, Umask00H: the number of retired SIMD instructions that use MMX registers. MMX. we remember her ๐SIMD_INST_RETIRED.ANYโ EventC7H, Umask1FH: the number of streaming SIMD instructions retired.SIMD_INST_RETIRED.PACKED_DOUBLEโ EventC7H, Umask04H: the number of SSE2 packed double precision instructions retired.SIMD_INST_RETIRED.PACKED_SINGLEโ EventC7H, Umask01H: the number of SSE packed single precision instructions retired.SIMD_INST_RETIRED.SCALAR_DOUBLEโ EventC7H, Umask08H: the number of SSE2 scalar double precision instructions retired.SIMD_INST_RETIRED.SCALAR_SINGLEโ EventC7H, Umask02H: the number of SSE scalar single precision instructions retired.SIMD_INST_RETIRED.VECTORโ EventC7H, Umask10H: the number of SSE2 vector instructions retired.SIMD_SAT_INSTR_RETIREDโ EventCFH, Umask00H: the number of saturated arithmetic SIMD instructions retired.SIMD_SAT_UOP_EXECโ EventB1H, Umask00H: the number of SIMD saturated arithmetic micro-ops executed.SIMD_UOPS_EXECโ EventB0H, Umask00H: the number of SIMD micro-ops executed.SIMD_UOP_TYPE_EXEC.ARITHMETICโ EventB3H, Umask20H: the number of SIMD packed arithmetic micro-ops executed.SIMD_UOP_TYPE_EXEC.LOGICALโ EventB3H, Umask10H: the number of SIMD packed logical micro-ops executed.SIMD_UOP_TYPE_EXEC.MULโ EventB3H, Umask01H: the number of SIMD packed multiply micro-ops executed.SIMD_UOP_TYPE_EXEC.PACKโ EventB3H, Umask04H: the number of SIMD pack micro-ops executed.SIMD_UOP_TYPE_EXEC.SHIFTโ EventB3H, Umask02H: the number of SIMD packed shift micro-ops executed.SIMD_UOP_TYPE_EXEC.UNPACKโ EventB3H, Umask08H: the number of SIMD unpack micro-ops executed. the entireSIMD_UOP_TYPE_EXECfamily, unpacked for you, no pun intended ๐SNOOP_STALL_DRV[,agent=agent][,core=core]โ Event7EH: the number of times the bus stalled for snoops. ๐ heads up, this one takes theagentandcorearguments โ it's the only flirty little signature in this stretch of the list, so don't gloss over it.SSE_PRE_EXEC.L1โ Event07H, Umask01H: the number ofPREFETCHT0instructions executed.SSE_PRE_EXEC.L2โ Event07H, Umask02H: the number ofPREFETCHT1instructions executed.SSE_PRE_EXEC.NTAโ Event07H, Umask00H: the number ofPREFETCHNTAinstructions executed.SSE_PRE_EXEC.STORESโ Event07H, Umask03H: the number of times SSE non-temporal store instructions were executed.SSE_PRE_MISS.L1โ Event4BH, Umask01H: the number of times thePREFETCHT0instruction executed and missed all cache levels. ๐ญ brutal.SSE_PRE_MISS.L2โ Event4BH, Umask02H: the number of times thePREFETCHT1instruction executed and missed all cache levels.SSE_PRE_MISS.NTAโ Event4BH, Umask00H: the number of times thePREFETCHNTAinstruction executed and missed all cache levels.STORE_BLOCK.ORDERโ Event04H, Umask02H: the number of cycles while a store was waiting for another store to be globally observed. the group-project energy of memory ops โจSTORE_BLOCK.SNOOPโ Event04H, Umask08H: the number of cycles while a store was blocked due to a conflict with an internal or external snoop.THERMAL_TRIPโ Event3BH, UmaskC0H: the number of thermal trips. ๐ฅ literally. she's hot and she knows it.
still going, bestie โ the list does not end here, so don't close the tab ๐
UOPS_RETIRED.LD_IND_BRโ (EventC2H, Umask01H) how many micro-ops retired that fused a load together with another operation. โจUOPS_RETIRED.STD_STAโ (EventC2H, Umask02H) the count of store address calculations that got fused into one single micro-op. ๐UOPS_RETIRED.MACRO_FUSIONโ (EventC2H, Umask04H) how many times retired instruction pairs were fused into one micro-op. like, two became one, iconic behavior tbh ๐ซถUOPS_RETIRED.FUSEDโ (EventC2H, Umask07H) the number of fused micro-ops that retired.UOPS_RETIRED.NON_FUSEDโ (EventC2H, Umask8H) the number of non-fused micro-ops retired. no fusion, just vibes ๐ญUOPS_RETIRED.ANYโ (EventC2H, Umask0FH) the total number of micro-ops retired. periodt. ๐X87_OPS_RETIRED.ANYโ (EventC1H, UmaskFEH) the number of floating point computational instructions retired. ๐ฆX87_OPS_RETIRED.FXCHโ (EventC1H, Umask01H) the number ofFXCHinstructions retired.
๐ Event Name Aliases ๐
okay so here's the glow-up part: this table shows the mapping between the PMC-independent aliases that the Performance Counters Library (libpmc, -lpmc) supports and the actual hardware events underneath them. iykyk ๐
branchesโBR_INST_RETIRED.ANYโPMC_CLASS_IAPbranch-mispredictsโBR_INST_RETIRED.MISPREDโPMC_CLASS_IAPic-missesโL1I_MISSESโPMC_CLASS_IAPinstructionsโINST_RETIRED.ANY_PโPMC_CLASS_IAFinterruptsโHW_INT_RCVโPMC_CLASS_IAPunhalted-cyclesโCPU_CLK_UNHALTED.CORE_PโPMC_CLASS_IAF
๐ SEE ALSO ๐
pmc(3), pmc.amd(3), pmc.atom(3), pmc.core(3), pmc.iaf(3), pmc.soft(3), pmc.tsc(3), pmc_cpuinfo(3), pmclog(3), hwpmc(4)
go read those too bestie, they're literally all right there ๐
โญ HISTORY โญ
the pmc library first appeared in FreeBSD 6.0. throwback era fr fr ๐ฐ๏ธ
๐ AUTHORS ๐
The Performance Counters Library (libpmc, -lpmc) library was written by Joseph Koshy <jkoshy@FreeBSD.org>. thank you king ๐ซถ๐ธ
and that's a wrap on the whole page, bestie!! ๐โจ this one came from the Debian side of things, dated June 8, 2009, and it's the PMC.CORE2(3) page โ you read the entire thing, i'm so proud of you ๐ญ๐ go take a vibe check break, you earned it. ๐ฆ
๐ฆ where this page comes from
- freebsd 15.1: base 15.1
- Copyright (c) 2008,2009 Joseph Koshy. All rights reserved
- ๐ girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms