1ecd94f1bSKan Liang[
2ecd94f1bSKan Liang    {
349898fefSIan Rogers        "BriefDescription": "This category represents fraction of slots where the processor's Frontend undersupplies its Backend",
4*55b201a8SIan Rogers        "MetricExpr": "IDQ_UOPS_NOT_DELIVERED.CORE / SLOTS",
5*55b201a8SIan Rogers        "MetricGroup": "PGO;TopdownL1;tma_L1_group",
6*55b201a8SIan Rogers        "MetricName": "tma_frontend_bound",
7*55b201a8SIan Rogers        "PublicDescription": "This category represents fraction of slots where the processor's Frontend undersupplies its Backend. Frontend denotes the first part of the processor core responsible to fetch operations that are executed later on by the Backend part. Within the Frontend; a branch predictor predicts the next address to fetch; cache-lines are fetched from the memory subsystem; parsed into instructions; and lastly decoded into micro-operations (uops). Ideally the Frontend can issue Machine_Width uops every cycle to the Backend. Frontend Bound denotes unutilized issue-slots when there is no Backend stall; i.e. bubbles where Frontend delivered no uops while Backend could have accepted them. For example; stalls due to instruction-cache misses would be categorized under Frontend Bound. Sample with: FRONTEND_RETIRED.LATENCY_GE_4_PS",
8*55b201a8SIan Rogers        "ScaleUnit": "100%"
949898fefSIan Rogers    },
1049898fefSIan Rogers    {
11*55b201a8SIan Rogers        "BriefDescription": "This metric represents fraction of slots the CPU was stalled due to Frontend latency issues",
12*55b201a8SIan Rogers        "MetricExpr": "4 * IDQ_UOPS_NOT_DELIVERED.CYCLES_0_UOPS_DELIV.CORE / SLOTS",
13*55b201a8SIan Rogers        "MetricGroup": "Frontend;TopdownL2;tma_L2_group;tma_frontend_bound_group",
14*55b201a8SIan Rogers        "MetricName": "tma_fetch_latency",
15*55b201a8SIan Rogers        "PublicDescription": "This metric represents fraction of slots the CPU was stalled due to Frontend latency issues.  For example; instruction-cache misses; iTLB misses or fetch stalls after a branch misprediction are categorized under Frontend Latency. In such cases; the Frontend eventually delivers no uops for some period. Sample with: FRONTEND_RETIRED.LATENCY_GE_16_PS;FRONTEND_RETIRED.LATENCY_GE_8_PS",
16*55b201a8SIan Rogers        "ScaleUnit": "100%"
17*55b201a8SIan Rogers    },
18*55b201a8SIan Rogers    {
19*55b201a8SIan Rogers        "BriefDescription": "This metric represents fraction of cycles the CPU was stalled due to instruction cache misses",
20*55b201a8SIan Rogers        "MetricExpr": "(ICACHE_16B.IFDATA_STALL + 2 * cpu@ICACHE_16B.IFDATA_STALL\\,cmask\\=1\\,edge@) / CLKS",
21*55b201a8SIan Rogers        "MetricGroup": "BigFoot;FetchLat;IcMiss;TopdownL3;tma_fetch_latency_group",
22*55b201a8SIan Rogers        "MetricName": "tma_icache_misses",
23*55b201a8SIan Rogers        "PublicDescription": "This metric represents fraction of cycles the CPU was stalled due to instruction cache misses. Sample with: FRONTEND_RETIRED.L2_MISS_PS;FRONTEND_RETIRED.L1I_MISS_PS",
24*55b201a8SIan Rogers        "ScaleUnit": "100%"
25*55b201a8SIan Rogers    },
26*55b201a8SIan Rogers    {
27*55b201a8SIan Rogers        "BriefDescription": "This metric represents fraction of cycles the CPU was stalled due to Instruction TLB (ITLB) misses",
28*55b201a8SIan Rogers        "MetricExpr": "ICACHE_64B.IFTAG_STALL / CLKS",
29*55b201a8SIan Rogers        "MetricGroup": "BigFoot;FetchLat;MemoryTLB;TopdownL3;tma_fetch_latency_group",
30*55b201a8SIan Rogers        "MetricName": "tma_itlb_misses",
31*55b201a8SIan Rogers        "PublicDescription": "This metric represents fraction of cycles the CPU was stalled due to Instruction TLB (ITLB) misses. Sample with: FRONTEND_RETIRED.STLB_MISS_PS;FRONTEND_RETIRED.ITLB_MISS_PS",
32*55b201a8SIan Rogers        "ScaleUnit": "100%"
33*55b201a8SIan Rogers    },
34*55b201a8SIan Rogers    {
35*55b201a8SIan Rogers        "BriefDescription": "This metric represents fraction of cycles the CPU was stalled due to Branch Resteers",
36*55b201a8SIan Rogers        "MetricExpr": "INT_MISC.CLEAR_RESTEER_CYCLES / CLKS + tma_unknown_branches",
37*55b201a8SIan Rogers        "MetricGroup": "FetchLat;TopdownL3;tma_fetch_latency_group",
38*55b201a8SIan Rogers        "MetricName": "tma_branch_resteers",
39*55b201a8SIan Rogers        "PublicDescription": "This metric represents fraction of cycles the CPU was stalled due to Branch Resteers. Branch Resteers estimates the Frontend delay in fetching operations from corrected path; following all sorts of miss-predicted branches. For example; branchy code with lots of miss-predictions might get categorized under Branch Resteers. Note the value of this node may overlap with its siblings. Sample with: BR_MISP_RETIRED.ALL_BRANCHES",
40*55b201a8SIan Rogers        "ScaleUnit": "100%"
41*55b201a8SIan Rogers    },
42*55b201a8SIan Rogers    {
43*55b201a8SIan Rogers        "BriefDescription": "This metric represents fraction of cycles the CPU was stalled due to Branch Resteers as a result of Branch Misprediction at execution stage",
44*55b201a8SIan Rogers        "MetricExpr": "(BR_MISP_RETIRED.ALL_BRANCHES / (BR_MISP_RETIRED.ALL_BRANCHES + MACHINE_CLEARS.COUNT)) * INT_MISC.CLEAR_RESTEER_CYCLES / CLKS",
45*55b201a8SIan Rogers        "MetricGroup": "BadSpec;BrMispredicts;TopdownL4;tma_branch_resteers_group",
46*55b201a8SIan Rogers        "MetricName": "tma_mispredicts_resteers",
47*55b201a8SIan Rogers        "PublicDescription": "This metric represents fraction of cycles the CPU was stalled due to Branch Resteers as a result of Branch Misprediction at execution stage.  Sample with: INT_MISC.CLEAR_RESTEER_CYCLES",
48*55b201a8SIan Rogers        "ScaleUnit": "100%"
49*55b201a8SIan Rogers    },
50*55b201a8SIan Rogers    {
51*55b201a8SIan Rogers        "BriefDescription": "This metric represents fraction of cycles the CPU was stalled due to Branch Resteers as a result of Machine Clears",
52*55b201a8SIan Rogers        "MetricExpr": "(1 - (BR_MISP_RETIRED.ALL_BRANCHES / (BR_MISP_RETIRED.ALL_BRANCHES + MACHINE_CLEARS.COUNT))) * INT_MISC.CLEAR_RESTEER_CYCLES / CLKS",
53*55b201a8SIan Rogers        "MetricGroup": "BadSpec;MachineClears;TopdownL4;tma_branch_resteers_group",
54*55b201a8SIan Rogers        "MetricName": "tma_clears_resteers",
55*55b201a8SIan Rogers        "PublicDescription": "This metric represents fraction of cycles the CPU was stalled due to Branch Resteers as a result of Machine Clears.  Sample with: INT_MISC.CLEAR_RESTEER_CYCLES",
56*55b201a8SIan Rogers        "ScaleUnit": "100%"
57*55b201a8SIan Rogers    },
58*55b201a8SIan Rogers    {
59*55b201a8SIan Rogers        "BriefDescription": "This metric represents fraction of cycles the CPU was stalled due to new branch address clears",
60*55b201a8SIan Rogers        "MetricExpr": "9 * BACLEARS.ANY / CLKS",
61*55b201a8SIan Rogers        "MetricGroup": "BigFoot;FetchLat;TopdownL4;tma_branch_resteers_group",
62*55b201a8SIan Rogers        "MetricName": "tma_unknown_branches",
63*55b201a8SIan Rogers        "PublicDescription": "This metric represents fraction of cycles the CPU was stalled due to new branch address clears. These are fetched branches the Branch Prediction Unit was unable to recognize (First fetch or hitting BPU capacity limit). Sample with: BACLEARS.ANY",
64*55b201a8SIan Rogers        "ScaleUnit": "100%"
65*55b201a8SIan Rogers    },
66*55b201a8SIan Rogers    {
67*55b201a8SIan Rogers        "BriefDescription": "This metric represents fraction of cycles the CPU was stalled due to switches from DSB to MITE pipelines",
68*55b201a8SIan Rogers        "MetricExpr": "DSB2MITE_SWITCHES.PENALTY_CYCLES / CLKS",
69*55b201a8SIan Rogers        "MetricGroup": "DSBmiss;FetchLat;TopdownL3;tma_fetch_latency_group",
70*55b201a8SIan Rogers        "MetricName": "tma_dsb_switches",
71*55b201a8SIan Rogers        "PublicDescription": "This metric represents fraction of cycles the CPU was stalled due to switches from DSB to MITE pipelines. The DSB (decoded i-cache) is a Uop Cache where the front-end directly delivers Uops (micro operations) avoiding heavy x86 decoding. The DSB pipeline has shorter latency and delivered higher bandwidth than the MITE (legacy instruction decode pipeline). Switching between the two pipelines can cause penalties hence this metric measures the exposed penalty. Sample with: FRONTEND_RETIRED.DSB_MISS_PS",
72*55b201a8SIan Rogers        "ScaleUnit": "100%"
73*55b201a8SIan Rogers    },
74*55b201a8SIan Rogers    {
75*55b201a8SIan Rogers        "BriefDescription": "This metric represents fraction of cycles CPU was stalled due to Length Changing Prefixes (LCPs)",
76*55b201a8SIan Rogers        "MetricExpr": "ILD_STALL.LCP / CLKS",
77*55b201a8SIan Rogers        "MetricGroup": "FetchLat;TopdownL3;tma_fetch_latency_group",
78*55b201a8SIan Rogers        "MetricName": "tma_lcp",
79*55b201a8SIan Rogers        "PublicDescription": "This metric represents fraction of cycles CPU was stalled due to Length Changing Prefixes (LCPs). Using proper compiler flags or Intel Compiler by default will certainly avoid this. #Link: Optimization Guide about LCP BKMs.",
80*55b201a8SIan Rogers        "ScaleUnit": "100%"
81*55b201a8SIan Rogers    },
82*55b201a8SIan Rogers    {
83*55b201a8SIan Rogers        "BriefDescription": "This metric estimates the fraction of cycles when the CPU was stalled due to switches of uop delivery to the Microcode Sequencer (MS)",
84*55b201a8SIan Rogers        "MetricExpr": "2 * IDQ.MS_SWITCHES / CLKS",
85*55b201a8SIan Rogers        "MetricGroup": "FetchLat;MicroSeq;TopdownL3;tma_fetch_latency_group",
86*55b201a8SIan Rogers        "MetricName": "tma_ms_switches",
87*55b201a8SIan Rogers        "PublicDescription": "This metric estimates the fraction of cycles when the CPU was stalled due to switches of uop delivery to the Microcode Sequencer (MS). Commonly used instructions are optimized for delivery by the DSB (decoded i-cache) or MITE (legacy instruction decode) pipelines. Certain operations cannot be handled natively by the execution pipeline; and must be performed by microcode (small programs injected into the execution stream). Switching to the MS too often can negatively impact performance. The MS is designated to deliver long uop flows required by CISC instructions like CPUID; or uncommon conditions like Floating Point Assists when dealing with Denormals. Sample with: IDQ.MS_SWITCHES",
88*55b201a8SIan Rogers        "ScaleUnit": "100%"
89*55b201a8SIan Rogers    },
90*55b201a8SIan Rogers    {
91*55b201a8SIan Rogers        "BriefDescription": "This metric represents fraction of slots the CPU was stalled due to Frontend bandwidth issues",
92*55b201a8SIan Rogers        "MetricExpr": "tma_frontend_bound - tma_fetch_latency",
93*55b201a8SIan Rogers        "MetricGroup": "FetchBW;Frontend;TopdownL2;tma_L2_group;tma_frontend_bound_group",
94*55b201a8SIan Rogers        "MetricName": "tma_fetch_bandwidth",
95*55b201a8SIan Rogers        "PublicDescription": "This metric represents fraction of slots the CPU was stalled due to Frontend bandwidth issues.  For example; inefficiencies at the instruction decoders; or restrictions for caching in the DSB (decoded uops cache) are categorized under Fetch Bandwidth. In such cases; the Frontend typically delivers suboptimal amount of uops to the Backend. Sample with: FRONTEND_RETIRED.LATENCY_GE_2_BUBBLES_GE_1_PS;FRONTEND_RETIRED.LATENCY_GE_1_PS;FRONTEND_RETIRED.LATENCY_GE_2_PS",
96*55b201a8SIan Rogers        "ScaleUnit": "100%"
97*55b201a8SIan Rogers    },
98*55b201a8SIan Rogers    {
99*55b201a8SIan Rogers        "BriefDescription": "This metric represents Core fraction of cycles in which CPU was likely limited due to the MITE pipeline (the legacy decode pipeline)",
100*55b201a8SIan Rogers        "MetricExpr": "(IDQ.ALL_MITE_CYCLES_ANY_UOPS - IDQ.ALL_MITE_CYCLES_4_UOPS) / CORE_CLKS / 2",
101*55b201a8SIan Rogers        "MetricGroup": "DSBmiss;FetchBW;TopdownL3;tma_fetch_bandwidth_group",
102*55b201a8SIan Rogers        "MetricName": "tma_mite",
103*55b201a8SIan Rogers        "PublicDescription": "This metric represents Core fraction of cycles in which CPU was likely limited due to the MITE pipeline (the legacy decode pipeline). This pipeline is used for code that was not pre-cached in the DSB or LSD. For example; inefficiencies due to asymmetric decoders; use of long immediate or LCP can manifest as MITE fetch bandwidth bottleneck. Sample with: FRONTEND_RETIRED.ANY_DSB_MISS",
104*55b201a8SIan Rogers        "ScaleUnit": "100%"
105*55b201a8SIan Rogers    },
106*55b201a8SIan Rogers    {
107*55b201a8SIan Rogers        "BriefDescription": "This metric represents fraction of cycles where decoder-0 was the only active decoder",
108*55b201a8SIan Rogers        "MetricExpr": "(cpu@INST_DECODED.DECODERS\\,cmask\\=1@ - cpu@INST_DECODED.DECODERS\\,cmask\\=2@) / CORE_CLKS",
109*55b201a8SIan Rogers        "MetricGroup": "DSBmiss;FetchBW;TopdownL4;tma_mite_group",
110*55b201a8SIan Rogers        "MetricName": "tma_decoder0_alone",
111*55b201a8SIan Rogers        "ScaleUnit": "100%"
112*55b201a8SIan Rogers    },
113*55b201a8SIan Rogers    {
114*55b201a8SIan Rogers        "BriefDescription": "This metric represents Core fraction of cycles in which CPU was likely limited due to DSB (decoded uop cache) fetch pipeline",
115*55b201a8SIan Rogers        "MetricExpr": "(IDQ.ALL_DSB_CYCLES_ANY_UOPS - IDQ.ALL_DSB_CYCLES_4_UOPS) / CORE_CLKS / 2",
116*55b201a8SIan Rogers        "MetricGroup": "DSB;FetchBW;TopdownL3;tma_fetch_bandwidth_group",
117*55b201a8SIan Rogers        "MetricName": "tma_dsb",
118*55b201a8SIan Rogers        "PublicDescription": "This metric represents Core fraction of cycles in which CPU was likely limited due to DSB (decoded uop cache) fetch pipeline.  For example; inefficient utilization of the DSB cache structure or bank conflict when reading from it; are categorized here.",
119*55b201a8SIan Rogers        "ScaleUnit": "100%"
12049898fefSIan Rogers    },
12149898fefSIan Rogers    {
12249898fefSIan Rogers        "BriefDescription": "This category represents fraction of slots wasted due to incorrect speculations",
123*55b201a8SIan Rogers        "MetricExpr": "(UOPS_ISSUED.ANY - UOPS_RETIRED.RETIRE_SLOTS + 4 * ((INT_MISC.RECOVERY_CYCLES_ANY / 2) if #SMT_on else INT_MISC.RECOVERY_CYCLES)) / SLOTS",
124*55b201a8SIan Rogers        "MetricGroup": "TopdownL1;tma_L1_group",
125*55b201a8SIan Rogers        "MetricName": "tma_bad_speculation",
126*55b201a8SIan Rogers        "PublicDescription": "This category represents fraction of slots wasted due to incorrect speculations. This include slots used to issue uops that do not eventually get retired and slots for which the issue-pipeline was blocked due to recovery from earlier incorrect speculation. For example; wasted work due to miss-predicted branches are categorized under Bad Speculation category. Incorrect data speculation followed by Memory Ordering Nukes is another example.",
127*55b201a8SIan Rogers        "ScaleUnit": "100%"
12849898fefSIan Rogers    },
12949898fefSIan Rogers    {
130*55b201a8SIan Rogers        "BriefDescription": "This metric represents fraction of slots the CPU has wasted due to Branch Misprediction",
131*55b201a8SIan Rogers        "MetricExpr": "(BR_MISP_RETIRED.ALL_BRANCHES / (BR_MISP_RETIRED.ALL_BRANCHES + MACHINE_CLEARS.COUNT)) * tma_bad_speculation",
132*55b201a8SIan Rogers        "MetricGroup": "BadSpec;BrMispredicts;TopdownL2;tma_L2_group;tma_bad_speculation_group",
133*55b201a8SIan Rogers        "MetricName": "tma_branch_mispredicts",
134*55b201a8SIan Rogers        "PublicDescription": "This metric represents fraction of slots the CPU has wasted due to Branch Misprediction.  These slots are either wasted by uops fetched from an incorrectly speculated program path; or stalls when the out-of-order part of the machine needs to recover its state from a speculative path. Sample with: BR_MISP_RETIRED.ALL_BRANCHES",
135*55b201a8SIan Rogers        "ScaleUnit": "100%"
136*55b201a8SIan Rogers    },
137*55b201a8SIan Rogers    {
138*55b201a8SIan Rogers        "BriefDescription": "This metric represents fraction of slots the CPU has wasted due to Machine Clears",
139*55b201a8SIan Rogers        "MetricExpr": "tma_bad_speculation - tma_branch_mispredicts",
140*55b201a8SIan Rogers        "MetricGroup": "BadSpec;MachineClears;TopdownL2;tma_L2_group;tma_bad_speculation_group",
141*55b201a8SIan Rogers        "MetricName": "tma_machine_clears",
142*55b201a8SIan Rogers        "PublicDescription": "This metric represents fraction of slots the CPU has wasted due to Machine Clears.  These slots are either wasted by uops fetched prior to the clear; or stalls the out-of-order portion of the machine needs to recover its state after the clear. For example; this can happen due to memory ordering Nukes (e.g. Memory Disambiguation) or Self-Modifying-Code (SMC) nukes. Sample with: MACHINE_CLEARS.COUNT",
143*55b201a8SIan Rogers        "ScaleUnit": "100%"
14449898fefSIan Rogers    },
14549898fefSIan Rogers    {
14649898fefSIan Rogers        "BriefDescription": "This category represents fraction of slots where no uops are being delivered due to a lack of required resources for accepting new uops in the Backend",
147*55b201a8SIan Rogers        "MetricExpr": "1 - tma_frontend_bound - (UOPS_ISSUED.ANY + 4 * ((INT_MISC.RECOVERY_CYCLES_ANY / 2) if #SMT_on else INT_MISC.RECOVERY_CYCLES)) / SLOTS",
148*55b201a8SIan Rogers        "MetricGroup": "TopdownL1;tma_L1_group",
149*55b201a8SIan Rogers        "MetricName": "tma_backend_bound",
150*55b201a8SIan Rogers        "PublicDescription": "This category represents fraction of slots where no uops are being delivered due to a lack of required resources for accepting new uops in the Backend. Backend is the portion of the processor core where the out-of-order scheduler dispatches ready uops into their respective execution units; and once completed these uops get retired according to program order. For example; stalls due to data-cache misses or stalls due to the divider unit being overloaded are both categorized under Backend Bound. Backend Bound is further divided into two main categories: Memory Bound and Core Bound.",
151*55b201a8SIan Rogers        "ScaleUnit": "100%"
15249898fefSIan Rogers    },
15349898fefSIan Rogers    {
154*55b201a8SIan Rogers        "BriefDescription": "This metric represents fraction of slots the Memory subsystem within the Backend was a bottleneck",
155*55b201a8SIan Rogers        "MetricExpr": "((CYCLE_ACTIVITY.STALLS_MEM_ANY + EXE_ACTIVITY.BOUND_ON_STORES) / (CYCLE_ACTIVITY.STALLS_TOTAL + (EXE_ACTIVITY.1_PORTS_UTIL + tma_retiring * EXE_ACTIVITY.2_PORTS_UTIL) + EXE_ACTIVITY.BOUND_ON_STORES)) * tma_backend_bound",
156*55b201a8SIan Rogers        "MetricGroup": "Backend;TopdownL2;tma_L2_group;tma_backend_bound_group",
157*55b201a8SIan Rogers        "MetricName": "tma_memory_bound",
158*55b201a8SIan Rogers        "PublicDescription": "This metric represents fraction of slots the Memory subsystem within the Backend was a bottleneck.  Memory Bound estimates fraction of slots where pipeline is likely stalled due to demand load or store instructions. This accounts mainly for (1) non-completed in-flight memory demand loads which coincides with execution units starvation; in addition to (2) cases where stores could impose backpressure on the pipeline when many of them get buffered at the same time (less common out of the two).",
159*55b201a8SIan Rogers        "ScaleUnit": "100%"
160*55b201a8SIan Rogers    },
161*55b201a8SIan Rogers    {
162*55b201a8SIan Rogers        "BriefDescription": "This metric estimates how often the CPU was stalled without loads missing the L1 data cache",
163*55b201a8SIan Rogers        "MetricExpr": "max((CYCLE_ACTIVITY.STALLS_MEM_ANY - CYCLE_ACTIVITY.STALLS_L1D_MISS) / CLKS, 0)",
164*55b201a8SIan Rogers        "MetricGroup": "CacheMisses;MemoryBound;TmaL3mem;TopdownL3;tma_memory_bound_group",
165*55b201a8SIan Rogers        "MetricName": "tma_l1_bound",
166*55b201a8SIan Rogers        "PublicDescription": "This metric estimates how often the CPU was stalled without loads missing the L1 data cache.  The L1 data cache typically has the shortest latency.  However; in certain cases like loads blocked on older stores; a load might suffer due to high latency even though it is being satisfied by the L1. Another example is loads who miss in the TLB. These cases are characterized by execution unit stalls; while some non-completed demand load lives in the machine without having that demand load missing the L1 cache. Sample with: MEM_LOAD_RETIRED.L1_HIT_PS;MEM_LOAD_RETIRED.FB_HIT_PS",
167*55b201a8SIan Rogers        "ScaleUnit": "100%"
168*55b201a8SIan Rogers    },
169*55b201a8SIan Rogers    {
170*55b201a8SIan Rogers        "BriefDescription": "This metric roughly estimates the fraction of cycles where the Data TLB (DTLB) was missed by load accesses",
171*55b201a8SIan Rogers        "MetricExpr": "min(9 * cpu@DTLB_LOAD_MISSES.STLB_HIT\\,cmask\\=1@ + DTLB_LOAD_MISSES.WALK_ACTIVE, max(CYCLE_ACTIVITY.CYCLES_MEM_ANY - CYCLE_ACTIVITY.CYCLES_L1D_MISS, 0)) / CLKS",
172*55b201a8SIan Rogers        "MetricGroup": "MemoryTLB;TopdownL4;tma_l1_bound_group",
173*55b201a8SIan Rogers        "MetricName": "tma_dtlb_load",
174*55b201a8SIan Rogers        "PublicDescription": "This metric roughly estimates the fraction of cycles where the Data TLB (DTLB) was missed by load accesses. TLBs (Translation Look-aside Buffers) are processor caches for recently used entries out of the Page Tables that are used to map virtual- to physical-addresses by the operating system. This metric approximates the potential delay of demand loads missing the first-level data TLB (assuming worst case scenario with back to back misses to different pages). This includes hitting in the second-level TLB (STLB) as well as performing a hardware page walk on an STLB miss. Sample with: MEM_INST_RETIRED.STLB_MISS_LOADS_PS",
175*55b201a8SIan Rogers        "ScaleUnit": "100%"
176*55b201a8SIan Rogers    },
177*55b201a8SIan Rogers    {
178*55b201a8SIan Rogers        "BriefDescription": "This metric roughly estimates the fraction of cycles where the (first level) DTLB was missed by load accesses, that later on hit in second-level TLB (STLB)",
179*55b201a8SIan Rogers        "MetricExpr": "tma_dtlb_load - tma_load_stlb_miss",
180*55b201a8SIan Rogers        "MetricGroup": "MemoryTLB;TopdownL5;tma_dtlb_load_group",
181*55b201a8SIan Rogers        "MetricName": "tma_load_stlb_hit",
182*55b201a8SIan Rogers        "ScaleUnit": "100%"
183*55b201a8SIan Rogers    },
184*55b201a8SIan Rogers    {
185*55b201a8SIan Rogers        "BriefDescription": "This metric estimates the fraction of cycles where the Second-level TLB (STLB) was missed by load accesses, performing a hardware page walk",
186*55b201a8SIan Rogers        "MetricExpr": "DTLB_LOAD_MISSES.WALK_ACTIVE / CLKS",
187*55b201a8SIan Rogers        "MetricGroup": "MemoryTLB;TopdownL5;tma_dtlb_load_group",
188*55b201a8SIan Rogers        "MetricName": "tma_load_stlb_miss",
189*55b201a8SIan Rogers        "ScaleUnit": "100%"
190*55b201a8SIan Rogers    },
191*55b201a8SIan Rogers    {
192*55b201a8SIan Rogers        "BriefDescription": "This metric roughly estimates fraction of cycles when the memory subsystem had loads blocked since they could not forward data from earlier (in program order) overlapping stores",
193*55b201a8SIan Rogers        "MetricExpr": "13 * LD_BLOCKS.STORE_FORWARD / CLKS",
194*55b201a8SIan Rogers        "MetricGroup": "TopdownL4;tma_l1_bound_group",
195*55b201a8SIan Rogers        "MetricName": "tma_store_fwd_blk",
196*55b201a8SIan Rogers        "PublicDescription": "This metric roughly estimates fraction of cycles when the memory subsystem had loads blocked since they could not forward data from earlier (in program order) overlapping stores. To streamline memory operations in the pipeline; a load can avoid waiting for memory if a prior in-flight store is writing the data that the load wants to read (store forwarding process). However; in some cases the load may be blocked for a significant time pending the store forward. For example; when the prior store is writing a smaller region than the load is reading.",
197*55b201a8SIan Rogers        "ScaleUnit": "100%"
198*55b201a8SIan Rogers    },
199*55b201a8SIan Rogers    {
200*55b201a8SIan Rogers        "BriefDescription": "This metric represents fraction of cycles the CPU spent handling cache misses due to lock operations",
201*55b201a8SIan Rogers        "MetricExpr": "(12 * max(0, MEM_INST_RETIRED.LOCK_LOADS - L2_RQSTS.ALL_RFO) + (MEM_INST_RETIRED.LOCK_LOADS / MEM_INST_RETIRED.ALL_STORES) * (11 * L2_RQSTS.RFO_HIT + min(CPU_CLK_UNHALTED.THREAD, OFFCORE_REQUESTS_OUTSTANDING.CYCLES_WITH_DEMAND_RFO))) / CLKS",
202*55b201a8SIan Rogers        "MetricGroup": "Offcore;TopdownL4;tma_l1_bound_group",
203*55b201a8SIan Rogers        "MetricName": "tma_lock_latency",
204*55b201a8SIan Rogers        "PublicDescription": "This metric represents fraction of cycles the CPU spent handling cache misses due to lock operations. Due to the microarchitecture handling of locks; they are classified as L1_Bound regardless of what memory source satisfied them. Sample with: MEM_INST_RETIRED.LOCK_LOADS_PS",
205*55b201a8SIan Rogers        "ScaleUnit": "100%"
206*55b201a8SIan Rogers    },
207*55b201a8SIan Rogers    {
208*55b201a8SIan Rogers        "BriefDescription": "This metric estimates fraction of cycles handling memory load split accesses - load that cross 64-byte cache line boundary",
209*55b201a8SIan Rogers        "MetricExpr": "Load_Miss_Real_Latency * LD_BLOCKS.NO_SR / CLKS",
210*55b201a8SIan Rogers        "MetricGroup": "TopdownL4;tma_l1_bound_group",
211*55b201a8SIan Rogers        "MetricName": "tma_split_loads",
212*55b201a8SIan Rogers        "PublicDescription": "This metric estimates fraction of cycles handling memory load split accesses - load that cross 64-byte cache line boundary.  Sample with: MEM_INST_RETIRED.SPLIT_LOADS_PS",
213*55b201a8SIan Rogers        "ScaleUnit": "100%"
214*55b201a8SIan Rogers    },
215*55b201a8SIan Rogers    {
216*55b201a8SIan Rogers        "BriefDescription": "This metric estimates how often memory load accesses were aliased by preceding stores (in program order) with a 4K address offset",
217*55b201a8SIan Rogers        "MetricExpr": "LD_BLOCKS_PARTIAL.ADDRESS_ALIAS / CLKS",
218*55b201a8SIan Rogers        "MetricGroup": "TopdownL4;tma_l1_bound_group",
219*55b201a8SIan Rogers        "MetricName": "tma_4k_aliasing",
220*55b201a8SIan Rogers        "PublicDescription": "This metric estimates how often memory load accesses were aliased by preceding stores (in program order) with a 4K address offset. False match is possible; which incur a few cycles load re-issue. However; the short re-issue duration is often hidden by the out-of-order core and HW optimizations; hence a user may safely ignore a high value of this metric unless it manages to propagate up into parent nodes of the hierarchy (e.g. to L1_Bound).",
221*55b201a8SIan Rogers        "ScaleUnit": "100%"
222*55b201a8SIan Rogers    },
223*55b201a8SIan Rogers    {
224*55b201a8SIan Rogers        "BriefDescription": "This metric does a *rough estimation* of how often L1D Fill Buffer unavailability limited additional L1D miss memory access requests to proceed",
225*55b201a8SIan Rogers        "MetricExpr": "Load_Miss_Real_Latency * cpu@L1D_PEND_MISS.FB_FULL\\,cmask\\=1@ / CLKS",
226*55b201a8SIan Rogers        "MetricGroup": "MemoryBW;TopdownL4;tma_l1_bound_group",
227*55b201a8SIan Rogers        "MetricName": "tma_fb_full",
228*55b201a8SIan Rogers        "PublicDescription": "This metric does a *rough estimation* of how often L1D Fill Buffer unavailability limited additional L1D miss memory access requests to proceed. The higher the metric value; the deeper the memory hierarchy level the misses are satisfied from (metric values >1 are valid). Often it hints on approaching bandwidth limits (to L2 cache; L3 cache or external memory).",
229*55b201a8SIan Rogers        "ScaleUnit": "100%"
230*55b201a8SIan Rogers    },
231*55b201a8SIan Rogers    {
232*55b201a8SIan Rogers        "BriefDescription": "This metric estimates how often the CPU was stalled due to L2 cache accesses by loads",
233*55b201a8SIan Rogers        "MetricExpr": "((MEM_LOAD_RETIRED.L2_HIT * (1 + (MEM_LOAD_RETIRED.FB_HIT / MEM_LOAD_RETIRED.L1_MISS))) / ((MEM_LOAD_RETIRED.L2_HIT * (1 + (MEM_LOAD_RETIRED.FB_HIT / MEM_LOAD_RETIRED.L1_MISS))) + cpu@L1D_PEND_MISS.FB_FULL\\,cmask\\=1@)) * ((CYCLE_ACTIVITY.STALLS_L1D_MISS - CYCLE_ACTIVITY.STALLS_L2_MISS) / CLKS)",
234*55b201a8SIan Rogers        "MetricGroup": "CacheMisses;MemoryBound;TmaL3mem;TopdownL3;tma_memory_bound_group",
235*55b201a8SIan Rogers        "MetricName": "tma_l2_bound",
236*55b201a8SIan Rogers        "PublicDescription": "This metric estimates how often the CPU was stalled due to L2 cache accesses by loads.  Avoiding cache misses (i.e. L1 misses/L2 hits) can improve the latency and increase performance. Sample with: MEM_LOAD_RETIRED.L2_HIT_PS",
237*55b201a8SIan Rogers        "ScaleUnit": "100%"
238*55b201a8SIan Rogers    },
239*55b201a8SIan Rogers    {
240*55b201a8SIan Rogers        "BriefDescription": "This metric estimates how often the CPU was stalled due to loads accesses to L3 cache or contended with a sibling Core",
241*55b201a8SIan Rogers        "MetricExpr": "(CYCLE_ACTIVITY.STALLS_L2_MISS - CYCLE_ACTIVITY.STALLS_L3_MISS) / CLKS",
242*55b201a8SIan Rogers        "MetricGroup": "CacheMisses;MemoryBound;TmaL3mem;TopdownL3;tma_memory_bound_group",
243*55b201a8SIan Rogers        "MetricName": "tma_l3_bound",
244*55b201a8SIan Rogers        "PublicDescription": "This metric estimates how often the CPU was stalled due to loads accesses to L3 cache or contended with a sibling Core.  Avoiding cache misses (i.e. L2 misses/L3 hits) can improve the latency and increase performance. Sample with: MEM_LOAD_RETIRED.L3_HIT_PS",
245*55b201a8SIan Rogers        "ScaleUnit": "100%"
246*55b201a8SIan Rogers    },
247*55b201a8SIan Rogers    {
248*55b201a8SIan Rogers        "BriefDescription": "This metric estimates fraction of cycles while the memory subsystem was handling synchronizations due to contested accesses",
249*55b201a8SIan Rogers        "MetricExpr": "((44 * Average_Frequency) * (MEM_LOAD_L3_HIT_RETIRED.XSNP_HITM * (OCR.DEMAND_DATA_RD.L3_HIT.HITM_OTHER_CORE / (OCR.DEMAND_DATA_RD.L3_HIT.HITM_OTHER_CORE + OCR.DEMAND_DATA_RD.L3_HIT.HIT_OTHER_CORE_FWD))) + (44 * Average_Frequency) * MEM_LOAD_L3_HIT_RETIRED.XSNP_MISS) * (1 + (MEM_LOAD_RETIRED.FB_HIT / MEM_LOAD_RETIRED.L1_MISS) / 2) / CLKS",
250*55b201a8SIan Rogers        "MetricGroup": "DataSharing;Offcore;Snoop;TopdownL4;tma_l3_bound_group",
251*55b201a8SIan Rogers        "MetricName": "tma_contested_accesses",
252*55b201a8SIan Rogers        "PublicDescription": "This metric estimates fraction of cycles while the memory subsystem was handling synchronizations due to contested accesses. Contested accesses occur when data written by one Logical Processor are read by another Logical Processor on a different Physical Core. Examples of contested accesses include synchronizations such as locks; true data sharing such as modified locked variables; and false sharing. Sample with: MEM_LOAD_L3_HIT_RETIRED.XSNP_HITM_PS;MEM_LOAD_L3_HIT_RETIRED.XSNP_MISS_PS",
253*55b201a8SIan Rogers        "ScaleUnit": "100%"
254*55b201a8SIan Rogers    },
255*55b201a8SIan Rogers    {
256*55b201a8SIan Rogers        "BriefDescription": "This metric estimates fraction of cycles while the memory subsystem was handling synchronizations due to data-sharing accesses",
257*55b201a8SIan Rogers        "MetricExpr": "(44 * Average_Frequency) * (MEM_LOAD_L3_HIT_RETIRED.XSNP_HIT + MEM_LOAD_L3_HIT_RETIRED.XSNP_HITM * (1 - (OCR.DEMAND_DATA_RD.L3_HIT.HITM_OTHER_CORE / (OCR.DEMAND_DATA_RD.L3_HIT.HITM_OTHER_CORE + OCR.DEMAND_DATA_RD.L3_HIT.HIT_OTHER_CORE_FWD)))) * (1 + (MEM_LOAD_RETIRED.FB_HIT / MEM_LOAD_RETIRED.L1_MISS) / 2) / CLKS",
258*55b201a8SIan Rogers        "MetricGroup": "Offcore;Snoop;TopdownL4;tma_l3_bound_group",
259*55b201a8SIan Rogers        "MetricName": "tma_data_sharing",
260*55b201a8SIan Rogers        "PublicDescription": "This metric estimates fraction of cycles while the memory subsystem was handling synchronizations due to data-sharing accesses. Data shared by multiple Logical Processors (even just read shared) may cause increased access latency due to cache coherency. Excessive data sharing can drastically harm multithreaded performance. Sample with: MEM_LOAD_L3_HIT_RETIRED.XSNP_HIT_PS",
261*55b201a8SIan Rogers        "ScaleUnit": "100%"
262*55b201a8SIan Rogers    },
263*55b201a8SIan Rogers    {
264*55b201a8SIan Rogers        "BriefDescription": "This metric represents fraction of cycles with demand load accesses that hit the L3 cache under unloaded scenarios (possibly L3 latency limited)",
265*55b201a8SIan Rogers        "MetricExpr": "(17 * Average_Frequency) * MEM_LOAD_RETIRED.L3_HIT * (1 + (MEM_LOAD_RETIRED.FB_HIT / MEM_LOAD_RETIRED.L1_MISS) / 2) / CLKS",
266*55b201a8SIan Rogers        "MetricGroup": "MemoryLat;TopdownL4;tma_l3_bound_group",
267*55b201a8SIan Rogers        "MetricName": "tma_l3_hit_latency",
268*55b201a8SIan Rogers        "PublicDescription": "This metric represents fraction of cycles with demand load accesses that hit the L3 cache under unloaded scenarios (possibly L3 latency limited).  Avoiding private cache misses (i.e. L2 misses/L3 hits) will improve the latency; reduce contention with sibling physical cores and increase performance.  Note the value of this node may overlap with its siblings. Sample with: MEM_LOAD_RETIRED.L3_HIT_PS",
269*55b201a8SIan Rogers        "ScaleUnit": "100%"
270*55b201a8SIan Rogers    },
271*55b201a8SIan Rogers    {
272*55b201a8SIan Rogers        "BriefDescription": "This metric measures fraction of cycles where the Super Queue (SQ) was full taking into account all request-types and both hardware SMT threads (Logical Processors)",
273*55b201a8SIan Rogers        "MetricExpr": "((OFFCORE_REQUESTS_BUFFER.SQ_FULL / 2) if #SMT_on else OFFCORE_REQUESTS_BUFFER.SQ_FULL) / CORE_CLKS",
274*55b201a8SIan Rogers        "MetricGroup": "MemoryBW;Offcore;TopdownL4;tma_l3_bound_group",
275*55b201a8SIan Rogers        "MetricName": "tma_sq_full",
276*55b201a8SIan Rogers        "PublicDescription": "This metric measures fraction of cycles where the Super Queue (SQ) was full taking into account all request-types and both hardware SMT threads (Logical Processors). The Super Queue is used for requests to access the L2 cache or to go out to the Uncore.",
277*55b201a8SIan Rogers        "ScaleUnit": "100%"
278*55b201a8SIan Rogers    },
279*55b201a8SIan Rogers    {
280*55b201a8SIan Rogers        "BriefDescription": "This metric estimates how often the CPU was stalled on accesses to external memory (DRAM) by loads",
281*55b201a8SIan Rogers        "MetricExpr": "((CYCLE_ACTIVITY.STALLS_L3_MISS / CLKS + ((CYCLE_ACTIVITY.STALLS_L1D_MISS - CYCLE_ACTIVITY.STALLS_L2_MISS) / CLKS) - tma_l2_bound) - tma_pmm_bound)",
282*55b201a8SIan Rogers        "MetricGroup": "MemoryBound;TmaL3mem;TopdownL3;tma_memory_bound_group",
283*55b201a8SIan Rogers        "MetricName": "tma_dram_bound",
284*55b201a8SIan Rogers        "PublicDescription": "This metric estimates how often the CPU was stalled on accesses to external memory (DRAM) by loads. Better caching can improve the latency and increase performance. Sample with: MEM_LOAD_RETIRED.L3_MISS_PS",
285*55b201a8SIan Rogers        "ScaleUnit": "100%"
286*55b201a8SIan Rogers    },
287*55b201a8SIan Rogers    {
288*55b201a8SIan Rogers        "BriefDescription": "This metric estimates fraction of cycles where the core's performance was likely hurt due to approaching bandwidth limits of external memory (DRAM)",
289*55b201a8SIan Rogers        "MetricExpr": "min(CPU_CLK_UNHALTED.THREAD, cpu@OFFCORE_REQUESTS_OUTSTANDING.ALL_DATA_RD\\,cmask\\=4@) / CLKS",
290*55b201a8SIan Rogers        "MetricGroup": "MemoryBW;Offcore;TopdownL4;tma_dram_bound_group",
291*55b201a8SIan Rogers        "MetricName": "tma_mem_bandwidth",
292*55b201a8SIan Rogers        "PublicDescription": "This metric estimates fraction of cycles where the core's performance was likely hurt due to approaching bandwidth limits of external memory (DRAM).  The underlying heuristic assumes that a similar off-core traffic is generated by all IA cores. This metric does not aggregate non-data-read requests by this logical processor; requests from other IA Logical Processors/Physical Cores/sockets; or other non-IA devices like GPU; hence the maximum external memory bandwidth limits may or may not be approached when this metric is flagged (see Uncore counters for that).",
293*55b201a8SIan Rogers        "ScaleUnit": "100%"
294*55b201a8SIan Rogers    },
295*55b201a8SIan Rogers    {
296*55b201a8SIan Rogers        "BriefDescription": "This metric estimates fraction of cycles where the performance was likely hurt due to latency from external memory (DRAM)",
297*55b201a8SIan Rogers        "MetricExpr": "min(CPU_CLK_UNHALTED.THREAD, OFFCORE_REQUESTS_OUTSTANDING.CYCLES_WITH_DATA_RD) / CLKS - tma_mem_bandwidth",
298*55b201a8SIan Rogers        "MetricGroup": "MemoryLat;Offcore;TopdownL4;tma_dram_bound_group",
299*55b201a8SIan Rogers        "MetricName": "tma_mem_latency",
300*55b201a8SIan Rogers        "PublicDescription": "This metric estimates fraction of cycles where the performance was likely hurt due to latency from external memory (DRAM).  This metric does not aggregate requests from other Logical Processors/Physical Cores/sockets (see Uncore counters for that).",
301*55b201a8SIan Rogers        "ScaleUnit": "100%"
302*55b201a8SIan Rogers    },
303*55b201a8SIan Rogers    {
304*55b201a8SIan Rogers        "BriefDescription": "This metric estimates fraction of cycles while the memory subsystem was handling loads from local memory",
305*55b201a8SIan Rogers        "MetricExpr": "(59.5 * Average_Frequency) * MEM_LOAD_L3_MISS_RETIRED.LOCAL_DRAM * (1 + (MEM_LOAD_RETIRED.FB_HIT / MEM_LOAD_RETIRED.L1_MISS) / 2) / CLKS",
306*55b201a8SIan Rogers        "MetricGroup": "Server;TopdownL5;tma_mem_latency_group",
307*55b201a8SIan Rogers        "MetricName": "tma_local_dram",
308*55b201a8SIan Rogers        "PublicDescription": "This metric estimates fraction of cycles while the memory subsystem was handling loads from local memory. Caching will improve the latency and increase performance. Sample with: MEM_LOAD_L3_MISS_RETIRED.LOCAL_DRAM_PS",
309*55b201a8SIan Rogers        "ScaleUnit": "100%"
310*55b201a8SIan Rogers    },
311*55b201a8SIan Rogers    {
312*55b201a8SIan Rogers        "BriefDescription": "This metric estimates fraction of cycles while the memory subsystem was handling loads from remote memory",
313*55b201a8SIan Rogers        "MetricExpr": "(127 * Average_Frequency) * MEM_LOAD_L3_MISS_RETIRED.REMOTE_DRAM * (1 + (MEM_LOAD_RETIRED.FB_HIT / MEM_LOAD_RETIRED.L1_MISS) / 2) / CLKS",
314*55b201a8SIan Rogers        "MetricGroup": "Server;Snoop;TopdownL5;tma_mem_latency_group",
315*55b201a8SIan Rogers        "MetricName": "tma_remote_dram",
316*55b201a8SIan Rogers        "PublicDescription": "This metric estimates fraction of cycles while the memory subsystem was handling loads from remote memory. This is caused often due to non-optimal NUMA allocations. #link to NUMA article Sample with: MEM_LOAD_L3_MISS_RETIRED.REMOTE_DRAM_PS",
317*55b201a8SIan Rogers        "ScaleUnit": "100%"
318*55b201a8SIan Rogers    },
319*55b201a8SIan Rogers    {
320*55b201a8SIan Rogers        "BriefDescription": "This metric estimates fraction of cycles while the memory subsystem was handling loads from remote cache in other sockets including synchronizations issues",
321*55b201a8SIan Rogers        "MetricExpr": "((89.5 * Average_Frequency) * MEM_LOAD_L3_MISS_RETIRED.REMOTE_HITM + (89.5 * Average_Frequency) * MEM_LOAD_L3_MISS_RETIRED.REMOTE_FWD) * (1 + (MEM_LOAD_RETIRED.FB_HIT / MEM_LOAD_RETIRED.L1_MISS) / 2) / CLKS",
322*55b201a8SIan Rogers        "MetricGroup": "Offcore;Server;Snoop;TopdownL5;tma_mem_latency_group",
323*55b201a8SIan Rogers        "MetricName": "tma_remote_cache",
324*55b201a8SIan Rogers        "PublicDescription": "This metric estimates fraction of cycles while the memory subsystem was handling loads from remote cache in other sockets including synchronizations issues. This is caused often due to non-optimal NUMA allocations. #link to NUMA article Sample with: MEM_LOAD_L3_MISS_RETIRED.REMOTE_HITM_PS;MEM_LOAD_L3_MISS_RETIRED.REMOTE_FWD_PS",
325*55b201a8SIan Rogers        "ScaleUnit": "100%"
326*55b201a8SIan Rogers    },
327*55b201a8SIan Rogers    {
328*55b201a8SIan Rogers        "BriefDescription": "This metric roughly estimates (based on idle latencies) how often the CPU was stalled on accesses to external 3D-Xpoint (Crystal Ridge, a.k.a",
329*55b201a8SIan Rogers        "MetricExpr": "(((1 - ((19 * (MEM_LOAD_L3_MISS_RETIRED.REMOTE_DRAM * (1 + (MEM_LOAD_RETIRED.FB_HIT / MEM_LOAD_RETIRED.L1_MISS))) + 10 * ((MEM_LOAD_L3_MISS_RETIRED.LOCAL_DRAM * (1 + (MEM_LOAD_RETIRED.FB_HIT / MEM_LOAD_RETIRED.L1_MISS))) + (MEM_LOAD_L3_MISS_RETIRED.REMOTE_FWD * (1 + (MEM_LOAD_RETIRED.FB_HIT / MEM_LOAD_RETIRED.L1_MISS))) + (MEM_LOAD_L3_MISS_RETIRED.REMOTE_HITM * (1 + (MEM_LOAD_RETIRED.FB_HIT / MEM_LOAD_RETIRED.L1_MISS))))) / ((19 * (MEM_LOAD_L3_MISS_RETIRED.REMOTE_DRAM * (1 + (MEM_LOAD_RETIRED.FB_HIT / MEM_LOAD_RETIRED.L1_MISS))) + 10 * ((MEM_LOAD_L3_MISS_RETIRED.LOCAL_DRAM * (1 + (MEM_LOAD_RETIRED.FB_HIT / MEM_LOAD_RETIRED.L1_MISS))) + (MEM_LOAD_L3_MISS_RETIRED.REMOTE_FWD * (1 + (MEM_LOAD_RETIRED.FB_HIT / MEM_LOAD_RETIRED.L1_MISS))) + (MEM_LOAD_L3_MISS_RETIRED.REMOTE_HITM * (1 + (MEM_LOAD_RETIRED.FB_HIT / MEM_LOAD_RETIRED.L1_MISS))))) + (25 * (MEM_LOAD_RETIRED.LOCAL_PMM * (1 + (MEM_LOAD_RETIRED.FB_HIT / MEM_LOAD_RETIRED.L1_MISS))) + 33 * (MEM_LOAD_L3_MISS_RETIRED.REMOTE_PMM * (1 + (MEM_LOAD_RETIRED.FB_HIT / MEM_LOAD_RETIRED.L1_MISS))))))) * (CYCLE_ACTIVITY.STALLS_L3_MISS / CLKS + ((CYCLE_ACTIVITY.STALLS_L1D_MISS - CYCLE_ACTIVITY.STALLS_L2_MISS) / CLKS) - tma_l2_bound)) if (1000000 * (MEM_LOAD_L3_MISS_RETIRED.REMOTE_PMM + MEM_LOAD_RETIRED.LOCAL_PMM) > MEM_LOAD_RETIRED.L1_MISS) else 0)",
330*55b201a8SIan Rogers        "MetricGroup": "MemoryBound;Server;TmaL3mem;TopdownL3;tma_memory_bound_group",
331*55b201a8SIan Rogers        "MetricName": "tma_pmm_bound",
332*55b201a8SIan Rogers        "PublicDescription": "This metric roughly estimates (based on idle latencies) how often the CPU was stalled on accesses to external 3D-Xpoint (Crystal Ridge, a.k.a. IXP) memory by loads, PMM stands for Persistent Memory Module. ",
333*55b201a8SIan Rogers        "ScaleUnit": "100%"
334*55b201a8SIan Rogers    },
335*55b201a8SIan Rogers    {
336*55b201a8SIan Rogers        "BriefDescription": "This metric estimates how often CPU was stalled  due to RFO store memory accesses; RFO store issue a read-for-ownership request before the write",
337*55b201a8SIan Rogers        "MetricExpr": "EXE_ACTIVITY.BOUND_ON_STORES / CLKS",
338*55b201a8SIan Rogers        "MetricGroup": "MemoryBound;TmaL3mem;TopdownL3;tma_memory_bound_group",
339*55b201a8SIan Rogers        "MetricName": "tma_store_bound",
340*55b201a8SIan Rogers        "PublicDescription": "This metric estimates how often CPU was stalled  due to RFO store memory accesses; RFO store issue a read-for-ownership request before the write. Even though store accesses do not typically stall out-of-order CPUs; there are few cases where stores can lead to actual stalls. This metric will be flagged should RFO stores be a bottleneck. Sample with: MEM_INST_RETIRED.ALL_STORES_PS",
341*55b201a8SIan Rogers        "ScaleUnit": "100%"
342*55b201a8SIan Rogers    },
343*55b201a8SIan Rogers    {
344*55b201a8SIan Rogers        "BriefDescription": "This metric estimates fraction of cycles the CPU spent handling L1D store misses",
345*55b201a8SIan Rogers        "MetricExpr": "((L2_RQSTS.RFO_HIT * 11 * (1 - (MEM_INST_RETIRED.LOCK_LOADS / MEM_INST_RETIRED.ALL_STORES))) + (1 - (MEM_INST_RETIRED.LOCK_LOADS / MEM_INST_RETIRED.ALL_STORES)) * min(CPU_CLK_UNHALTED.THREAD, OFFCORE_REQUESTS_OUTSTANDING.CYCLES_WITH_DEMAND_RFO)) / CLKS",
346*55b201a8SIan Rogers        "MetricGroup": "MemoryLat;Offcore;TopdownL4;tma_store_bound_group",
347*55b201a8SIan Rogers        "MetricName": "tma_store_latency",
348*55b201a8SIan Rogers        "PublicDescription": "This metric estimates fraction of cycles the CPU spent handling L1D store misses. Store accesses usually less impact out-of-order core performance; however; holding resources for longer time can lead into undesired implications (e.g. contention on L1D fill-buffer entries - see FB_Full)",
349*55b201a8SIan Rogers        "ScaleUnit": "100%"
350*55b201a8SIan Rogers    },
351*55b201a8SIan Rogers    {
352*55b201a8SIan Rogers        "BriefDescription": "This metric roughly estimates how often CPU was handling synchronizations due to False Sharing",
353*55b201a8SIan Rogers        "MetricExpr": "((110 * Average_Frequency) * (OCR.DEMAND_RFO.L3_MISS.REMOTE_HITM + OCR.PF_L2_RFO.L3_MISS.REMOTE_HITM) + (47.5 * Average_Frequency) * (OCR.DEMAND_RFO.L3_HIT.HITM_OTHER_CORE + OCR.PF_L2_RFO.L3_HIT.HITM_OTHER_CORE)) / CLKS",
354*55b201a8SIan Rogers        "MetricGroup": "DataSharing;Offcore;Snoop;TopdownL4;tma_store_bound_group",
355*55b201a8SIan Rogers        "MetricName": "tma_false_sharing",
356*55b201a8SIan Rogers        "PublicDescription": "This metric roughly estimates how often CPU was handling synchronizations due to False Sharing. False Sharing is a multithreading hiccup; where multiple Logical Processors contend on different data-elements mapped into the same cache line.  Sample with: MEM_LOAD_L3_HIT_RETIRED.XSNP_HITM_PS;OFFCORE_RESPONSE.DEMAND_RFO.L3_HIT.SNOOP_HITM",
357*55b201a8SIan Rogers        "ScaleUnit": "100%"
358*55b201a8SIan Rogers    },
359*55b201a8SIan Rogers    {
360*55b201a8SIan Rogers        "BriefDescription": "This metric represents rate of split store accesses",
361*55b201a8SIan Rogers        "MetricExpr": "MEM_INST_RETIRED.SPLIT_STORES / CORE_CLKS",
362*55b201a8SIan Rogers        "MetricGroup": "TopdownL4;tma_store_bound_group",
363*55b201a8SIan Rogers        "MetricName": "tma_split_stores",
364*55b201a8SIan Rogers        "PublicDescription": "This metric represents rate of split store accesses.  Consider aligning your data to the 64-byte cache line granularity. Sample with: MEM_INST_RETIRED.SPLIT_STORES_PS",
365*55b201a8SIan Rogers        "ScaleUnit": "100%"
366*55b201a8SIan Rogers    },
367*55b201a8SIan Rogers    {
368*55b201a8SIan Rogers        "BriefDescription": "This metric roughly estimates the fraction of cycles spent handling first-level data TLB store misses",
369*55b201a8SIan Rogers        "MetricExpr": "(9 * cpu@DTLB_STORE_MISSES.STLB_HIT\\,cmask\\=1@ + DTLB_STORE_MISSES.WALK_ACTIVE) / CORE_CLKS",
370*55b201a8SIan Rogers        "MetricGroup": "MemoryTLB;TopdownL4;tma_store_bound_group",
371*55b201a8SIan Rogers        "MetricName": "tma_dtlb_store",
372*55b201a8SIan Rogers        "PublicDescription": "This metric roughly estimates the fraction of cycles spent handling first-level data TLB store misses.  As with ordinary data caching; focus on improving data locality and reducing working-set size to reduce DTLB overhead.  Additionally; consider using profile-guided optimization (PGO) to collocate frequently-used data on the same page.  Try using larger page sizes for large amounts of frequently-used data. Sample with: MEM_INST_RETIRED.STLB_MISS_STORES_PS",
373*55b201a8SIan Rogers        "ScaleUnit": "100%"
374*55b201a8SIan Rogers    },
375*55b201a8SIan Rogers    {
376*55b201a8SIan Rogers        "BriefDescription": "This metric roughly estimates the fraction of cycles where the TLB was missed by store accesses, hitting in the second-level TLB (STLB)",
377*55b201a8SIan Rogers        "MetricExpr": "tma_dtlb_store - tma_store_stlb_miss",
378*55b201a8SIan Rogers        "MetricGroup": "MemoryTLB;TopdownL5;tma_dtlb_store_group",
379*55b201a8SIan Rogers        "MetricName": "tma_store_stlb_hit",
380*55b201a8SIan Rogers        "ScaleUnit": "100%"
381*55b201a8SIan Rogers    },
382*55b201a8SIan Rogers    {
383*55b201a8SIan Rogers        "BriefDescription": "This metric estimates the fraction of cycles where the STLB was missed by store accesses, performing a hardware page walk",
384*55b201a8SIan Rogers        "MetricExpr": "DTLB_STORE_MISSES.WALK_ACTIVE / CORE_CLKS",
385*55b201a8SIan Rogers        "MetricGroup": "MemoryTLB;TopdownL5;tma_dtlb_store_group",
386*55b201a8SIan Rogers        "MetricName": "tma_store_stlb_miss",
387*55b201a8SIan Rogers        "ScaleUnit": "100%"
388*55b201a8SIan Rogers    },
389*55b201a8SIan Rogers    {
390*55b201a8SIan Rogers        "BriefDescription": "This metric represents fraction of slots where Core non-memory issues were of a bottleneck",
391*55b201a8SIan Rogers        "MetricExpr": "tma_backend_bound - tma_memory_bound",
392*55b201a8SIan Rogers        "MetricGroup": "Backend;Compute;TopdownL2;tma_L2_group;tma_backend_bound_group",
393*55b201a8SIan Rogers        "MetricName": "tma_core_bound",
394*55b201a8SIan Rogers        "PublicDescription": "This metric represents fraction of slots where Core non-memory issues were of a bottleneck.  Shortage in hardware compute resources; or dependencies in software's instructions are both categorized under Core Bound. Hence it may indicate the machine ran out of an out-of-order resource; certain execution units are overloaded or dependencies in program's data- or instruction-flow are limiting the performance (e.g. FP-chained long-latency arithmetic operations).",
395*55b201a8SIan Rogers        "ScaleUnit": "100%"
396*55b201a8SIan Rogers    },
397*55b201a8SIan Rogers    {
398*55b201a8SIan Rogers        "BriefDescription": "This metric represents fraction of cycles where the Divider unit was active",
399*55b201a8SIan Rogers        "MetricExpr": "ARITH.DIVIDER_ACTIVE / CLKS",
400*55b201a8SIan Rogers        "MetricGroup": "TopdownL3;tma_core_bound_group",
401*55b201a8SIan Rogers        "MetricName": "tma_divider",
402*55b201a8SIan Rogers        "PublicDescription": "This metric represents fraction of cycles where the Divider unit was active. Divide and square root instructions are performed by the Divider unit and can take considerably longer latency than integer or Floating Point addition; subtraction; or multiplication. Sample with: ARITH.DIVIDER_ACTIVE",
403*55b201a8SIan Rogers        "ScaleUnit": "100%"
404*55b201a8SIan Rogers    },
405*55b201a8SIan Rogers    {
406*55b201a8SIan Rogers        "BriefDescription": "This metric estimates fraction of cycles the CPU performance was potentially limited due to Core computation issues (non divider-related)",
407*55b201a8SIan Rogers        "MetricExpr": "(EXE_ACTIVITY.EXE_BOUND_0_PORTS + (EXE_ACTIVITY.1_PORTS_UTIL + tma_retiring * EXE_ACTIVITY.2_PORTS_UTIL)) / CLKS if (ARITH.DIVIDER_ACTIVE < (CYCLE_ACTIVITY.STALLS_TOTAL - CYCLE_ACTIVITY.STALLS_MEM_ANY)) else (EXE_ACTIVITY.1_PORTS_UTIL + tma_retiring * EXE_ACTIVITY.2_PORTS_UTIL) / CLKS",
408*55b201a8SIan Rogers        "MetricGroup": "PortsUtil;TopdownL3;tma_core_bound_group",
409*55b201a8SIan Rogers        "MetricName": "tma_ports_utilization",
410*55b201a8SIan Rogers        "PublicDescription": "This metric estimates fraction of cycles the CPU performance was potentially limited due to Core computation issues (non divider-related).  Two distinct categories can be attributed into this metric: (1) heavy data-dependency among contiguous instructions would manifest in this metric - such cases are often referred to as low Instruction Level Parallelism (ILP). (2) Contention on some hardware execution unit other than Divider. For example; when there are too many multiply operations.",
411*55b201a8SIan Rogers        "ScaleUnit": "100%"
412*55b201a8SIan Rogers    },
413*55b201a8SIan Rogers    {
414*55b201a8SIan Rogers        "BriefDescription": "This metric represents fraction of cycles CPU executed no uops on any execution port (Logical Processor cycles since ICL, Physical Core cycles otherwise)",
415*55b201a8SIan Rogers        "MetricExpr": "(UOPS_EXECUTED.CORE_CYCLES_NONE / 2 if #SMT_on else CYCLE_ACTIVITY.STALLS_TOTAL - CYCLE_ACTIVITY.STALLS_MEM_ANY) / CORE_CLKS",
416*55b201a8SIan Rogers        "MetricGroup": "PortsUtil;TopdownL4;tma_ports_utilization_group",
417*55b201a8SIan Rogers        "MetricName": "tma_ports_utilized_0",
418*55b201a8SIan Rogers        "PublicDescription": "This metric represents fraction of cycles CPU executed no uops on any execution port (Logical Processor cycles since ICL, Physical Core cycles otherwise). Long-latency instructions like divides may contribute to this metric.",
419*55b201a8SIan Rogers        "ScaleUnit": "100%"
420*55b201a8SIan Rogers    },
421*55b201a8SIan Rogers    {
422*55b201a8SIan Rogers        "BriefDescription": "This metric represents fraction of cycles the CPU issue-pipeline was stalled due to serializing operations",
423*55b201a8SIan Rogers        "MetricExpr": "PARTIAL_RAT_STALLS.SCOREBOARD / CLKS",
424*55b201a8SIan Rogers        "MetricGroup": "TopdownL5;tma_ports_utilized_0_group",
425*55b201a8SIan Rogers        "MetricName": "tma_serializing_operation",
426*55b201a8SIan Rogers        "PublicDescription": "This metric represents fraction of cycles the CPU issue-pipeline was stalled due to serializing operations. Instructions like CPUID; WRMSR or LFENCE serialize the out-of-order execution which may limit performance. Sample with: PARTIAL_RAT_STALLS.SCOREBOARD",
427*55b201a8SIan Rogers        "ScaleUnit": "100%"
428*55b201a8SIan Rogers    },
429*55b201a8SIan Rogers    {
430*55b201a8SIan Rogers        "BriefDescription": "This metric represents fraction of cycles the CPU was stalled due to PAUSE Instructions",
431*55b201a8SIan Rogers        "MetricExpr": "40 * ROB_MISC_EVENTS.PAUSE_INST / CLKS",
432*55b201a8SIan Rogers        "MetricGroup": "TopdownL6;tma_serializing_operation_group",
433*55b201a8SIan Rogers        "MetricName": "tma_slow_pause",
434*55b201a8SIan Rogers        "PublicDescription": "This metric represents fraction of cycles the CPU was stalled due to PAUSE Instructions. Sample with: MISC_RETIRED.PAUSE_INST",
435*55b201a8SIan Rogers        "ScaleUnit": "100%"
436*55b201a8SIan Rogers    },
437*55b201a8SIan Rogers    {
438*55b201a8SIan Rogers        "BriefDescription": "The Mixing_Vectors metric gives the percentage of injected blend uops out of all uops issued",
439*55b201a8SIan Rogers        "MetricExpr": "CLKS * UOPS_ISSUED.VECTOR_WIDTH_MISMATCH / UOPS_ISSUED.ANY",
440*55b201a8SIan Rogers        "MetricGroup": "TopdownL5;tma_ports_utilized_0_group",
441*55b201a8SIan Rogers        "MetricName": "tma_mixing_vectors",
442*55b201a8SIan Rogers        "PublicDescription": "The Mixing_Vectors metric gives the percentage of injected blend uops out of all uops issued. Usually a Mixing_Vectors over 5% is worth investigating. Read more in Appendix B1 of the Optimizations Guide for this topic.",
443*55b201a8SIan Rogers        "ScaleUnit": "100%"
444*55b201a8SIan Rogers    },
445*55b201a8SIan Rogers    {
446*55b201a8SIan Rogers        "BriefDescription": "This metric represents fraction of cycles where the CPU executed total of 1 uop per cycle on all execution ports (Logical Processor cycles since ICL, Physical Core cycles otherwise)",
447*55b201a8SIan Rogers        "MetricExpr": "((UOPS_EXECUTED.CORE_CYCLES_GE_1 - UOPS_EXECUTED.CORE_CYCLES_GE_2) / 2 if #SMT_on else EXE_ACTIVITY.1_PORTS_UTIL) / CORE_CLKS",
448*55b201a8SIan Rogers        "MetricGroup": "PortsUtil;TopdownL4;tma_ports_utilization_group",
449*55b201a8SIan Rogers        "MetricName": "tma_ports_utilized_1",
450*55b201a8SIan Rogers        "PublicDescription": "This metric represents fraction of cycles where the CPU executed total of 1 uop per cycle on all execution ports (Logical Processor cycles since ICL, Physical Core cycles otherwise). This can be due to heavy data-dependency among software instructions; or over oversubscribing a particular hardware resource. In some other cases with high 1_Port_Utilized and L1_Bound; this metric can point to L1 data-cache latency bottleneck that may not necessarily manifest with complete execution starvation (due to the short L1 latency e.g. walking a linked list) - looking at the assembly can be helpful.",
451*55b201a8SIan Rogers        "ScaleUnit": "100%"
452*55b201a8SIan Rogers    },
453*55b201a8SIan Rogers    {
454*55b201a8SIan Rogers        "BriefDescription": "This metric represents fraction of cycles CPU executed total of 2 uops per cycle on all execution ports (Logical Processor cycles since ICL, Physical Core cycles otherwise)",
455*55b201a8SIan Rogers        "MetricExpr": "((UOPS_EXECUTED.CORE_CYCLES_GE_2 - UOPS_EXECUTED.CORE_CYCLES_GE_3) / 2 if #SMT_on else EXE_ACTIVITY.2_PORTS_UTIL) / CORE_CLKS",
456*55b201a8SIan Rogers        "MetricGroup": "PortsUtil;TopdownL4;tma_ports_utilization_group",
457*55b201a8SIan Rogers        "MetricName": "tma_ports_utilized_2",
458*55b201a8SIan Rogers        "PublicDescription": "This metric represents fraction of cycles CPU executed total of 2 uops per cycle on all execution ports (Logical Processor cycles since ICL, Physical Core cycles otherwise).  Loop Vectorization -most compilers feature auto-Vectorization options today- reduces pressure on the execution ports as multiple elements are calculated with same uop.",
459*55b201a8SIan Rogers        "ScaleUnit": "100%"
460*55b201a8SIan Rogers    },
461*55b201a8SIan Rogers    {
462*55b201a8SIan Rogers        "BriefDescription": "This metric represents fraction of cycles CPU executed total of 3 or more uops per cycle on all execution ports (Logical Processor cycles since ICL, Physical Core cycles otherwise).",
463*55b201a8SIan Rogers        "MetricExpr": "(UOPS_EXECUTED.CORE_CYCLES_GE_3 / 2 if #SMT_on else UOPS_EXECUTED.CORE_CYCLES_GE_3) / CORE_CLKS",
464*55b201a8SIan Rogers        "MetricGroup": "PortsUtil;TopdownL4;tma_ports_utilization_group",
465*55b201a8SIan Rogers        "MetricName": "tma_ports_utilized_3m",
466*55b201a8SIan Rogers        "ScaleUnit": "100%"
467*55b201a8SIan Rogers    },
468*55b201a8SIan Rogers    {
469*55b201a8SIan Rogers        "BriefDescription": "This metric represents Core fraction of cycles CPU dispatched uops on execution ports for ALU operations.",
470*55b201a8SIan Rogers        "MetricExpr": "(UOPS_DISPATCHED_PORT.PORT_0 + UOPS_DISPATCHED_PORT.PORT_1 + UOPS_DISPATCHED_PORT.PORT_5 + UOPS_DISPATCHED_PORT.PORT_6) / (4 * CORE_CLKS)",
471*55b201a8SIan Rogers        "MetricGroup": "TopdownL5;tma_ports_utilized_3m_group",
472*55b201a8SIan Rogers        "MetricName": "tma_alu_op_utilization",
473*55b201a8SIan Rogers        "ScaleUnit": "100%"
474*55b201a8SIan Rogers    },
475*55b201a8SIan Rogers    {
476*55b201a8SIan Rogers        "BriefDescription": "This metric represents Core fraction of cycles CPU dispatched uops on execution port 0 ([SNB+] ALU; [HSW+] ALU and 2nd branch) Sample with: UOPS_DISPATCHED_PORT.PORT_0",
477*55b201a8SIan Rogers        "MetricExpr": "UOPS_DISPATCHED_PORT.PORT_0 / CORE_CLKS",
478*55b201a8SIan Rogers        "MetricGroup": "Compute;TopdownL6;tma_alu_op_utilization_group",
479*55b201a8SIan Rogers        "MetricName": "tma_port_0",
480*55b201a8SIan Rogers        "ScaleUnit": "100%"
481*55b201a8SIan Rogers    },
482*55b201a8SIan Rogers    {
483*55b201a8SIan Rogers        "BriefDescription": "This metric represents Core fraction of cycles CPU dispatched uops on execution port 1 (ALU) Sample with: UOPS_DISPATCHED_PORT.PORT_1",
484*55b201a8SIan Rogers        "MetricExpr": "UOPS_DISPATCHED_PORT.PORT_1 / CORE_CLKS",
485*55b201a8SIan Rogers        "MetricGroup": "TopdownL6;tma_alu_op_utilization_group",
486*55b201a8SIan Rogers        "MetricName": "tma_port_1",
487*55b201a8SIan Rogers        "ScaleUnit": "100%"
488*55b201a8SIan Rogers    },
489*55b201a8SIan Rogers    {
490*55b201a8SIan Rogers        "BriefDescription": "This metric represents Core fraction of cycles CPU dispatched uops on execution port 5 ([SNB+] Branches and ALU; [HSW+] ALU) Sample with: UOPS_DISPATCHED.PORT_5",
491*55b201a8SIan Rogers        "MetricExpr": "UOPS_DISPATCHED_PORT.PORT_5 / CORE_CLKS",
492*55b201a8SIan Rogers        "MetricGroup": "TopdownL6;tma_alu_op_utilization_group",
493*55b201a8SIan Rogers        "MetricName": "tma_port_5",
494*55b201a8SIan Rogers        "ScaleUnit": "100%"
495*55b201a8SIan Rogers    },
496*55b201a8SIan Rogers    {
497*55b201a8SIan Rogers        "BriefDescription": "This metric represents Core fraction of cycles CPU dispatched uops on execution port 6 ([HSW+]Primary Branch and simple ALU) Sample with: UOPS_DISPATCHED_PORT.PORT_6",
498*55b201a8SIan Rogers        "MetricExpr": "UOPS_DISPATCHED_PORT.PORT_6 / CORE_CLKS",
499*55b201a8SIan Rogers        "MetricGroup": "TopdownL6;tma_alu_op_utilization_group",
500*55b201a8SIan Rogers        "MetricName": "tma_port_6",
501*55b201a8SIan Rogers        "ScaleUnit": "100%"
502*55b201a8SIan Rogers    },
503*55b201a8SIan Rogers    {
504*55b201a8SIan Rogers        "BriefDescription": "This metric represents Core fraction of cycles CPU dispatched uops on execution port for Load operations Sample with: UOPS_DISPATCHED.PORT_2_3",
505*55b201a8SIan Rogers        "MetricExpr": "(UOPS_DISPATCHED_PORT.PORT_2 + UOPS_DISPATCHED_PORT.PORT_3 + UOPS_DISPATCHED_PORT.PORT_7 - UOPS_DISPATCHED_PORT.PORT_4) / (2 * CORE_CLKS)",
506*55b201a8SIan Rogers        "MetricGroup": "TopdownL5;tma_ports_utilized_3m_group",
507*55b201a8SIan Rogers        "MetricName": "tma_load_op_utilization",
508*55b201a8SIan Rogers        "ScaleUnit": "100%"
509*55b201a8SIan Rogers    },
510*55b201a8SIan Rogers    {
511*55b201a8SIan Rogers        "BriefDescription": "This metric represents Core fraction of cycles CPU dispatched uops on execution port 2 ([SNB+]Loads and Store-address; [ICL+] Loads) Sample with: UOPS_DISPATCHED_PORT.PORT_2",
512*55b201a8SIan Rogers        "MetricExpr": "UOPS_DISPATCHED_PORT.PORT_2 / CORE_CLKS",
513*55b201a8SIan Rogers        "MetricGroup": "TopdownL6;tma_load_op_utilization_group",
514*55b201a8SIan Rogers        "MetricName": "tma_port_2",
515*55b201a8SIan Rogers        "ScaleUnit": "100%"
516*55b201a8SIan Rogers    },
517*55b201a8SIan Rogers    {
518*55b201a8SIan Rogers        "BriefDescription": "This metric represents Core fraction of cycles CPU dispatched uops on execution port 3 ([SNB+]Loads and Store-address; [ICL+] Loads) Sample with: UOPS_DISPATCHED_PORT.PORT_3",
519*55b201a8SIan Rogers        "MetricExpr": "UOPS_DISPATCHED_PORT.PORT_3 / CORE_CLKS",
520*55b201a8SIan Rogers        "MetricGroup": "TopdownL6;tma_load_op_utilization_group",
521*55b201a8SIan Rogers        "MetricName": "tma_port_3",
522*55b201a8SIan Rogers        "ScaleUnit": "100%"
523*55b201a8SIan Rogers    },
524*55b201a8SIan Rogers    {
525*55b201a8SIan Rogers        "BriefDescription": "This metric represents Core fraction of cycles CPU dispatched uops on execution port for Store operations",
526*55b201a8SIan Rogers        "MetricExpr": "UOPS_DISPATCHED_PORT.PORT_4 / CORE_CLKS",
527*55b201a8SIan Rogers        "MetricGroup": "TopdownL5;tma_ports_utilized_3m_group",
528*55b201a8SIan Rogers        "MetricName": "tma_store_op_utilization",
529*55b201a8SIan Rogers        "ScaleUnit": "100%"
530*55b201a8SIan Rogers    },
531*55b201a8SIan Rogers    {
532*55b201a8SIan Rogers        "BriefDescription": "This metric represents Core fraction of cycles CPU dispatched uops on execution port 4 (Store-data) Sample with: UOPS_DISPATCHED_PORT.PORT_4",
533*55b201a8SIan Rogers        "MetricExpr": "UOPS_DISPATCHED_PORT.PORT_4 / CORE_CLKS",
534*55b201a8SIan Rogers        "MetricGroup": "TopdownL6;tma_store_op_utilization_group",
535*55b201a8SIan Rogers        "MetricName": "tma_port_4",
536*55b201a8SIan Rogers        "ScaleUnit": "100%"
537*55b201a8SIan Rogers    },
538*55b201a8SIan Rogers    {
539*55b201a8SIan Rogers        "BriefDescription": "This metric represents Core fraction of cycles CPU dispatched uops on execution port 7 ([HSW+]simple Store-address) Sample with: UOPS_DISPATCHED_PORT.PORT_7",
540*55b201a8SIan Rogers        "MetricExpr": "UOPS_DISPATCHED_PORT.PORT_7 / CORE_CLKS",
541*55b201a8SIan Rogers        "MetricGroup": "TopdownL6;tma_store_op_utilization_group",
542*55b201a8SIan Rogers        "MetricName": "tma_port_7",
543*55b201a8SIan Rogers        "ScaleUnit": "100%"
54449898fefSIan Rogers    },
54549898fefSIan Rogers    {
54649898fefSIan Rogers        "BriefDescription": "This category represents fraction of slots utilized by useful work i.e. issued uops that eventually get retired",
547*55b201a8SIan Rogers        "MetricExpr": "UOPS_RETIRED.RETIRE_SLOTS / SLOTS",
548*55b201a8SIan Rogers        "MetricGroup": "TopdownL1;tma_L1_group",
549*55b201a8SIan Rogers        "MetricName": "tma_retiring",
550*55b201a8SIan Rogers        "PublicDescription": "This category represents fraction of slots utilized by useful work i.e. issued uops that eventually get retired. Ideally; all pipeline slots would be attributed to the Retiring category.  Retiring of 100% would indicate the maximum Pipeline_Width throughput was achieved.  Maximizing Retiring typically increases the Instructions-per-cycle (see IPC metric). Note that a high Retiring value does not necessary mean there is no room for more performance.  For example; Heavy-operations or Microcode Assists are categorized under Retiring. They often indicate suboptimal performance and can often be optimized or avoided.  Sample with: UOPS_RETIRED.RETIRE_SLOTS",
551*55b201a8SIan Rogers        "ScaleUnit": "100%"
55249898fefSIan Rogers    },
55349898fefSIan Rogers    {
554*55b201a8SIan Rogers        "BriefDescription": "This metric represents fraction of slots where the CPU was retiring light-weight operations -- instructions that require no more than one uop (micro-operation)",
555*55b201a8SIan Rogers        "MetricExpr": "tma_retiring - tma_heavy_operations",
556*55b201a8SIan Rogers        "MetricGroup": "Retire;TopdownL2;tma_L2_group;tma_retiring_group",
557*55b201a8SIan Rogers        "MetricName": "tma_light_operations",
558*55b201a8SIan Rogers        "PublicDescription": "This metric represents fraction of slots where the CPU was retiring light-weight operations -- instructions that require no more than one uop (micro-operation). This correlates with total number of instructions used by the program. A uops-per-instruction (see UPI metric) ratio of 1 or less should be expected for decently optimized software running on Intel Core/Xeon products. While this often indicates efficient X86 instructions were executed; high value does not necessarily mean better performance cannot be achieved. Sample with: INST_RETIRED.PREC_DIST",
559*55b201a8SIan Rogers        "ScaleUnit": "100%"
560*55b201a8SIan Rogers    },
561*55b201a8SIan Rogers    {
562*55b201a8SIan Rogers        "BriefDescription": "This metric represents overall arithmetic floating-point (FP) operations fraction the CPU has executed (retired)",
563*55b201a8SIan Rogers        "MetricExpr": "tma_x87_use + tma_fp_scalar + tma_fp_vector",
564*55b201a8SIan Rogers        "MetricGroup": "HPC;TopdownL3;tma_light_operations_group",
565*55b201a8SIan Rogers        "MetricName": "tma_fp_arith",
566*55b201a8SIan Rogers        "PublicDescription": "This metric represents overall arithmetic floating-point (FP) operations fraction the CPU has executed (retired). Note this metric's value may exceed its parent due to use of \"Uops\" CountDomain and FMA double-counting.",
567*55b201a8SIan Rogers        "ScaleUnit": "100%"
568*55b201a8SIan Rogers    },
569*55b201a8SIan Rogers    {
570*55b201a8SIan Rogers        "BriefDescription": "This metric serves as an approximation of legacy x87 usage",
571*55b201a8SIan Rogers        "MetricExpr": "tma_retiring * UOPS_EXECUTED.X87 / UOPS_EXECUTED.THREAD",
572*55b201a8SIan Rogers        "MetricGroup": "Compute;TopdownL4;tma_fp_arith_group",
573*55b201a8SIan Rogers        "MetricName": "tma_x87_use",
574*55b201a8SIan Rogers        "PublicDescription": "This metric serves as an approximation of legacy x87 usage. It accounts for instructions beyond X87 FP arithmetic operations; hence may be used as a thermometer to avoid X87 high usage and preferably upgrade to modern ISA. See Tip under Tuning Hint.",
575*55b201a8SIan Rogers        "ScaleUnit": "100%"
576*55b201a8SIan Rogers    },
577*55b201a8SIan Rogers    {
578*55b201a8SIan Rogers        "BriefDescription": "This metric approximates arithmetic floating-point (FP) scalar uops fraction the CPU has retired",
579*55b201a8SIan Rogers        "MetricExpr": "(FP_ARITH_INST_RETIRED.SCALAR_SINGLE + FP_ARITH_INST_RETIRED.SCALAR_DOUBLE) / UOPS_RETIRED.RETIRE_SLOTS",
580*55b201a8SIan Rogers        "MetricGroup": "Compute;Flops;TopdownL4;tma_fp_arith_group",
581*55b201a8SIan Rogers        "MetricName": "tma_fp_scalar",
582*55b201a8SIan Rogers        "PublicDescription": "This metric approximates arithmetic floating-point (FP) scalar uops fraction the CPU has retired. May overcount due to FMA double counting.",
583*55b201a8SIan Rogers        "ScaleUnit": "100%"
584*55b201a8SIan Rogers    },
585*55b201a8SIan Rogers    {
586*55b201a8SIan Rogers        "BriefDescription": "This metric approximates arithmetic floating-point (FP) vector uops fraction the CPU has retired aggregated across all vector widths",
587*55b201a8SIan Rogers        "MetricExpr": "(FP_ARITH_INST_RETIRED.128B_PACKED_DOUBLE + FP_ARITH_INST_RETIRED.128B_PACKED_SINGLE + FP_ARITH_INST_RETIRED.256B_PACKED_DOUBLE + FP_ARITH_INST_RETIRED.256B_PACKED_SINGLE + FP_ARITH_INST_RETIRED.512B_PACKED_DOUBLE + FP_ARITH_INST_RETIRED.512B_PACKED_SINGLE) / UOPS_RETIRED.RETIRE_SLOTS",
588*55b201a8SIan Rogers        "MetricGroup": "Compute;Flops;TopdownL4;tma_fp_arith_group",
589*55b201a8SIan Rogers        "MetricName": "tma_fp_vector",
590*55b201a8SIan Rogers        "PublicDescription": "This metric approximates arithmetic floating-point (FP) vector uops fraction the CPU has retired aggregated across all vector widths. May overcount due to FMA double counting.",
591*55b201a8SIan Rogers        "ScaleUnit": "100%"
592*55b201a8SIan Rogers    },
593*55b201a8SIan Rogers    {
594*55b201a8SIan Rogers        "BriefDescription": "This metric approximates arithmetic FP vector uops fraction the CPU has retired for 128-bit wide vectors",
595*55b201a8SIan Rogers        "MetricExpr": "(FP_ARITH_INST_RETIRED.128B_PACKED_DOUBLE + FP_ARITH_INST_RETIRED.128B_PACKED_SINGLE) / UOPS_RETIRED.RETIRE_SLOTS",
596*55b201a8SIan Rogers        "MetricGroup": "Compute;Flops;TopdownL5;tma_fp_vector_group",
597*55b201a8SIan Rogers        "MetricName": "tma_fp_vector_128b",
598*55b201a8SIan Rogers        "PublicDescription": "This metric approximates arithmetic FP vector uops fraction the CPU has retired for 128-bit wide vectors. May overcount due to FMA double counting.",
599*55b201a8SIan Rogers        "ScaleUnit": "100%"
600*55b201a8SIan Rogers    },
601*55b201a8SIan Rogers    {
602*55b201a8SIan Rogers        "BriefDescription": "This metric approximates arithmetic FP vector uops fraction the CPU has retired for 256-bit wide vectors",
603*55b201a8SIan Rogers        "MetricExpr": "(FP_ARITH_INST_RETIRED.256B_PACKED_DOUBLE + FP_ARITH_INST_RETIRED.256B_PACKED_SINGLE) / UOPS_RETIRED.RETIRE_SLOTS",
604*55b201a8SIan Rogers        "MetricGroup": "Compute;Flops;TopdownL5;tma_fp_vector_group",
605*55b201a8SIan Rogers        "MetricName": "tma_fp_vector_256b",
606*55b201a8SIan Rogers        "PublicDescription": "This metric approximates arithmetic FP vector uops fraction the CPU has retired for 256-bit wide vectors. May overcount due to FMA double counting.",
607*55b201a8SIan Rogers        "ScaleUnit": "100%"
608*55b201a8SIan Rogers    },
609*55b201a8SIan Rogers    {
610*55b201a8SIan Rogers        "BriefDescription": "This metric approximates arithmetic FP vector uops fraction the CPU has retired for 512-bit wide vectors",
611*55b201a8SIan Rogers        "MetricExpr": "(FP_ARITH_INST_RETIRED.512B_PACKED_DOUBLE + FP_ARITH_INST_RETIRED.512B_PACKED_SINGLE) / UOPS_RETIRED.RETIRE_SLOTS",
612*55b201a8SIan Rogers        "MetricGroup": "Compute;Flops;TopdownL5;tma_fp_vector_group",
613*55b201a8SIan Rogers        "MetricName": "tma_fp_vector_512b",
614*55b201a8SIan Rogers        "PublicDescription": "This metric approximates arithmetic FP vector uops fraction the CPU has retired for 512-bit wide vectors. May overcount due to FMA double counting.",
615*55b201a8SIan Rogers        "ScaleUnit": "100%"
616*55b201a8SIan Rogers    },
617*55b201a8SIan Rogers    {
618*55b201a8SIan Rogers        "BriefDescription": "This metric represents fraction of slots where the CPU was retiring memory operations -- uops for memory load or store accesses.",
619*55b201a8SIan Rogers        "MetricExpr": "tma_light_operations * MEM_INST_RETIRED.ANY / INST_RETIRED.ANY",
620*55b201a8SIan Rogers        "MetricGroup": "Pipeline;TopdownL3;tma_light_operations_group",
621*55b201a8SIan Rogers        "MetricName": "tma_memory_operations",
622*55b201a8SIan Rogers        "ScaleUnit": "100%"
623*55b201a8SIan Rogers    },
624*55b201a8SIan Rogers    {
625*55b201a8SIan Rogers        "BriefDescription": "This metric represents fraction of slots where the CPU was retiring fused instructions -- where one uop can represent multiple contiguous instructions",
626*55b201a8SIan Rogers        "MetricExpr": "tma_light_operations * UOPS_RETIRED.MACRO_FUSED / UOPS_RETIRED.RETIRE_SLOTS",
627*55b201a8SIan Rogers        "MetricGroup": "Pipeline;TopdownL3;tma_light_operations_group",
628*55b201a8SIan Rogers        "MetricName": "tma_fused_instructions",
629*55b201a8SIan Rogers        "PublicDescription": "This metric represents fraction of slots where the CPU was retiring fused instructions -- where one uop can represent multiple contiguous instructions. The instruction pairs of CMP+JCC or DEC+JCC are commonly used examples.",
630*55b201a8SIan Rogers        "ScaleUnit": "100%"
631*55b201a8SIan Rogers    },
632*55b201a8SIan Rogers    {
633*55b201a8SIan Rogers        "BriefDescription": "This metric represents fraction of slots where the CPU was retiring branch instructions that were not fused",
634*55b201a8SIan Rogers        "MetricExpr": "tma_light_operations * (BR_INST_RETIRED.ALL_BRANCHES - UOPS_RETIRED.MACRO_FUSED) / UOPS_RETIRED.RETIRE_SLOTS",
635*55b201a8SIan Rogers        "MetricGroup": "Pipeline;TopdownL3;tma_light_operations_group",
636*55b201a8SIan Rogers        "MetricName": "tma_non_fused_branches",
637*55b201a8SIan Rogers        "PublicDescription": "This metric represents fraction of slots where the CPU was retiring branch instructions that were not fused. Non-conditional branches like direct JMP or CALL would count here. Can be used to examine fusible conditional jumps that were not fused.",
638*55b201a8SIan Rogers        "ScaleUnit": "100%"
639*55b201a8SIan Rogers    },
640*55b201a8SIan Rogers    {
641*55b201a8SIan Rogers        "BriefDescription": "This metric represents fraction of slots where the CPU was retiring NOP (no op) instructions",
642*55b201a8SIan Rogers        "MetricExpr": "tma_light_operations * INST_RETIRED.NOP / UOPS_RETIRED.RETIRE_SLOTS",
643*55b201a8SIan Rogers        "MetricGroup": "Pipeline;TopdownL3;tma_light_operations_group",
644*55b201a8SIan Rogers        "MetricName": "tma_nop_instructions",
645*55b201a8SIan Rogers        "PublicDescription": "This metric represents fraction of slots where the CPU was retiring NOP (no op) instructions. Compilers often use NOPs for certain address alignments - e.g. start address of a function or loop body. Sample with: INST_RETIRED.NOP",
646*55b201a8SIan Rogers        "ScaleUnit": "100%"
647*55b201a8SIan Rogers    },
648*55b201a8SIan Rogers    {
649*55b201a8SIan Rogers        "BriefDescription": "This metric represents the remaining light uops fraction the CPU has executed - remaining means not covered by other sibling nodes. May undercount due to FMA double counting",
650*55b201a8SIan Rogers        "MetricExpr": "max(0, tma_light_operations - (tma_fp_arith + tma_memory_operations + tma_fused_instructions + tma_non_fused_branches + tma_nop_instructions))",
651*55b201a8SIan Rogers        "MetricGroup": "Pipeline;TopdownL3;tma_light_operations_group",
652*55b201a8SIan Rogers        "MetricName": "tma_other_light_ops",
653*55b201a8SIan Rogers        "ScaleUnit": "100%"
654*55b201a8SIan Rogers    },
655*55b201a8SIan Rogers    {
656*55b201a8SIan Rogers        "BriefDescription": "This metric represents fraction of slots where the CPU was retiring heavy-weight operations -- instructions that require two or more uops or microcoded sequences",
657*55b201a8SIan Rogers        "MetricExpr": "(UOPS_RETIRED.RETIRE_SLOTS + UOPS_RETIRED.MACRO_FUSED - INST_RETIRED.ANY) / SLOTS",
658*55b201a8SIan Rogers        "MetricGroup": "Retire;TopdownL2;tma_L2_group;tma_retiring_group",
659*55b201a8SIan Rogers        "MetricName": "tma_heavy_operations",
660*55b201a8SIan Rogers        "PublicDescription": "This metric represents fraction of slots where the CPU was retiring heavy-weight operations -- instructions that require two or more uops or microcoded sequences. This highly-correlates with the uop length of these instructions/sequences.",
661*55b201a8SIan Rogers        "ScaleUnit": "100%"
662*55b201a8SIan Rogers    },
663*55b201a8SIan Rogers    {
664*55b201a8SIan Rogers        "BriefDescription": "This metric represents fraction of slots where the CPU was retiring instructions that that are decoder into two or up to ([SNB+] four; [ADL+] five) uops",
665*55b201a8SIan Rogers        "MetricExpr": "tma_heavy_operations - tma_microcode_sequencer",
666*55b201a8SIan Rogers        "MetricGroup": "TopdownL3;tma_heavy_operations_group",
667*55b201a8SIan Rogers        "MetricName": "tma_few_uops_instructions",
668*55b201a8SIan Rogers        "PublicDescription": "This metric represents fraction of slots where the CPU was retiring instructions that that are decoder into two or up to ([SNB+] four; [ADL+] five) uops. This highly-correlates with the number of uops in such instructions.",
669*55b201a8SIan Rogers        "ScaleUnit": "100%"
670*55b201a8SIan Rogers    },
671*55b201a8SIan Rogers    {
672*55b201a8SIan Rogers        "BriefDescription": "This metric represents fraction of slots the CPU was retiring uops fetched by the Microcode Sequencer (MS) unit",
673*55b201a8SIan Rogers        "MetricExpr": "(UOPS_RETIRED.RETIRE_SLOTS / UOPS_ISSUED.ANY) * IDQ.MS_UOPS / SLOTS",
674*55b201a8SIan Rogers        "MetricGroup": "MicroSeq;TopdownL3;tma_heavy_operations_group",
675*55b201a8SIan Rogers        "MetricName": "tma_microcode_sequencer",
676*55b201a8SIan Rogers        "PublicDescription": "This metric represents fraction of slots the CPU was retiring uops fetched by the Microcode Sequencer (MS) unit.  The MS is used for CISC instructions not supported by the default decoders (like repeat move strings; or CPUID); or by microcode assists used to address some operation modes (like in Floating Point assists). These cases can often be avoided. Sample with: IDQ.MS_UOPS",
677*55b201a8SIan Rogers        "ScaleUnit": "100%"
678*55b201a8SIan Rogers    },
679*55b201a8SIan Rogers    {
680*55b201a8SIan Rogers        "BriefDescription": "This metric estimates fraction of slots the CPU retired uops delivered by the Microcode_Sequencer as a result of Assists",
681*55b201a8SIan Rogers        "MetricExpr": "100 * (FP_ASSIST.ANY + OTHER_ASSISTS.ANY) / SLOTS",
682*55b201a8SIan Rogers        "MetricGroup": "TopdownL4;tma_microcode_sequencer_group",
683*55b201a8SIan Rogers        "MetricName": "tma_assists",
684*55b201a8SIan Rogers        "PublicDescription": "This metric estimates fraction of slots the CPU retired uops delivered by the Microcode_Sequencer as a result of Assists. Assists are long sequences of uops that are required in certain corner-cases for operations that cannot be handled natively by the execution pipeline. For example; when working with very small floating point values (so-called Denormals); the FP units are not set up to perform these operations natively. Instead; a sequence of instructions to perform the computation on the Denormals is injected into the pipeline. Since these microcode sequences might be dozens of uops long; Assists can be extremely deleterious to performance and they can be avoided in many cases. Sample with: OTHER_ASSISTS.ANY",
685*55b201a8SIan Rogers        "ScaleUnit": "100%"
686*55b201a8SIan Rogers    },
687*55b201a8SIan Rogers    {
688*55b201a8SIan Rogers        "BriefDescription": "This metric estimates fraction of cycles the CPU retired uops originated from CISC (complex instruction set computer) instruction",
689*55b201a8SIan Rogers        "MetricExpr": "max(0, tma_microcode_sequencer - tma_assists)",
690*55b201a8SIan Rogers        "MetricGroup": "TopdownL4;tma_microcode_sequencer_group",
691*55b201a8SIan Rogers        "MetricName": "tma_cisc",
692*55b201a8SIan Rogers        "PublicDescription": "This metric estimates fraction of cycles the CPU retired uops originated from CISC (complex instruction set computer) instruction. A CISC instruction has multiple uops that are required to perform the instruction's functionality as in the case of read-modify-write as an example. Since these instructions require multiple uops they may or may not imply sub-optimal use of machine resources.",
693*55b201a8SIan Rogers        "ScaleUnit": "100%"
69449898fefSIan Rogers    },
69549898fefSIan Rogers    {
69649898fefSIan Rogers        "BriefDescription": "Total pipeline cost of Branch Misprediction related bottlenecks",
697*55b201a8SIan Rogers        "MetricExpr": "100 * (tma_branch_mispredicts + tma_fetch_latency * tma_mispredicts_resteers / (tma_branch_resteers + tma_dsb_switches + tma_icache_misses + tma_itlb_misses + tma_lcp + tma_ms_switches))",
69849898fefSIan Rogers        "MetricGroup": "Bad;BadSpec;BrMispredicts",
69949898fefSIan Rogers        "MetricName": "Mispredictions"
70049898fefSIan Rogers    },
70149898fefSIan Rogers    {
70249898fefSIan Rogers        "BriefDescription": "Total pipeline cost of (external) Memory Bandwidth related bottlenecks",
703*55b201a8SIan Rogers        "MetricExpr": "100 * tma_memory_bound * ((tma_dram_bound / (tma_dram_bound + tma_l1_bound + tma_l2_bound + tma_l3_bound + tma_pmm_bound + tma_store_bound)) * (tma_mem_bandwidth / (tma_mem_bandwidth + tma_mem_latency)) + (tma_l3_bound / (tma_dram_bound + tma_l1_bound + tma_l2_bound + tma_l3_bound + tma_pmm_bound + tma_store_bound)) * (tma_sq_full / (tma_contested_accesses + tma_data_sharing + tma_l3_hit_latency + tma_sq_full))) + (tma_l1_bound / (tma_dram_bound + tma_l1_bound + tma_l2_bound + tma_l3_bound + tma_pmm_bound + tma_store_bound)) * (tma_fb_full / (tma_4k_aliasing + tma_dtlb_load + tma_fb_full + tma_lock_latency + tma_split_loads + tma_store_fwd_blk)) ",
70449898fefSIan Rogers        "MetricGroup": "Mem;MemoryBW;Offcore",
70549898fefSIan Rogers        "MetricName": "Memory_Bandwidth"
70649898fefSIan Rogers    },
70749898fefSIan Rogers    {
70849898fefSIan Rogers        "BriefDescription": "Total pipeline cost of Memory Latency related bottlenecks (external memory and off-core caches)",
709*55b201a8SIan Rogers        "MetricExpr": "100 * tma_memory_bound * ((tma_dram_bound / (tma_dram_bound + tma_l1_bound + tma_l2_bound + tma_l3_bound + tma_pmm_bound + tma_store_bound)) * (tma_mem_latency / (tma_mem_bandwidth + tma_mem_latency)) + (tma_l3_bound / (tma_dram_bound + tma_l1_bound + tma_l2_bound + tma_l3_bound + tma_pmm_bound + tma_store_bound)) * (tma_l3_hit_latency / (tma_contested_accesses + tma_data_sharing + tma_l3_hit_latency + tma_sq_full)) + (tma_l2_bound / (tma_dram_bound + tma_l1_bound + tma_l2_bound + tma_l3_bound + tma_pmm_bound + tma_store_bound)))",
71049898fefSIan Rogers        "MetricGroup": "Mem;MemoryLat;Offcore",
71149898fefSIan Rogers        "MetricName": "Memory_Latency"
71249898fefSIan Rogers    },
71349898fefSIan Rogers    {
71449898fefSIan Rogers        "BriefDescription": "Total pipeline cost of Memory Address Translation related bottlenecks (data-side TLBs)",
715*55b201a8SIan Rogers        "MetricExpr": "100 * tma_memory_bound * ((tma_l1_bound / max(tma_memory_bound, tma_dram_bound + tma_l1_bound + tma_l2_bound + tma_l3_bound + tma_pmm_bound + tma_store_bound)) * (tma_dtlb_load / max(tma_l1_bound, tma_4k_aliasing + tma_dtlb_load + tma_fb_full + tma_lock_latency + tma_split_loads + tma_store_fwd_blk)) + (tma_store_bound / (tma_dram_bound + tma_l1_bound + tma_l2_bound + tma_l3_bound + tma_pmm_bound + tma_store_bound)) * (tma_dtlb_store / (tma_dtlb_store + tma_false_sharing + tma_split_stores + tma_store_latency))) ",
716f9d45862SIan Rogers        "MetricGroup": "Mem;MemoryTLB;Offcore",
71749898fefSIan Rogers        "MetricName": "Memory_Data_TLBs"
71849898fefSIan Rogers    },
71949898fefSIan Rogers    {
72049898fefSIan Rogers        "BriefDescription": "Total pipeline cost of branch related instructions (used for program control-flow including function calls)",
721*55b201a8SIan Rogers        "MetricExpr": "100 * ((BR_INST_RETIRED.CONDITIONAL + 3 * BR_INST_RETIRED.NEAR_CALL + (BR_INST_RETIRED.NEAR_TAKEN - (BR_INST_RETIRED.CONDITIONAL - BR_INST_RETIRED.NOT_TAKEN) - 2 * BR_INST_RETIRED.NEAR_CALL)) / SLOTS)",
72249898fefSIan Rogers        "MetricGroup": "Ret",
72349898fefSIan Rogers        "MetricName": "Branching_Overhead"
72449898fefSIan Rogers    },
72549898fefSIan Rogers    {
72649898fefSIan Rogers        "BriefDescription": "Total pipeline cost of instruction fetch related bottlenecks by large code footprint programs (i-side cache; TLB and BTB misses)",
727*55b201a8SIan Rogers        "MetricExpr": "100 * tma_fetch_latency * (tma_itlb_misses + tma_icache_misses + tma_unknown_branches) / (tma_branch_resteers + tma_dsb_switches + tma_icache_misses + tma_itlb_misses + tma_lcp + tma_ms_switches)",
72849898fefSIan Rogers        "MetricGroup": "BigFoot;Fed;Frontend;IcMiss;MemoryTLB",
72949898fefSIan Rogers        "MetricName": "Big_Code"
73049898fefSIan Rogers    },
73149898fefSIan Rogers    {
73249898fefSIan Rogers        "BriefDescription": "Total pipeline cost of instruction fetch bandwidth related bottlenecks",
733*55b201a8SIan Rogers        "MetricExpr": "100 * (tma_frontend_bound - tma_fetch_latency * tma_mispredicts_resteers / (tma_branch_resteers + tma_dsb_switches + tma_icache_misses + tma_itlb_misses + tma_lcp + tma_ms_switches)) - Big_Code",
73449898fefSIan Rogers        "MetricGroup": "Fed;FetchBW;Frontend",
73549898fefSIan Rogers        "MetricName": "Instruction_Fetch_BW"
73649898fefSIan Rogers    },
73749898fefSIan Rogers    {
73861ec07f5SHaiyan Song        "BriefDescription": "Instructions Per Cycle (per Logical Processor)",
739*55b201a8SIan Rogers        "MetricExpr": "INST_RETIRED.ANY / CLKS",
74049898fefSIan Rogers        "MetricGroup": "Ret;Summary",
741ecd94f1bSKan Liang        "MetricName": "IPC"
742ecd94f1bSKan Liang    },
743ecd94f1bSKan Liang    {
744fd550098SAndi Kleen        "BriefDescription": "Uops Per Instruction",
74561ec07f5SHaiyan Song        "MetricExpr": "UOPS_RETIRED.RETIRE_SLOTS / INST_RETIRED.ANY",
74649898fefSIan Rogers        "MetricGroup": "Pipeline;Ret;Retire",
747ecd94f1bSKan Liang        "MetricName": "UPI"
748ecd94f1bSKan Liang    },
749ecd94f1bSKan Liang    {
750fd550098SAndi Kleen        "BriefDescription": "Instruction per taken branch",
75149898fefSIan Rogers        "MetricExpr": "UOPS_RETIRED.RETIRE_SLOTS / BR_INST_RETIRED.NEAR_TAKEN",
75249898fefSIan Rogers        "MetricGroup": "Branches;Fed;FetchBW",
75349898fefSIan Rogers        "MetricName": "UpTB"
754fd550098SAndi Kleen    },
755fd550098SAndi Kleen    {
756*55b201a8SIan Rogers        "BriefDescription": "Cycles Per Instruction (per Logical Processor)",
757*55b201a8SIan Rogers        "MetricExpr": "1 / IPC",
758*55b201a8SIan Rogers        "MetricGroup": "Mem;Pipeline",
759*55b201a8SIan Rogers        "MetricName": "CPI"
760*55b201a8SIan Rogers    },
761*55b201a8SIan Rogers    {
76261ec07f5SHaiyan Song        "BriefDescription": "Per-Logical Processor actual clocks when the Logical Processor is active.",
763ecd94f1bSKan Liang        "MetricExpr": "CPU_CLK_UNHALTED.THREAD",
764ed97cc6cSJin Yao        "MetricGroup": "Pipeline",
765ecd94f1bSKan Liang        "MetricName": "CLKS"
766ecd94f1bSKan Liang    },
767ecd94f1bSKan Liang    {
76849898fefSIan Rogers        "BriefDescription": "Total issue-pipeline slots (per-Physical Core till ICL; per-Logical Processor ICL onward)",
769*55b201a8SIan Rogers        "MetricExpr": "4 * CORE_CLKS",
770*55b201a8SIan Rogers        "MetricGroup": "tma_L1_group",
77149898fefSIan Rogers        "MetricName": "SLOTS"
77249898fefSIan Rogers    },
77349898fefSIan Rogers    {
77449898fefSIan Rogers        "BriefDescription": "The ratio of Executed- by Issued-Uops",
77549898fefSIan Rogers        "MetricExpr": "UOPS_EXECUTED.THREAD / UOPS_ISSUED.ANY",
77649898fefSIan Rogers        "MetricGroup": "Cor;Pipeline",
77749898fefSIan Rogers        "MetricName": "Execute_per_Issue",
77849898fefSIan Rogers        "PublicDescription": "The ratio of Executed- by Issued-Uops. Ratio > 1 suggests high rate of uop micro-fusions. Ratio < 1 suggest high rate of \"execute\" at rename stage."
77949898fefSIan Rogers    },
78049898fefSIan Rogers    {
78149898fefSIan Rogers        "BriefDescription": "Instructions Per Cycle across hyper-threads (per physical core)",
782*55b201a8SIan Rogers        "MetricExpr": "INST_RETIRED.ANY / CORE_CLKS",
783*55b201a8SIan Rogers        "MetricGroup": "Ret;SMT;tma_L1_group",
784ed97cc6cSJin Yao        "MetricName": "CoreIPC"
785ecd94f1bSKan Liang    },
786ecd94f1bSKan Liang    {
787ed97cc6cSJin Yao        "BriefDescription": "Floating Point Operations Per Cycle",
788*55b201a8SIan Rogers        "MetricExpr": "(1 * (FP_ARITH_INST_RETIRED.SCALAR_SINGLE + FP_ARITH_INST_RETIRED.SCALAR_DOUBLE) + 2 * FP_ARITH_INST_RETIRED.128B_PACKED_DOUBLE + 4 * (FP_ARITH_INST_RETIRED.128B_PACKED_SINGLE + FP_ARITH_INST_RETIRED.256B_PACKED_DOUBLE) + 8 * (FP_ARITH_INST_RETIRED.256B_PACKED_SINGLE + FP_ARITH_INST_RETIRED.512B_PACKED_DOUBLE) + 16 * FP_ARITH_INST_RETIRED.512B_PACKED_SINGLE) / CORE_CLKS",
789*55b201a8SIan Rogers        "MetricGroup": "Flops;Ret",
790ed97cc6cSJin Yao        "MetricName": "FLOPc"
791ed97cc6cSJin Yao    },
792ed97cc6cSJin Yao    {
793f9d45862SIan Rogers        "BriefDescription": "Actual per-core usage of the Floating Point non-X87 execution units (regardless of precision or vector-width)",
794*55b201a8SIan Rogers        "MetricExpr": "((FP_ARITH_INST_RETIRED.SCALAR_SINGLE + FP_ARITH_INST_RETIRED.SCALAR_DOUBLE) + (FP_ARITH_INST_RETIRED.128B_PACKED_DOUBLE + FP_ARITH_INST_RETIRED.128B_PACKED_SINGLE + FP_ARITH_INST_RETIRED.256B_PACKED_DOUBLE + FP_ARITH_INST_RETIRED.256B_PACKED_SINGLE + FP_ARITH_INST_RETIRED.512B_PACKED_DOUBLE + FP_ARITH_INST_RETIRED.512B_PACKED_SINGLE)) / (2 * CORE_CLKS)",
79549898fefSIan Rogers        "MetricGroup": "Cor;Flops;HPC",
79649898fefSIan Rogers        "MetricName": "FP_Arith_Utilization",
797f9d45862SIan Rogers        "PublicDescription": "Actual per-core usage of the Floating Point non-X87 execution units (regardless of precision or vector-width). Values > 1 are possible due to ([BDW+] Fused-Multiply Add (FMA) counting - common; [ADL+] use all of ADD/MUL/FMA in Scalar or 128/256-bit vectors - less common)."
79849898fefSIan Rogers    },
79949898fefSIan Rogers    {
800f9d45862SIan Rogers        "BriefDescription": "Instruction-Level-Parallelism (average number of uops executed when there is execution) per-core",
801ed97cc6cSJin Yao        "MetricExpr": "UOPS_EXECUTED.THREAD / ((UOPS_EXECUTED.CORE_CYCLES_GE_1 / 2) if #SMT_on else UOPS_EXECUTED.CORE_CYCLES_GE_1)",
80249898fefSIan Rogers        "MetricGroup": "Backend;Cor;Pipeline;PortsUtil",
803ed97cc6cSJin Yao        "MetricName": "ILP"
804ed97cc6cSJin Yao    },
805ed97cc6cSJin Yao    {
806f9d45862SIan Rogers        "BriefDescription": "Probability of Core Bound bottleneck hidden by SMT-profiling artifacts",
807*55b201a8SIan Rogers        "MetricExpr": "(1 - tma_core_bound / tma_ports_utilization if tma_core_bound < tma_ports_utilization else 1) if SMT_2T_Utilization > 0.5 else 0",
808f9d45862SIan Rogers        "MetricGroup": "Cor;SMT",
809f9d45862SIan Rogers        "MetricName": "Core_Bound_Likely"
81049898fefSIan Rogers    },
81149898fefSIan Rogers    {
812ed97cc6cSJin Yao        "BriefDescription": "Core actual clocks when any Logical Processor is active on the Physical Core",
813*55b201a8SIan Rogers        "MetricExpr": "((CPU_CLK_UNHALTED.THREAD / 2) * (1 + CPU_CLK_UNHALTED.ONE_THREAD_ACTIVE / CPU_CLK_UNHALTED.REF_XCLK)) if #core_wide < 1 else (CPU_CLK_UNHALTED.THREAD_ANY / 2) if #SMT_on else CLKS",
814ed97cc6cSJin Yao        "MetricGroup": "SMT",
815ed97cc6cSJin Yao        "MetricName": "CORE_CLKS"
816fd550098SAndi Kleen    },
817fd550098SAndi Kleen    {
818038d3b53SJin Yao        "BriefDescription": "Instructions per Load (lower number means higher occurrence rate)",
819fd550098SAndi Kleen        "MetricExpr": "INST_RETIRED.ANY / MEM_INST_RETIRED.ALL_LOADS",
820ed97cc6cSJin Yao        "MetricGroup": "InsType",
821038d3b53SJin Yao        "MetricName": "IpLoad"
822fd550098SAndi Kleen    },
823fd550098SAndi Kleen    {
824038d3b53SJin Yao        "BriefDescription": "Instructions per Store (lower number means higher occurrence rate)",
825fd550098SAndi Kleen        "MetricExpr": "INST_RETIRED.ANY / MEM_INST_RETIRED.ALL_STORES",
826ed97cc6cSJin Yao        "MetricGroup": "InsType",
827038d3b53SJin Yao        "MetricName": "IpStore"
828fd550098SAndi Kleen    },
829fd550098SAndi Kleen    {
830038d3b53SJin Yao        "BriefDescription": "Instructions per Branch (lower number means higher occurrence rate)",
831fd550098SAndi Kleen        "MetricExpr": "INST_RETIRED.ANY / BR_INST_RETIRED.ALL_BRANCHES",
83249898fefSIan Rogers        "MetricGroup": "Branches;Fed;InsType",
833038d3b53SJin Yao        "MetricName": "IpBranch"
834fd550098SAndi Kleen    },
835fd550098SAndi Kleen    {
836038d3b53SJin Yao        "BriefDescription": "Instructions per (near) call (lower number means higher occurrence rate)",
837fd550098SAndi Kleen        "MetricExpr": "INST_RETIRED.ANY / BR_INST_RETIRED.NEAR_CALL",
83849898fefSIan Rogers        "MetricGroup": "Branches;Fed;PGO",
839fd550098SAndi Kleen        "MetricName": "IpCall"
840fd550098SAndi Kleen    },
841fd550098SAndi Kleen    {
84249898fefSIan Rogers        "BriefDescription": "Instruction per taken branch",
84349898fefSIan Rogers        "MetricExpr": "INST_RETIRED.ANY / BR_INST_RETIRED.NEAR_TAKEN",
84449898fefSIan Rogers        "MetricGroup": "Branches;Fed;FetchBW;Frontend;PGO",
84549898fefSIan Rogers        "MetricName": "IpTB"
84649898fefSIan Rogers    },
84749898fefSIan Rogers    {
848038d3b53SJin Yao        "BriefDescription": "Branch instructions per taken branch. ",
849038d3b53SJin Yao        "MetricExpr": "BR_INST_RETIRED.ALL_BRANCHES / BR_INST_RETIRED.NEAR_TAKEN",
85049898fefSIan Rogers        "MetricGroup": "Branches;Fed;PGO",
851038d3b53SJin Yao        "MetricName": "BpTkBranch"
852038d3b53SJin Yao    },
853038d3b53SJin Yao    {
854038d3b53SJin Yao        "BriefDescription": "Instructions per Floating Point (FP) Operation (lower number means higher occurrence rate)",
855038d3b53SJin Yao        "MetricExpr": "INST_RETIRED.ANY / (1 * (FP_ARITH_INST_RETIRED.SCALAR_SINGLE + FP_ARITH_INST_RETIRED.SCALAR_DOUBLE) + 2 * FP_ARITH_INST_RETIRED.128B_PACKED_DOUBLE + 4 * (FP_ARITH_INST_RETIRED.128B_PACKED_SINGLE + FP_ARITH_INST_RETIRED.256B_PACKED_DOUBLE) + 8 * (FP_ARITH_INST_RETIRED.256B_PACKED_SINGLE + FP_ARITH_INST_RETIRED.512B_PACKED_DOUBLE) + 16 * FP_ARITH_INST_RETIRED.512B_PACKED_SINGLE)",
85649898fefSIan Rogers        "MetricGroup": "Flops;InsType",
857038d3b53SJin Yao        "MetricName": "IpFLOP"
858038d3b53SJin Yao    },
859038d3b53SJin Yao    {
86049898fefSIan Rogers        "BriefDescription": "Instructions per FP Arithmetic instruction (lower number means higher occurrence rate)",
86149898fefSIan Rogers        "MetricExpr": "INST_RETIRED.ANY / ((FP_ARITH_INST_RETIRED.SCALAR_SINGLE + FP_ARITH_INST_RETIRED.SCALAR_DOUBLE) + (FP_ARITH_INST_RETIRED.128B_PACKED_DOUBLE + FP_ARITH_INST_RETIRED.128B_PACKED_SINGLE + FP_ARITH_INST_RETIRED.256B_PACKED_DOUBLE + FP_ARITH_INST_RETIRED.256B_PACKED_SINGLE + FP_ARITH_INST_RETIRED.512B_PACKED_DOUBLE + FP_ARITH_INST_RETIRED.512B_PACKED_SINGLE))",
86249898fefSIan Rogers        "MetricGroup": "Flops;InsType",
86349898fefSIan Rogers        "MetricName": "IpArith",
86449898fefSIan Rogers        "PublicDescription": "Instructions per FP Arithmetic instruction (lower number means higher occurrence rate). May undercount due to FMA double counting. Approximated prior to BDW."
86549898fefSIan Rogers    },
86649898fefSIan Rogers    {
86749898fefSIan Rogers        "BriefDescription": "Instructions per FP Arithmetic Scalar Single-Precision instruction (lower number means higher occurrence rate)",
86849898fefSIan Rogers        "MetricExpr": "INST_RETIRED.ANY / FP_ARITH_INST_RETIRED.SCALAR_SINGLE",
86949898fefSIan Rogers        "MetricGroup": "Flops;FpScalar;InsType",
87049898fefSIan Rogers        "MetricName": "IpArith_Scalar_SP",
87149898fefSIan Rogers        "PublicDescription": "Instructions per FP Arithmetic Scalar Single-Precision instruction (lower number means higher occurrence rate). May undercount due to FMA double counting."
87249898fefSIan Rogers    },
87349898fefSIan Rogers    {
87449898fefSIan Rogers        "BriefDescription": "Instructions per FP Arithmetic Scalar Double-Precision instruction (lower number means higher occurrence rate)",
87549898fefSIan Rogers        "MetricExpr": "INST_RETIRED.ANY / FP_ARITH_INST_RETIRED.SCALAR_DOUBLE",
87649898fefSIan Rogers        "MetricGroup": "Flops;FpScalar;InsType",
87749898fefSIan Rogers        "MetricName": "IpArith_Scalar_DP",
87849898fefSIan Rogers        "PublicDescription": "Instructions per FP Arithmetic Scalar Double-Precision instruction (lower number means higher occurrence rate). May undercount due to FMA double counting."
87949898fefSIan Rogers    },
88049898fefSIan Rogers    {
88149898fefSIan Rogers        "BriefDescription": "Instructions per FP Arithmetic AVX/SSE 128-bit instruction (lower number means higher occurrence rate)",
88249898fefSIan Rogers        "MetricExpr": "INST_RETIRED.ANY / (FP_ARITH_INST_RETIRED.128B_PACKED_DOUBLE + FP_ARITH_INST_RETIRED.128B_PACKED_SINGLE)",
88349898fefSIan Rogers        "MetricGroup": "Flops;FpVector;InsType",
88449898fefSIan Rogers        "MetricName": "IpArith_AVX128",
88549898fefSIan Rogers        "PublicDescription": "Instructions per FP Arithmetic AVX/SSE 128-bit instruction (lower number means higher occurrence rate). May undercount due to FMA double counting."
88649898fefSIan Rogers    },
88749898fefSIan Rogers    {
88849898fefSIan Rogers        "BriefDescription": "Instructions per FP Arithmetic AVX* 256-bit instruction (lower number means higher occurrence rate)",
88949898fefSIan Rogers        "MetricExpr": "INST_RETIRED.ANY / (FP_ARITH_INST_RETIRED.256B_PACKED_DOUBLE + FP_ARITH_INST_RETIRED.256B_PACKED_SINGLE)",
89049898fefSIan Rogers        "MetricGroup": "Flops;FpVector;InsType",
89149898fefSIan Rogers        "MetricName": "IpArith_AVX256",
89249898fefSIan Rogers        "PublicDescription": "Instructions per FP Arithmetic AVX* 256-bit instruction (lower number means higher occurrence rate). May undercount due to FMA double counting."
89349898fefSIan Rogers    },
89449898fefSIan Rogers    {
89549898fefSIan Rogers        "BriefDescription": "Instructions per FP Arithmetic AVX 512-bit instruction (lower number means higher occurrence rate)",
89649898fefSIan Rogers        "MetricExpr": "INST_RETIRED.ANY / (FP_ARITH_INST_RETIRED.512B_PACKED_DOUBLE + FP_ARITH_INST_RETIRED.512B_PACKED_SINGLE)",
89749898fefSIan Rogers        "MetricGroup": "Flops;FpVector;InsType",
89849898fefSIan Rogers        "MetricName": "IpArith_AVX512",
89949898fefSIan Rogers        "PublicDescription": "Instructions per FP Arithmetic AVX 512-bit instruction (lower number means higher occurrence rate). May undercount due to FMA double counting."
90049898fefSIan Rogers    },
90149898fefSIan Rogers    {
902f9d45862SIan Rogers        "BriefDescription": "Instructions per Software prefetch instruction (of any type: NTA/T0/T1/T2/Prefetch) (lower number means higher occurrence rate)",
903f9d45862SIan Rogers        "MetricExpr": "INST_RETIRED.ANY / cpu@SW_PREFETCH_ACCESS.T0\\,umask\\=0xF@",
904f9d45862SIan Rogers        "MetricGroup": "Prefetches",
905f9d45862SIan Rogers        "MetricName": "IpSWPF"
906f9d45862SIan Rogers    },
907f9d45862SIan Rogers    {
908*55b201a8SIan Rogers        "BriefDescription": "Total number of retired Instructions Sample with: INST_RETIRED.PREC_DIST",
90961ec07f5SHaiyan Song        "MetricExpr": "INST_RETIRED.ANY",
910*55b201a8SIan Rogers        "MetricGroup": "Summary;tma_L1_group",
911ecd94f1bSKan Liang        "MetricName": "Instructions"
912ecd94f1bSKan Liang    },
913ecd94f1bSKan Liang    {
914f9d45862SIan Rogers        "BriefDescription": "Average number of Uops retired in cycles where at least one uop has retired.",
915f9d45862SIan Rogers        "MetricExpr": "UOPS_RETIRED.RETIRE_SLOTS / cpu@UOPS_RETIRED.RETIRE_SLOTS\\,cmask\\=1@",
916f9d45862SIan Rogers        "MetricGroup": "Pipeline;Ret",
917f9d45862SIan Rogers        "MetricName": "Retire"
918f9d45862SIan Rogers    },
919f9d45862SIan Rogers    {
920f9d45862SIan Rogers        "BriefDescription": "",
921f9d45862SIan Rogers        "MetricExpr": "UOPS_EXECUTED.THREAD / cpu@UOPS_EXECUTED.THREAD\\,cmask\\=1@",
922f9d45862SIan Rogers        "MetricGroup": "Cor;Pipeline;PortsUtil;SMT",
923f9d45862SIan Rogers        "MetricName": "Execute"
924f9d45862SIan Rogers    },
925f9d45862SIan Rogers    {
92649898fefSIan Rogers        "BriefDescription": "Average number of Uops issued by front-end when it issued something",
92749898fefSIan Rogers        "MetricExpr": "UOPS_ISSUED.ANY / cpu@UOPS_ISSUED.ANY\\,cmask\\=1@",
92849898fefSIan Rogers        "MetricGroup": "Fed;FetchBW",
92949898fefSIan Rogers        "MetricName": "Fetch_UpC"
93049898fefSIan Rogers    },
93149898fefSIan Rogers    {
932038d3b53SJin Yao        "BriefDescription": "Fraction of Uops delivered by the DSB (aka Decoded ICache; or Uop Cache)",
933f9d45862SIan Rogers        "MetricExpr": "IDQ.DSB_UOPS / (IDQ.DSB_UOPS + IDQ.MITE_UOPS + IDQ.MS_UOPS)",
93449898fefSIan Rogers        "MetricGroup": "DSB;Fed;FetchBW",
935038d3b53SJin Yao        "MetricName": "DSB_Coverage"
936038d3b53SJin Yao    },
937038d3b53SJin Yao    {
938f9d45862SIan Rogers        "BriefDescription": "Average number of cycles of a switch from the DSB fetch-unit to MITE fetch unit - see DSB_Switches tree node for details.",
939f9d45862SIan Rogers        "MetricExpr": "DSB2MITE_SWITCHES.PENALTY_CYCLES / DSB2MITE_SWITCHES.COUNT",
940f9d45862SIan Rogers        "MetricGroup": "DSBmiss",
941f9d45862SIan Rogers        "MetricName": "DSB_Switch_Cost"
942f9d45862SIan Rogers    },
943f9d45862SIan Rogers    {
944f9d45862SIan Rogers        "BriefDescription": "Total penalty related to DSB (uop cache) misses - subset of the Instruction_Fetch_BW Bottleneck.",
945*55b201a8SIan Rogers        "MetricExpr": "100 * (tma_fetch_latency * tma_dsb_switches / (tma_branch_resteers + tma_dsb_switches + tma_icache_misses + tma_itlb_misses + tma_lcp + tma_ms_switches) + tma_fetch_bandwidth * tma_mite / (tma_dsb + tma_mite))",
94649898fefSIan Rogers        "MetricGroup": "DSBmiss;Fed",
947f9d45862SIan Rogers        "MetricName": "DSB_Misses"
94849898fefSIan Rogers    },
94949898fefSIan Rogers    {
950f9d45862SIan Rogers        "BriefDescription": "Number of Instructions per non-speculative DSB miss (lower number means higher occurrence rate)",
95149898fefSIan Rogers        "MetricExpr": "INST_RETIRED.ANY / FRONTEND_RETIRED.ANY_DSB_MISS",
95249898fefSIan Rogers        "MetricGroup": "DSBmiss;Fed",
95349898fefSIan Rogers        "MetricName": "IpDSB_Miss_Ret"
95449898fefSIan Rogers    },
95549898fefSIan Rogers    {
956f9d45862SIan Rogers        "BriefDescription": "Number of Instructions per non-speculative Branch Misprediction (JEClear) (lower number means higher occurrence rate)",
957f9d45862SIan Rogers        "MetricExpr": "INST_RETIRED.ANY / BR_MISP_RETIRED.ALL_BRANCHES",
958f9d45862SIan Rogers        "MetricGroup": "Bad;BadSpec;BrMispredicts",
959f9d45862SIan Rogers        "MetricName": "IpMispredict"
960f9d45862SIan Rogers    },
961f9d45862SIan Rogers    {
962f9d45862SIan Rogers        "BriefDescription": "Branch Misprediction Cost: Fraction of TMA slots wasted per non-speculative branch misprediction (retired JEClear)",
963*55b201a8SIan Rogers        "MetricExpr": " (tma_branch_mispredicts + tma_fetch_latency * tma_mispredicts_resteers / (tma_branch_resteers + tma_dsb_switches + tma_icache_misses + tma_itlb_misses + tma_lcp + tma_ms_switches)) * SLOTS / BR_MISP_RETIRED.ALL_BRANCHES",
964f9d45862SIan Rogers        "MetricGroup": "Bad;BrMispredicts",
965f9d45862SIan Rogers        "MetricName": "Branch_Misprediction_Cost"
966f9d45862SIan Rogers    },
967f9d45862SIan Rogers    {
96849898fefSIan Rogers        "BriefDescription": "Fraction of branches that are non-taken conditionals",
96949898fefSIan Rogers        "MetricExpr": "BR_INST_RETIRED.NOT_TAKEN / BR_INST_RETIRED.ALL_BRANCHES",
97049898fefSIan Rogers        "MetricGroup": "Bad;Branches;CodeGen;PGO",
97149898fefSIan Rogers        "MetricName": "Cond_NT"
97249898fefSIan Rogers    },
97349898fefSIan Rogers    {
97449898fefSIan Rogers        "BriefDescription": "Fraction of branches that are taken conditionals",
97549898fefSIan Rogers        "MetricExpr": "(BR_INST_RETIRED.CONDITIONAL - BR_INST_RETIRED.NOT_TAKEN) / BR_INST_RETIRED.ALL_BRANCHES",
97649898fefSIan Rogers        "MetricGroup": "Bad;Branches;CodeGen;PGO",
97749898fefSIan Rogers        "MetricName": "Cond_TK"
97849898fefSIan Rogers    },
97949898fefSIan Rogers    {
98049898fefSIan Rogers        "BriefDescription": "Fraction of branches that are CALL or RET",
98149898fefSIan Rogers        "MetricExpr": "(BR_INST_RETIRED.NEAR_CALL + BR_INST_RETIRED.NEAR_RETURN) / BR_INST_RETIRED.ALL_BRANCHES",
98249898fefSIan Rogers        "MetricGroup": "Bad;Branches",
98349898fefSIan Rogers        "MetricName": "CallRet"
98449898fefSIan Rogers    },
98549898fefSIan Rogers    {
98649898fefSIan Rogers        "BriefDescription": "Fraction of branches that are unconditional (direct or indirect) jumps",
98749898fefSIan Rogers        "MetricExpr": "(BR_INST_RETIRED.NEAR_TAKEN - (BR_INST_RETIRED.CONDITIONAL - BR_INST_RETIRED.NOT_TAKEN) - 2 * BR_INST_RETIRED.NEAR_CALL) / BR_INST_RETIRED.ALL_BRANCHES",
98849898fefSIan Rogers        "MetricGroup": "Bad;Branches",
98949898fefSIan Rogers        "MetricName": "Jump"
99049898fefSIan Rogers    },
99149898fefSIan Rogers    {
992f9d45862SIan Rogers        "BriefDescription": "Actual Average Latency for L1 data-cache miss demand load operations (in core cycles)",
99361ec07f5SHaiyan Song        "MetricExpr": "L1D_PEND_MISS.PENDING / (MEM_LOAD_RETIRED.L1_MISS + MEM_LOAD_RETIRED.FB_HIT)",
99449898fefSIan Rogers        "MetricGroup": "Mem;MemoryBound;MemoryLat",
995f9d45862SIan Rogers        "MetricName": "Load_Miss_Real_Latency"
996ecd94f1bSKan Liang    },
997ecd94f1bSKan Liang    {
99861ec07f5SHaiyan Song        "BriefDescription": "Memory-Level-Parallelism (average number of L1 miss demand load when there is at least one such miss. Per-Logical Processor)",
999fd550098SAndi Kleen        "MetricExpr": "L1D_PEND_MISS.PENDING / L1D_PEND_MISS.PENDING_CYCLES",
1000*55b201a8SIan Rogers        "MetricGroup": "Mem;MemoryBW;MemoryBound",
1001ecd94f1bSKan Liang        "MetricName": "MLP"
1002ecd94f1bSKan Liang    },
1003ecd94f1bSKan Liang    {
1004fd550098SAndi Kleen        "BriefDescription": "L1 cache true misses per kilo instruction for retired demand loads",
100561ec07f5SHaiyan Song        "MetricExpr": "1000 * MEM_LOAD_RETIRED.L1_MISS / INST_RETIRED.ANY",
1006*55b201a8SIan Rogers        "MetricGroup": "CacheMisses;Mem",
1007fd550098SAndi Kleen        "MetricName": "L1MPKI"
1008fd550098SAndi Kleen    },
1009fd550098SAndi Kleen    {
101049898fefSIan Rogers        "BriefDescription": "L1 cache true misses per kilo instruction for all demand loads (including speculative)",
101149898fefSIan Rogers        "MetricExpr": "1000 * L2_RQSTS.ALL_DEMAND_DATA_RD / INST_RETIRED.ANY",
1012*55b201a8SIan Rogers        "MetricGroup": "CacheMisses;Mem",
101349898fefSIan Rogers        "MetricName": "L1MPKI_Load"
101449898fefSIan Rogers    },
101549898fefSIan Rogers    {
1016fd550098SAndi Kleen        "BriefDescription": "L2 cache true misses per kilo instruction for retired demand loads",
101761ec07f5SHaiyan Song        "MetricExpr": "1000 * MEM_LOAD_RETIRED.L2_MISS / INST_RETIRED.ANY",
1018*55b201a8SIan Rogers        "MetricGroup": "Backend;CacheMisses;Mem",
1019fd550098SAndi Kleen        "MetricName": "L2MPKI"
1020fd550098SAndi Kleen    },
1021fd550098SAndi Kleen    {
1022f9d45862SIan Rogers        "BriefDescription": "L2 cache ([RKL+] true) misses per kilo instruction for all request types (including speculative)",
102361ec07f5SHaiyan Song        "MetricExpr": "1000 * L2_RQSTS.MISS / INST_RETIRED.ANY",
1024*55b201a8SIan Rogers        "MetricGroup": "CacheMisses;Mem;Offcore",
1025fd550098SAndi Kleen        "MetricName": "L2MPKI_All"
1026fd550098SAndi Kleen    },
1027fd550098SAndi Kleen    {
1028f9d45862SIan Rogers        "BriefDescription": "L2 cache ([RKL+] true) misses per kilo instruction for all demand loads  (including speculative)",
102949898fefSIan Rogers        "MetricExpr": "1000 * L2_RQSTS.DEMAND_DATA_RD_MISS / INST_RETIRED.ANY",
1030*55b201a8SIan Rogers        "MetricGroup": "CacheMisses;Mem",
103149898fefSIan Rogers        "MetricName": "L2MPKI_Load"
103249898fefSIan Rogers    },
103349898fefSIan Rogers    {
1034fd550098SAndi Kleen        "BriefDescription": "L2 cache hits per kilo instruction for all request types (including speculative)",
103561ec07f5SHaiyan Song        "MetricExpr": "1000 * (L2_RQSTS.REFERENCES - L2_RQSTS.MISS) / INST_RETIRED.ANY",
1036*55b201a8SIan Rogers        "MetricGroup": "CacheMisses;Mem",
1037fd550098SAndi Kleen        "MetricName": "L2HPKI_All"
1038fd550098SAndi Kleen    },
1039fd550098SAndi Kleen    {
104049898fefSIan Rogers        "BriefDescription": "L2 cache hits per kilo instruction for all demand loads  (including speculative)",
104149898fefSIan Rogers        "MetricExpr": "1000 * L2_RQSTS.DEMAND_DATA_RD_HIT / INST_RETIRED.ANY",
1042*55b201a8SIan Rogers        "MetricGroup": "CacheMisses;Mem",
104349898fefSIan Rogers        "MetricName": "L2HPKI_Load"
104449898fefSIan Rogers    },
104549898fefSIan Rogers    {
1046fd550098SAndi Kleen        "BriefDescription": "L3 cache true misses per kilo instruction for retired demand loads",
104761ec07f5SHaiyan Song        "MetricExpr": "1000 * MEM_LOAD_RETIRED.L3_MISS / INST_RETIRED.ANY",
1048*55b201a8SIan Rogers        "MetricGroup": "CacheMisses;Mem",
1049fd550098SAndi Kleen        "MetricName": "L3MPKI"
1050fd550098SAndi Kleen    },
1051fd550098SAndi Kleen    {
1052f9d45862SIan Rogers        "BriefDescription": "Fill Buffer (FB) hits per kilo instructions for retired demand loads (L1D misses that merge into ongoing miss-handling entries)",
105349898fefSIan Rogers        "MetricExpr": "1000 * MEM_LOAD_RETIRED.FB_HIT / INST_RETIRED.ANY",
1054*55b201a8SIan Rogers        "MetricGroup": "CacheMisses;Mem",
105549898fefSIan Rogers        "MetricName": "FB_HPKI"
105649898fefSIan Rogers    },
105749898fefSIan Rogers    {
105849898fefSIan Rogers        "BriefDescription": "Utilization of the core's Page Walker(s) serving STLB misses triggered by instruction/Load/Store accesses",
105949898fefSIan Rogers        "MetricConstraint": "NO_NMI_WATCHDOG",
1060*55b201a8SIan Rogers        "MetricExpr": "(ITLB_MISSES.WALK_PENDING + DTLB_LOAD_MISSES.WALK_PENDING + DTLB_STORE_MISSES.WALK_PENDING + EPT.WALK_PENDING) / (2 * CORE_CLKS)",
106149898fefSIan Rogers        "MetricGroup": "Mem;MemoryTLB",
106249898fefSIan Rogers        "MetricName": "Page_Walks_Utilization"
106349898fefSIan Rogers    },
106449898fefSIan Rogers    {
1065f9d45862SIan Rogers        "BriefDescription": "Average per-core data fill bandwidth to the L1 data cache [GB / sec]",
1066f9d45862SIan Rogers        "MetricExpr": "64 * L1D.REPLACEMENT / 1000000000 / duration_time",
1067f9d45862SIan Rogers        "MetricGroup": "Mem;MemoryBW",
1068f9d45862SIan Rogers        "MetricName": "L1D_Cache_Fill_BW"
1069f9d45862SIan Rogers    },
1070f9d45862SIan Rogers    {
1071f9d45862SIan Rogers        "BriefDescription": "Average per-core data fill bandwidth to the L2 cache [GB / sec]",
1072f9d45862SIan Rogers        "MetricExpr": "64 * L2_LINES_IN.ALL / 1000000000 / duration_time",
1073f9d45862SIan Rogers        "MetricGroup": "Mem;MemoryBW",
1074f9d45862SIan Rogers        "MetricName": "L2_Cache_Fill_BW"
1075f9d45862SIan Rogers    },
1076f9d45862SIan Rogers    {
1077f9d45862SIan Rogers        "BriefDescription": "Average per-core data fill bandwidth to the L3 cache [GB / sec]",
1078f9d45862SIan Rogers        "MetricExpr": "64 * LONGEST_LAT_CACHE.MISS / 1000000000 / duration_time",
1079f9d45862SIan Rogers        "MetricGroup": "Mem;MemoryBW",
1080f9d45862SIan Rogers        "MetricName": "L3_Cache_Fill_BW"
1081f9d45862SIan Rogers    },
1082f9d45862SIan Rogers    {
1083f9d45862SIan Rogers        "BriefDescription": "Average per-core data access bandwidth to the L3 cache [GB / sec]",
1084f9d45862SIan Rogers        "MetricExpr": "64 * OFFCORE_REQUESTS.ALL_REQUESTS / 1000000000 / duration_time",
1085f9d45862SIan Rogers        "MetricGroup": "Mem;MemoryBW;Offcore",
1086f9d45862SIan Rogers        "MetricName": "L3_Cache_Access_BW"
1087f9d45862SIan Rogers    },
1088f9d45862SIan Rogers    {
108961ec07f5SHaiyan Song        "BriefDescription": "Rate of silent evictions from the L2 cache per Kilo instruction where the evicted lines are dropped (no writeback to L3 or memory)",
1090*55b201a8SIan Rogers        "MetricExpr": "1000 * L2_LINES_OUT.SILENT / Instructions",
109149898fefSIan Rogers        "MetricGroup": "L2Evicts;Mem;Server",
109261ec07f5SHaiyan Song        "MetricName": "L2_Evictions_Silent_PKI"
109361ec07f5SHaiyan Song    },
109461ec07f5SHaiyan Song    {
109561ec07f5SHaiyan Song        "BriefDescription": "Rate of non silent evictions from the L2 cache per Kilo instruction",
1096*55b201a8SIan Rogers        "MetricExpr": "1000 * L2_LINES_OUT.NON_SILENT / Instructions",
109749898fefSIan Rogers        "MetricGroup": "L2Evicts;Mem;Server",
109861ec07f5SHaiyan Song        "MetricName": "L2_Evictions_NonSilent_PKI"
109961ec07f5SHaiyan Song    },
110061ec07f5SHaiyan Song    {
1101f9d45862SIan Rogers        "BriefDescription": "Average per-thread data fill bandwidth to the L1 data cache [GB / sec]",
1102*55b201a8SIan Rogers        "MetricExpr": "L1D_Cache_Fill_BW",
1103f9d45862SIan Rogers        "MetricGroup": "Mem;MemoryBW",
1104f9d45862SIan Rogers        "MetricName": "L1D_Cache_Fill_BW_1T"
1105f9d45862SIan Rogers    },
1106f9d45862SIan Rogers    {
1107f9d45862SIan Rogers        "BriefDescription": "Average per-thread data fill bandwidth to the L2 cache [GB / sec]",
1108*55b201a8SIan Rogers        "MetricExpr": "L2_Cache_Fill_BW",
1109f9d45862SIan Rogers        "MetricGroup": "Mem;MemoryBW",
1110f9d45862SIan Rogers        "MetricName": "L2_Cache_Fill_BW_1T"
1111f9d45862SIan Rogers    },
1112f9d45862SIan Rogers    {
1113f9d45862SIan Rogers        "BriefDescription": "Average per-thread data fill bandwidth to the L3 cache [GB / sec]",
1114*55b201a8SIan Rogers        "MetricExpr": "L3_Cache_Fill_BW",
1115f9d45862SIan Rogers        "MetricGroup": "Mem;MemoryBW",
1116f9d45862SIan Rogers        "MetricName": "L3_Cache_Fill_BW_1T"
1117f9d45862SIan Rogers    },
1118f9d45862SIan Rogers    {
1119f9d45862SIan Rogers        "BriefDescription": "Average per-thread data access bandwidth to the L3 cache [GB / sec]",
1120*55b201a8SIan Rogers        "MetricExpr": "L3_Cache_Access_BW",
1121f9d45862SIan Rogers        "MetricGroup": "Mem;MemoryBW;Offcore",
1122f9d45862SIan Rogers        "MetricName": "L3_Cache_Access_BW_1T"
1123f9d45862SIan Rogers    },
1124f9d45862SIan Rogers    {
1125fd550098SAndi Kleen        "BriefDescription": "Average CPU Utilization",
112661ec07f5SHaiyan Song        "MetricExpr": "CPU_CLK_UNHALTED.REF_TSC / msr@tsc@",
1127ed97cc6cSJin Yao        "MetricGroup": "HPC;Summary",
1128ecd94f1bSKan Liang        "MetricName": "CPU_Utilization"
1129ecd94f1bSKan Liang    },
1130ecd94f1bSKan Liang    {
1131ed97cc6cSJin Yao        "BriefDescription": "Measured Average Frequency for unhalted processors [GHz]",
1132*55b201a8SIan Rogers        "MetricExpr": "Turbo_Utilization * msr@tsc@ / 1000000000 / duration_time",
1133*55b201a8SIan Rogers        "MetricGroup": "Power;Summary",
1134ed97cc6cSJin Yao        "MetricName": "Average_Frequency"
1135ed97cc6cSJin Yao    },
1136ed97cc6cSJin Yao    {
1137ecd94f1bSKan Liang        "BriefDescription": "Giga Floating Point Operations Per Second",
1138038d3b53SJin Yao        "MetricExpr": "((1 * (FP_ARITH_INST_RETIRED.SCALAR_SINGLE + FP_ARITH_INST_RETIRED.SCALAR_DOUBLE) + 2 * FP_ARITH_INST_RETIRED.128B_PACKED_DOUBLE + 4 * (FP_ARITH_INST_RETIRED.128B_PACKED_SINGLE + FP_ARITH_INST_RETIRED.256B_PACKED_DOUBLE) + 8 * (FP_ARITH_INST_RETIRED.256B_PACKED_SINGLE + FP_ARITH_INST_RETIRED.512B_PACKED_DOUBLE) + 16 * FP_ARITH_INST_RETIRED.512B_PACKED_SINGLE) / 1000000000) / duration_time",
113949898fefSIan Rogers        "MetricGroup": "Cor;Flops;HPC",
1140f9d45862SIan Rogers        "MetricName": "GFLOPs",
1141f9d45862SIan Rogers        "PublicDescription": "Giga Floating Point Operations Per Second. Aggregate across all supported options of: FP precisions, scalar and vector instructions, vector-width and AMX engine."
1142ecd94f1bSKan Liang    },
1143ecd94f1bSKan Liang    {
1144fd550098SAndi Kleen        "BriefDescription": "Average Frequency Utilization relative nominal frequency",
1145*55b201a8SIan Rogers        "MetricExpr": "CLKS / CPU_CLK_UNHALTED.REF_TSC",
1146ecd94f1bSKan Liang        "MetricGroup": "Power",
1147ecd94f1bSKan Liang        "MetricName": "Turbo_Utilization"
1148ecd94f1bSKan Liang    },
1149ecd94f1bSKan Liang    {
115049898fefSIan Rogers        "BriefDescription": "Fraction of Core cycles where the core was running with power-delivery for baseline license level 0",
1151*55b201a8SIan Rogers        "MetricExpr": "CORE_POWER.LVL0_TURBO_LICENSE / 2 / CORE_CLKS if #SMT_on else CORE_POWER.LVL0_TURBO_LICENSE / CORE_CLKS",
115249898fefSIan Rogers        "MetricGroup": "Power",
115349898fefSIan Rogers        "MetricName": "Power_License0_Utilization",
115449898fefSIan Rogers        "PublicDescription": "Fraction of Core cycles where the core was running with power-delivery for baseline license level 0.  This includes non-AVX codes, SSE, AVX 128-bit, and low-current AVX 256-bit codes."
115549898fefSIan Rogers    },
115649898fefSIan Rogers    {
115749898fefSIan Rogers        "BriefDescription": "Fraction of Core cycles where the core was running with power-delivery for license level 1",
1158*55b201a8SIan Rogers        "MetricExpr": "CORE_POWER.LVL1_TURBO_LICENSE / 2 / CORE_CLKS if #SMT_on else CORE_POWER.LVL1_TURBO_LICENSE / CORE_CLKS",
115949898fefSIan Rogers        "MetricGroup": "Power",
116049898fefSIan Rogers        "MetricName": "Power_License1_Utilization",
116149898fefSIan Rogers        "PublicDescription": "Fraction of Core cycles where the core was running with power-delivery for license level 1.  This includes high current AVX 256-bit instructions as well as low current AVX 512-bit instructions."
116249898fefSIan Rogers    },
116349898fefSIan Rogers    {
116449898fefSIan Rogers        "BriefDescription": "Fraction of Core cycles where the core was running with power-delivery for license level 2 (introduced in SKX)",
1165*55b201a8SIan Rogers        "MetricExpr": "CORE_POWER.LVL2_TURBO_LICENSE / 2 / CORE_CLKS if #SMT_on else CORE_POWER.LVL2_TURBO_LICENSE / CORE_CLKS",
116649898fefSIan Rogers        "MetricGroup": "Power",
116749898fefSIan Rogers        "MetricName": "Power_License2_Utilization",
116849898fefSIan Rogers        "PublicDescription": "Fraction of Core cycles where the core was running with power-delivery for license level 2 (introduced in SKX).  This includes high current AVX 512-bit instructions."
116949898fefSIan Rogers    },
117049898fefSIan Rogers    {
117161ec07f5SHaiyan Song        "BriefDescription": "Fraction of cycles where both hardware Logical Processors were active",
1172ed97cc6cSJin Yao        "MetricExpr": "1 - CPU_CLK_UNHALTED.ONE_THREAD_ACTIVE / (CPU_CLK_UNHALTED.REF_XCLK_ANY / 2) if #SMT_on else 0",
1173ed97cc6cSJin Yao        "MetricGroup": "SMT",
1174ecd94f1bSKan Liang        "MetricName": "SMT_2T_Utilization"
1175ecd94f1bSKan Liang    },
1176ecd94f1bSKan Liang    {
1177038d3b53SJin Yao        "BriefDescription": "Fraction of cycles spent in the Operating System (OS) Kernel mode",
1178ed97cc6cSJin Yao        "MetricExpr": "CPU_CLK_UNHALTED.THREAD_P:k / CPU_CLK_UNHALTED.THREAD",
1179038d3b53SJin Yao        "MetricGroup": "OS",
1180ecd94f1bSKan Liang        "MetricName": "Kernel_Utilization"
1181ecd94f1bSKan Liang    },
1182ecd94f1bSKan Liang    {
118349898fefSIan Rogers        "BriefDescription": "Cycles Per Instruction for the Operating System (OS) Kernel mode",
118449898fefSIan Rogers        "MetricExpr": "CPU_CLK_UNHALTED.THREAD_P:k / INST_RETIRED.ANY_P:k",
118549898fefSIan Rogers        "MetricGroup": "OS",
118649898fefSIan Rogers        "MetricName": "Kernel_CPI"
118749898fefSIan Rogers    },
118849898fefSIan Rogers    {
1189fd550098SAndi Kleen        "BriefDescription": "Average external Memory Bandwidth Use for reads and writes [GB / sec]",
1190ed97cc6cSJin Yao        "MetricExpr": "(64 * (uncore_imc@cas_count_read@ + uncore_imc@cas_count_write@) / 1000000000) / duration_time",
119149898fefSIan Rogers        "MetricGroup": "HPC;Mem;MemoryBW;SoC",
1192fd550098SAndi Kleen        "MetricName": "DRAM_BW_Use"
1193fd550098SAndi Kleen    },
1194fd550098SAndi Kleen    {
1195fd550098SAndi Kleen        "BriefDescription": "Average latency of data read request to external memory (in nanoseconds). Accounts for demand loads and L1/L2 prefetches",
1196*55b201a8SIan Rogers        "MetricExpr": "1000000000 * (cha@event\\=0x36\\,umask\\=0x21\\,config\\=0x40433@ / cha@event\\=0x35\\,umask\\=0x21\\,config\\=0x40433@) / (Socket_CLKS / duration_time)",
119749898fefSIan Rogers        "MetricGroup": "Mem;MemoryLat;SoC",
1198038d3b53SJin Yao        "MetricName": "MEM_Read_Latency"
1199fd550098SAndi Kleen    },
1200fd550098SAndi Kleen    {
1201fd550098SAndi Kleen        "BriefDescription": "Average number of parallel data read requests to external memory. Accounts for demand loads and L1/L2 prefetches",
1202038d3b53SJin Yao        "MetricExpr": "cha@event\\=0x36\\,umask\\=0x21\\,config\\=0x40433@ / cha@event\\=0x36\\,umask\\=0x21\\,config\\=0x40433\\,thresh\\=1@",
120349898fefSIan Rogers        "MetricGroup": "Mem;MemoryBW;SoC",
1204038d3b53SJin Yao        "MetricName": "MEM_Parallel_Reads"
1205fd550098SAndi Kleen    },
1206fd550098SAndi Kleen    {
1207fd550098SAndi Kleen        "BriefDescription": "Average latency of data read request to external 3D X-Point memory [in nanoseconds]. Accounts for demand loads and L1/L2 data-read prefetches",
120892aa1c2bSIan Rogers        "MetricExpr": "(1000000000 * (imc@event\\=0xe0\\,umask\\=0x1@ / imc@event\\=0xe3@) / imc_0@event\\=0x0@)",
1209*55b201a8SIan Rogers        "MetricGroup": "Mem;MemoryLat;Server;SoC",
1210fd550098SAndi Kleen        "MetricName": "MEM_PMM_Read_Latency"
1211fd550098SAndi Kleen    },
1212fd550098SAndi Kleen    {
121349898fefSIan Rogers        "BriefDescription": "Average latency of data read request to external DRAM memory [in nanoseconds]. Accounts for demand loads and L1/L2 data-read prefetches",
121449898fefSIan Rogers        "MetricExpr": "1000000000 * (UNC_M_RPQ_OCCUPANCY / UNC_M_RPQ_INSERTS) / imc_0@event\\=0x0@",
1215*55b201a8SIan Rogers        "MetricGroup": "Mem;MemoryLat;Server;SoC",
121649898fefSIan Rogers        "MetricName": "MEM_DRAM_Read_Latency"
121749898fefSIan Rogers    },
121849898fefSIan Rogers    {
1219fd550098SAndi Kleen        "BriefDescription": "Average 3DXP Memory Bandwidth Use for reads [GB / sec]",
122092aa1c2bSIan Rogers        "MetricExpr": "((64 * imc@event\\=0xe3@ / 1000000000) / duration_time)",
1221*55b201a8SIan Rogers        "MetricGroup": "Mem;MemoryBW;Server;SoC",
1222fd550098SAndi Kleen        "MetricName": "PMM_Read_BW"
1223fd550098SAndi Kleen    },
1224fd550098SAndi Kleen    {
1225fd550098SAndi Kleen        "BriefDescription": "Average 3DXP Memory Bandwidth Use for Writes [GB / sec]",
122692aa1c2bSIan Rogers        "MetricExpr": "((64 * imc@event\\=0xe7@ / 1000000000) / duration_time)",
1227*55b201a8SIan Rogers        "MetricGroup": "Mem;MemoryBW;Server;SoC",
1228fd550098SAndi Kleen        "MetricName": "PMM_Write_BW"
1229fd550098SAndi Kleen    },
1230fd550098SAndi Kleen    {
1231038d3b53SJin Yao        "BriefDescription": "Average IO (network or disk) Bandwidth Use for Writes [GB / sec]",
1232038d3b53SJin Yao        "MetricExpr": "(UNC_IIO_DATA_REQ_OF_CPU.MEM_READ.PART0 + UNC_IIO_DATA_REQ_OF_CPU.MEM_READ.PART1 + UNC_IIO_DATA_REQ_OF_CPU.MEM_READ.PART2 + UNC_IIO_DATA_REQ_OF_CPU.MEM_READ.PART3) * 4 / 1000000000 / duration_time",
1233*55b201a8SIan Rogers        "MetricGroup": "IoBW;Mem;Server;SoC",
1234038d3b53SJin Yao        "MetricName": "IO_Write_BW"
1235038d3b53SJin Yao    },
1236038d3b53SJin Yao    {
1237038d3b53SJin Yao        "BriefDescription": "Average IO (network or disk) Bandwidth Use for Reads [GB / sec]",
1238038d3b53SJin Yao        "MetricExpr": "(UNC_IIO_DATA_REQ_OF_CPU.MEM_WRITE.PART0 + UNC_IIO_DATA_REQ_OF_CPU.MEM_WRITE.PART1 + UNC_IIO_DATA_REQ_OF_CPU.MEM_WRITE.PART2 + UNC_IIO_DATA_REQ_OF_CPU.MEM_WRITE.PART3) * 4 / 1000000000 / duration_time",
1239*55b201a8SIan Rogers        "MetricGroup": "IoBW;Mem;Server;SoC",
1240038d3b53SJin Yao        "MetricName": "IO_Read_BW"
1241038d3b53SJin Yao    },
1242038d3b53SJin Yao    {
1243fd550098SAndi Kleen        "BriefDescription": "Socket actual clocks when any core is active on that socket",
124461ec07f5SHaiyan Song        "MetricExpr": "cha_0@event\\=0x0@",
1245038d3b53SJin Yao        "MetricGroup": "SoC",
1246fd550098SAndi Kleen        "MetricName": "Socket_CLKS"
1247fd550098SAndi Kleen    },
1248fd550098SAndi Kleen    {
1249038d3b53SJin Yao        "BriefDescription": "Instructions per Far Branch ( Far Branches apply upon transition from application to operating system, handling interrupts, exceptions) [lower number means higher occurrence rate]",
1250ed97cc6cSJin Yao        "MetricExpr": "INST_RETIRED.ANY / BR_INST_RETIRED.FAR_BRANCH:u",
1251038d3b53SJin Yao        "MetricGroup": "Branches;OS",
125261ec07f5SHaiyan Song        "MetricName": "IpFarBranch"
125361ec07f5SHaiyan Song    },
125461ec07f5SHaiyan Song    {
125561ec07f5SHaiyan Song        "BriefDescription": "C3 residency percent per core",
1256ecd94f1bSKan Liang        "MetricExpr": "(cstate_core@c3\\-residency@ / msr@tsc@) * 100",
1257ecd94f1bSKan Liang        "MetricGroup": "Power",
1258ecd94f1bSKan Liang        "MetricName": "C3_Core_Residency"
1259ecd94f1bSKan Liang    },
1260ecd94f1bSKan Liang    {
126161ec07f5SHaiyan Song        "BriefDescription": "C6 residency percent per core",
1262ecd94f1bSKan Liang        "MetricExpr": "(cstate_core@c6\\-residency@ / msr@tsc@) * 100",
1263ecd94f1bSKan Liang        "MetricGroup": "Power",
1264ecd94f1bSKan Liang        "MetricName": "C6_Core_Residency"
1265ecd94f1bSKan Liang    },
1266ecd94f1bSKan Liang    {
126761ec07f5SHaiyan Song        "BriefDescription": "C7 residency percent per core",
1268ecd94f1bSKan Liang        "MetricExpr": "(cstate_core@c7\\-residency@ / msr@tsc@) * 100",
1269ecd94f1bSKan Liang        "MetricGroup": "Power",
1270ecd94f1bSKan Liang        "MetricName": "C7_Core_Residency"
1271ecd94f1bSKan Liang    },
1272ecd94f1bSKan Liang    {
127361ec07f5SHaiyan Song        "BriefDescription": "C2 residency percent per package",
1274ecd94f1bSKan Liang        "MetricExpr": "(cstate_pkg@c2\\-residency@ / msr@tsc@) * 100",
1275ecd94f1bSKan Liang        "MetricGroup": "Power",
1276ecd94f1bSKan Liang        "MetricName": "C2_Pkg_Residency"
1277ecd94f1bSKan Liang    },
1278ecd94f1bSKan Liang    {
127961ec07f5SHaiyan Song        "BriefDescription": "C3 residency percent per package",
1280ecd94f1bSKan Liang        "MetricExpr": "(cstate_pkg@c3\\-residency@ / msr@tsc@) * 100",
1281ecd94f1bSKan Liang        "MetricGroup": "Power",
1282ecd94f1bSKan Liang        "MetricName": "C3_Pkg_Residency"
1283ecd94f1bSKan Liang    },
1284ecd94f1bSKan Liang    {
128561ec07f5SHaiyan Song        "BriefDescription": "C6 residency percent per package",
1286ecd94f1bSKan Liang        "MetricExpr": "(cstate_pkg@c6\\-residency@ / msr@tsc@) * 100",
1287ecd94f1bSKan Liang        "MetricGroup": "Power",
1288ecd94f1bSKan Liang        "MetricName": "C6_Pkg_Residency"
1289ecd94f1bSKan Liang    },
1290ecd94f1bSKan Liang    {
129161ec07f5SHaiyan Song        "BriefDescription": "C7 residency percent per package",
1292ecd94f1bSKan Liang        "MetricExpr": "(cstate_pkg@c7\\-residency@ / msr@tsc@) * 100",
1293ecd94f1bSKan Liang        "MetricGroup": "Power",
1294ecd94f1bSKan Liang        "MetricName": "C7_Pkg_Residency"
1295f9d45862SIan Rogers    },
1296f9d45862SIan Rogers    {
1297*55b201a8SIan Rogers        "BriefDescription": "Uncore frequency per die [GHZ]",
1298*55b201a8SIan Rogers        "MetricExpr": "Socket_CLKS / #num_dies / duration_time / 1000000000",
1299*55b201a8SIan Rogers        "MetricGroup": "SoC",
1300*55b201a8SIan Rogers        "MetricName": "UNCORE_FREQ"
1301f9d45862SIan Rogers    },
1302f9d45862SIan Rogers    {
1303f9d45862SIan Rogers        "BriefDescription": "CPU operating frequency (in GHz)",
1304*55b201a8SIan Rogers        "MetricExpr": "(( CPU_CLK_UNHALTED.THREAD / CPU_CLK_UNHALTED.REF_TSC * #SYSTEM_TSC_FREQ ) / 1000000000) / duration_time",
1305f9d45862SIan Rogers        "MetricGroup": "",
1306f9d45862SIan Rogers        "MetricName": "cpu_operating_frequency",
1307f9d45862SIan Rogers        "ScaleUnit": "1GHz"
1308f9d45862SIan Rogers    },
1309f9d45862SIan Rogers    {
1310f9d45862SIan Rogers        "BriefDescription": "The ratio of number of completed memory load instructions to the total number completed instructions",
1311f9d45862SIan Rogers        "MetricExpr": "MEM_INST_RETIRED.ALL_LOADS / INST_RETIRED.ANY",
1312f9d45862SIan Rogers        "MetricGroup": "",
1313f9d45862SIan Rogers        "MetricName": "loads_per_instr",
1314f9d45862SIan Rogers        "ScaleUnit": "1per_instr"
1315f9d45862SIan Rogers    },
1316f9d45862SIan Rogers    {
1317f9d45862SIan Rogers        "BriefDescription": "The ratio of number of completed memory store instructions to the total number completed instructions",
1318f9d45862SIan Rogers        "MetricExpr": "MEM_INST_RETIRED.ALL_STORES / INST_RETIRED.ANY",
1319f9d45862SIan Rogers        "MetricGroup": "",
1320f9d45862SIan Rogers        "MetricName": "stores_per_instr",
1321f9d45862SIan Rogers        "ScaleUnit": "1per_instr"
1322f9d45862SIan Rogers    },
1323f9d45862SIan Rogers    {
1324f9d45862SIan Rogers        "BriefDescription": "Ratio of number of requests missing L1 data cache (includes data+rfo w/ prefetches) to the total number of completed instructions",
1325f9d45862SIan Rogers        "MetricExpr": "L1D.REPLACEMENT / INST_RETIRED.ANY",
1326f9d45862SIan Rogers        "MetricGroup": "",
1327*55b201a8SIan Rogers        "MetricName": "l1d_mpi",
1328f9d45862SIan Rogers        "ScaleUnit": "1per_instr"
1329f9d45862SIan Rogers    },
1330f9d45862SIan Rogers    {
1331f9d45862SIan Rogers        "BriefDescription": "Ratio of number of demand load requests hitting in L1 data cache to the total number of completed instructions ",
1332f9d45862SIan Rogers        "MetricExpr": "MEM_LOAD_RETIRED.L1_HIT / INST_RETIRED.ANY",
1333f9d45862SIan Rogers        "MetricGroup": "",
1334f9d45862SIan Rogers        "MetricName": "l1d_demand_data_read_hits_per_instr",
1335f9d45862SIan Rogers        "ScaleUnit": "1per_instr"
1336f9d45862SIan Rogers    },
1337f9d45862SIan Rogers    {
1338f9d45862SIan Rogers        "BriefDescription": "Ratio of number of code read requests missing in L1 instruction cache (includes prefetches) to the total number of completed instructions",
1339f9d45862SIan Rogers        "MetricExpr": "L2_RQSTS.ALL_CODE_RD / INST_RETIRED.ANY",
1340f9d45862SIan Rogers        "MetricGroup": "",
1341f9d45862SIan Rogers        "MetricName": "l1_i_code_read_misses_with_prefetches_per_instr",
1342f9d45862SIan Rogers        "ScaleUnit": "1per_instr"
1343f9d45862SIan Rogers    },
1344f9d45862SIan Rogers    {
1345f9d45862SIan Rogers        "BriefDescription": "Ratio of number of completed demand load requests hitting in L2 cache to the total number of completed instructions ",
1346f9d45862SIan Rogers        "MetricExpr": "MEM_LOAD_RETIRED.L2_HIT / INST_RETIRED.ANY",
1347f9d45862SIan Rogers        "MetricGroup": "",
1348f9d45862SIan Rogers        "MetricName": "l2_demand_data_read_hits_per_instr",
1349f9d45862SIan Rogers        "ScaleUnit": "1per_instr"
1350f9d45862SIan Rogers    },
1351f9d45862SIan Rogers    {
1352f9d45862SIan Rogers        "BriefDescription": "Ratio of number of requests missing L2 cache (includes code+data+rfo w/ prefetches) to the total number of completed instructions",
1353f9d45862SIan Rogers        "MetricExpr": "L2_LINES_IN.ALL / INST_RETIRED.ANY",
1354f9d45862SIan Rogers        "MetricGroup": "",
1355*55b201a8SIan Rogers        "MetricName": "l2_mpi",
1356f9d45862SIan Rogers        "ScaleUnit": "1per_instr"
1357f9d45862SIan Rogers    },
1358f9d45862SIan Rogers    {
1359f9d45862SIan Rogers        "BriefDescription": "Ratio of number of completed data read request missing L2 cache to the total number of completed instructions",
1360f9d45862SIan Rogers        "MetricExpr": "MEM_LOAD_RETIRED.L2_MISS / INST_RETIRED.ANY",
1361f9d45862SIan Rogers        "MetricGroup": "",
1362f9d45862SIan Rogers        "MetricName": "l2_demand_data_read_mpi",
1363f9d45862SIan Rogers        "ScaleUnit": "1per_instr"
1364f9d45862SIan Rogers    },
1365f9d45862SIan Rogers    {
1366f9d45862SIan Rogers        "BriefDescription": "Ratio of number of code read request missing L2 cache to the total number of completed instructions",
1367f9d45862SIan Rogers        "MetricExpr": "L2_RQSTS.CODE_RD_MISS / INST_RETIRED.ANY",
1368f9d45862SIan Rogers        "MetricGroup": "",
1369f9d45862SIan Rogers        "MetricName": "l2_demand_code_mpi",
1370f9d45862SIan Rogers        "ScaleUnit": "1per_instr"
1371f9d45862SIan Rogers    },
1372f9d45862SIan Rogers    {
1373f9d45862SIan Rogers        "BriefDescription": "Ratio of number of data read requests missing last level core cache (includes demand w/ prefetches) to the total number of completed instructions",
1374f9d45862SIan Rogers        "MetricExpr": "cha@unc_cha_tor_inserts.ia_miss\\,config1\\=0x12D4043300000000@ / INST_RETIRED.ANY",
1375f9d45862SIan Rogers        "MetricGroup": "",
1376f9d45862SIan Rogers        "MetricName": "llc_data_read_mpi_demand_plus_prefetch",
1377f9d45862SIan Rogers        "ScaleUnit": "1per_instr"
1378f9d45862SIan Rogers    },
1379f9d45862SIan Rogers    {
1380f9d45862SIan Rogers        "BriefDescription": "Ratio of number of code read requests missing last level core cache (includes demand w/ prefetches) to the total number of completed instructions",
1381f9d45862SIan Rogers        "MetricExpr": "cha@unc_cha_tor_inserts.ia_miss\\,config1\\=0x12CC023300000000@ / INST_RETIRED.ANY",
1382f9d45862SIan Rogers        "MetricGroup": "",
1383f9d45862SIan Rogers        "MetricName": "llc_code_read_mpi_demand_plus_prefetch",
1384f9d45862SIan Rogers        "ScaleUnit": "1per_instr"
1385f9d45862SIan Rogers    },
1386f9d45862SIan Rogers    {
1387f9d45862SIan Rogers        "BriefDescription": "Average latency of a last level cache (LLC) demand and prefetch data read miss (read memory access) in nano seconds",
1388*55b201a8SIan Rogers        "MetricExpr": "( 1000000000 * ( cha@unc_cha_tor_occupancy.ia_miss\\,config1\\=0x4043300000000@ / cha@unc_cha_tor_inserts.ia_miss\\,config1\\=0x4043300000000@ ) / ( UNC_CHA_CLOCKTICKS / ( source_count(UNC_CHA_CLOCKTICKS) * #num_packages ) ) ) * duration_time",
1389f9d45862SIan Rogers        "MetricGroup": "",
1390f9d45862SIan Rogers        "MetricName": "llc_data_read_demand_plus_prefetch_miss_latency",
1391f9d45862SIan Rogers        "ScaleUnit": "1ns"
1392f9d45862SIan Rogers    },
1393f9d45862SIan Rogers    {
1394f9d45862SIan Rogers        "BriefDescription": "Average latency of a last level cache (LLC) demand and prefetch data read miss (read memory access) addressed to local memory in nano seconds",
1395*55b201a8SIan Rogers        "MetricExpr": "( 1000000000 * ( cha@unc_cha_tor_occupancy.ia_miss\\,config1\\=0x4043200000000@ / cha@unc_cha_tor_inserts.ia_miss\\,config1\\=0x4043200000000@ ) / ( UNC_CHA_CLOCKTICKS / ( source_count(UNC_CHA_CLOCKTICKS) * #num_packages ) ) ) * duration_time",
1396f9d45862SIan Rogers        "MetricGroup": "",
1397f9d45862SIan Rogers        "MetricName": "llc_data_read_demand_plus_prefetch_miss_latency_for_local_requests",
1398f9d45862SIan Rogers        "ScaleUnit": "1ns"
1399f9d45862SIan Rogers    },
1400f9d45862SIan Rogers    {
1401f9d45862SIan Rogers        "BriefDescription": "Average latency of a last level cache (LLC) demand and prefetch data read miss (read memory access) addressed to remote memory in nano seconds",
1402*55b201a8SIan Rogers        "MetricExpr": "( 1000000000 * ( cha@unc_cha_tor_occupancy.ia_miss\\,config1\\=0x4043100000000@ / cha@unc_cha_tor_inserts.ia_miss\\,config1\\=0x4043100000000@ ) / ( UNC_CHA_CLOCKTICKS / ( source_count(UNC_CHA_CLOCKTICKS) * #num_packages ) ) ) * duration_time",
1403f9d45862SIan Rogers        "MetricGroup": "",
1404f9d45862SIan Rogers        "MetricName": "llc_data_read_demand_plus_prefetch_miss_latency_for_remote_requests",
1405f9d45862SIan Rogers        "ScaleUnit": "1ns"
1406f9d45862SIan Rogers    },
1407f9d45862SIan Rogers    {
1408f9d45862SIan Rogers        "BriefDescription": "Ratio of number of completed page walks (for all page sizes) caused by a code fetch to the total number of completed instructions. This implies it missed in the ITLB (Instruction TLB) and further levels of TLB.",
1409f9d45862SIan Rogers        "MetricExpr": "ITLB_MISSES.WALK_COMPLETED / INST_RETIRED.ANY",
1410f9d45862SIan Rogers        "MetricGroup": "",
1411*55b201a8SIan Rogers        "MetricName": "itlb_mpi",
1412f9d45862SIan Rogers        "ScaleUnit": "1per_instr"
1413f9d45862SIan Rogers    },
1414f9d45862SIan Rogers    {
1415f9d45862SIan Rogers        "BriefDescription": "Ratio of number of completed page walks (for 2 megabyte and 4 megabyte page sizes) caused by a code fetch to the total number of completed instructions. This implies it missed in the Instruction Translation Lookaside Buffer (ITLB) and further levels of TLB.",
1416f9d45862SIan Rogers        "MetricExpr": "ITLB_MISSES.WALK_COMPLETED_2M_4M / INST_RETIRED.ANY",
1417f9d45862SIan Rogers        "MetricGroup": "",
1418*55b201a8SIan Rogers        "MetricName": "itlb_large_page_mpi",
1419f9d45862SIan Rogers        "ScaleUnit": "1per_instr"
1420f9d45862SIan Rogers    },
1421f9d45862SIan Rogers    {
1422f9d45862SIan Rogers        "BriefDescription": "Ratio of number of completed page walks (for all page sizes) caused by demand data loads to the total number of completed instructions. This implies it missed in the DTLB and further levels of TLB.",
1423f9d45862SIan Rogers        "MetricExpr": "DTLB_LOAD_MISSES.WALK_COMPLETED / INST_RETIRED.ANY",
1424f9d45862SIan Rogers        "MetricGroup": "",
1425*55b201a8SIan Rogers        "MetricName": "dtlb_load_mpi",
1426f9d45862SIan Rogers        "ScaleUnit": "1per_instr"
1427f9d45862SIan Rogers    },
1428f9d45862SIan Rogers    {
1429f9d45862SIan Rogers        "BriefDescription": "Ratio of number of completed page walks (for 2 megabyte page sizes) caused by demand data loads to the total number of completed instructions. This implies it missed in the Data Translation Lookaside Buffer (DTLB) and further levels of TLB.",
1430f9d45862SIan Rogers        "MetricExpr": "DTLB_LOAD_MISSES.WALK_COMPLETED_2M_4M / INST_RETIRED.ANY",
1431f9d45862SIan Rogers        "MetricGroup": "",
1432*55b201a8SIan Rogers        "MetricName": "dtlb_2mb_large_page_load_mpi",
1433f9d45862SIan Rogers        "ScaleUnit": "1per_instr"
1434f9d45862SIan Rogers    },
1435f9d45862SIan Rogers    {
1436f9d45862SIan Rogers        "BriefDescription": "Ratio of number of completed page walks (for all page sizes) caused by demand data stores to the total number of completed instructions. This implies it missed in the DTLB and further levels of TLB.",
1437f9d45862SIan Rogers        "MetricExpr": "DTLB_STORE_MISSES.WALK_COMPLETED / INST_RETIRED.ANY",
1438f9d45862SIan Rogers        "MetricGroup": "",
1439*55b201a8SIan Rogers        "MetricName": "dtlb_store_mpi",
1440f9d45862SIan Rogers        "ScaleUnit": "1per_instr"
1441f9d45862SIan Rogers    },
1442f9d45862SIan Rogers    {
1443f9d45862SIan Rogers        "BriefDescription": "Memory read that miss the last level cache (LLC) addressed to local DRAM as a percentage of total memory read accesses, does not include LLC prefetches.",
1444f9d45862SIan Rogers        "MetricExpr": "100 * cha@unc_cha_tor_inserts.ia_miss\\,config1\\=0x4043200000000@ / ( cha@unc_cha_tor_inserts.ia_miss\\,config1\\=0x4043200000000@ + cha@unc_cha_tor_inserts.ia_miss\\,config1\\=0x4043100000000@ )",
1445f9d45862SIan Rogers        "MetricGroup": "",
1446*55b201a8SIan Rogers        "MetricName": "numa_reads_addressed_to_local_dram",
1447f9d45862SIan Rogers        "ScaleUnit": "1%"
1448f9d45862SIan Rogers    },
1449f9d45862SIan Rogers    {
1450f9d45862SIan Rogers        "BriefDescription": "Memory reads that miss the last level cache (LLC) addressed to remote DRAM as a percentage of total memory read accesses, does not include LLC prefetches.",
1451f9d45862SIan Rogers        "MetricExpr": "100 * cha@unc_cha_tor_inserts.ia_miss\\,config1\\=0x4043100000000@ / ( cha@unc_cha_tor_inserts.ia_miss\\,config1\\=0x4043200000000@ + cha@unc_cha_tor_inserts.ia_miss\\,config1\\=0x4043100000000@ )",
1452f9d45862SIan Rogers        "MetricGroup": "",
1453*55b201a8SIan Rogers        "MetricName": "numa_reads_addressed_to_remote_dram",
1454f9d45862SIan Rogers        "ScaleUnit": "1%"
1455f9d45862SIan Rogers    },
1456f9d45862SIan Rogers    {
1457f9d45862SIan Rogers        "BriefDescription": "Uncore operating frequency in GHz",
1458*55b201a8SIan Rogers        "MetricExpr": "( UNC_CHA_CLOCKTICKS / ( source_count(UNC_CHA_CLOCKTICKS) * #num_packages ) / 1000000000) / duration_time",
1459f9d45862SIan Rogers        "MetricGroup": "",
1460f9d45862SIan Rogers        "MetricName": "uncore_frequency",
1461f9d45862SIan Rogers        "ScaleUnit": "1GHz"
1462f9d45862SIan Rogers    },
1463f9d45862SIan Rogers    {
1464f9d45862SIan Rogers        "BriefDescription": "Intel(R) Ultra Path Interconnect (UPI) data transmit bandwidth (MB/sec)",
1465f9d45862SIan Rogers        "MetricExpr": "( UNC_UPI_TxL_FLITS.ALL_DATA * (64 / 9.0) / 1000000) / duration_time",
1466f9d45862SIan Rogers        "MetricGroup": "",
1467*55b201a8SIan Rogers        "MetricName": "upi_data_transmit_bw",
1468f9d45862SIan Rogers        "ScaleUnit": "1MB/s"
1469f9d45862SIan Rogers    },
1470f9d45862SIan Rogers    {
1471f9d45862SIan Rogers        "BriefDescription": "DDR memory read bandwidth (MB/sec)",
1472f9d45862SIan Rogers        "MetricExpr": "( UNC_M_CAS_COUNT.RD * 64 / 1000000) / duration_time",
1473f9d45862SIan Rogers        "MetricGroup": "",
1474f9d45862SIan Rogers        "MetricName": "memory_bandwidth_read",
1475f9d45862SIan Rogers        "ScaleUnit": "1MB/s"
1476f9d45862SIan Rogers    },
1477f9d45862SIan Rogers    {
1478f9d45862SIan Rogers        "BriefDescription": "DDR memory write bandwidth (MB/sec)",
1479f9d45862SIan Rogers        "MetricExpr": "( UNC_M_CAS_COUNT.WR * 64 / 1000000) / duration_time",
1480f9d45862SIan Rogers        "MetricGroup": "",
1481f9d45862SIan Rogers        "MetricName": "memory_bandwidth_write",
1482f9d45862SIan Rogers        "ScaleUnit": "1MB/s"
1483f9d45862SIan Rogers    },
1484f9d45862SIan Rogers    {
1485f9d45862SIan Rogers        "BriefDescription": "DDR memory bandwidth (MB/sec)",
1486f9d45862SIan Rogers        "MetricExpr": "(( UNC_M_CAS_COUNT.RD + UNC_M_CAS_COUNT.WR ) * 64 / 1000000) / duration_time",
1487f9d45862SIan Rogers        "MetricGroup": "",
1488f9d45862SIan Rogers        "MetricName": "memory_bandwidth_total",
1489f9d45862SIan Rogers        "ScaleUnit": "1MB/s"
1490f9d45862SIan Rogers    },
1491f9d45862SIan Rogers    {
1492f9d45862SIan Rogers        "BriefDescription": "Intel(R) Optane(TM) Persistent Memory(PMEM) memory read bandwidth (MB/sec)",
1493f9d45862SIan Rogers        "MetricExpr": "( UNC_M_PMM_RPQ_INSERTS * 64 / 1000000) / duration_time",
1494f9d45862SIan Rogers        "MetricGroup": "",
1495f9d45862SIan Rogers        "MetricName": "pmem_memory_bandwidth_read",
1496f9d45862SIan Rogers        "ScaleUnit": "1MB/s"
1497f9d45862SIan Rogers    },
1498f9d45862SIan Rogers    {
1499f9d45862SIan Rogers        "BriefDescription": "Intel(R) Optane(TM) Persistent Memory(PMEM) memory write bandwidth (MB/sec)",
1500f9d45862SIan Rogers        "MetricExpr": "( UNC_M_PMM_WPQ_INSERTS * 64 / 1000000) / duration_time",
1501f9d45862SIan Rogers        "MetricGroup": "",
1502f9d45862SIan Rogers        "MetricName": "pmem_memory_bandwidth_write",
1503f9d45862SIan Rogers        "ScaleUnit": "1MB/s"
1504f9d45862SIan Rogers    },
1505f9d45862SIan Rogers    {
1506f9d45862SIan Rogers        "BriefDescription": "Intel(R) Optane(TM) Persistent Memory(PMEM) memory bandwidth (MB/sec)",
1507f9d45862SIan Rogers        "MetricExpr": "(( UNC_M_PMM_RPQ_INSERTS + UNC_M_PMM_WPQ_INSERTS ) * 64 / 1000000) / duration_time",
1508f9d45862SIan Rogers        "MetricGroup": "",
1509f9d45862SIan Rogers        "MetricName": "pmem_memory_bandwidth_total",
1510f9d45862SIan Rogers        "ScaleUnit": "1MB/s"
1511f9d45862SIan Rogers    },
1512f9d45862SIan Rogers    {
1513f9d45862SIan Rogers        "BriefDescription": "Bandwidth of IO reads that are initiated by end device controllers that are requesting memory from the CPU.",
1514f9d45862SIan Rogers        "MetricExpr": "(( UNC_IIO_DATA_REQ_OF_CPU.MEM_READ.PART0 + UNC_IIO_DATA_REQ_OF_CPU.MEM_READ.PART1 + UNC_IIO_DATA_REQ_OF_CPU.MEM_READ.PART2 + UNC_IIO_DATA_REQ_OF_CPU.MEM_READ.PART3 ) * 4 / 1000000) / duration_time",
1515f9d45862SIan Rogers        "MetricGroup": "",
1516*55b201a8SIan Rogers        "MetricName": "io_bandwidth_disk_or_network_writes",
1517f9d45862SIan Rogers        "ScaleUnit": "1MB/s"
1518f9d45862SIan Rogers    },
1519f9d45862SIan Rogers    {
1520f9d45862SIan Rogers        "BriefDescription": "Bandwidth of IO writes that are initiated by end device controllers that are writing memory to the CPU.",
1521f9d45862SIan Rogers        "MetricExpr": "(( UNC_IIO_PAYLOAD_BYTES_IN.MEM_WRITE.PART0 + UNC_IIO_PAYLOAD_BYTES_IN.MEM_WRITE.PART1 + UNC_IIO_PAYLOAD_BYTES_IN.MEM_WRITE.PART2 + UNC_IIO_PAYLOAD_BYTES_IN.MEM_WRITE.PART3 ) * 4 / 1000000) / duration_time",
1522f9d45862SIan Rogers        "MetricGroup": "",
1523*55b201a8SIan Rogers        "MetricName": "io_bandwidth_disk_or_network_reads",
1524f9d45862SIan Rogers        "ScaleUnit": "1MB/s"
1525f9d45862SIan Rogers    },
1526f9d45862SIan Rogers    {
1527f9d45862SIan Rogers        "BriefDescription": "Uops delivered from decoded instruction cache (decoded stream buffer or DSB) as a percent of total uops delivered to Instruction Decode Queue",
1528f9d45862SIan Rogers        "MetricExpr": "100 * ( IDQ.DSB_UOPS / ( IDQ.DSB_UOPS + IDQ.MITE_UOPS + IDQ.MS_UOPS + LSD.UOPS ) )",
1529f9d45862SIan Rogers        "MetricGroup": "",
1530*55b201a8SIan Rogers        "MetricName": "percent_uops_delivered_from_decoded_icache",
1531f9d45862SIan Rogers        "ScaleUnit": "1%"
1532f9d45862SIan Rogers    },
1533f9d45862SIan Rogers    {
1534f9d45862SIan Rogers        "BriefDescription": "Uops delivered from legacy decode pipeline (Micro-instruction Translation Engine or MITE) as a percent of total uops delivered to Instruction Decode Queue",
1535f9d45862SIan Rogers        "MetricExpr": "100 * ( IDQ.MITE_UOPS / ( IDQ.DSB_UOPS + IDQ.MITE_UOPS + IDQ.MS_UOPS + LSD.UOPS ) )",
1536f9d45862SIan Rogers        "MetricGroup": "",
1537*55b201a8SIan Rogers        "MetricName": "percent_uops_delivered_from_legacy_decode_pipeline",
1538f9d45862SIan Rogers        "ScaleUnit": "1%"
1539f9d45862SIan Rogers    },
1540f9d45862SIan Rogers    {
1541f9d45862SIan Rogers        "BriefDescription": "Uops delivered from microcode sequencer (MS) as a percent of total uops delivered to Instruction Decode Queue",
1542f9d45862SIan Rogers        "MetricExpr": "100 * ( IDQ.MS_UOPS / ( IDQ.DSB_UOPS + IDQ.MITE_UOPS + IDQ.MS_UOPS + LSD.UOPS ) )",
1543f9d45862SIan Rogers        "MetricGroup": "",
1544*55b201a8SIan Rogers        "MetricName": "percent_uops_delivered_from_microcode_sequencer",
1545f9d45862SIan Rogers        "ScaleUnit": "1%"
1546f9d45862SIan Rogers    },
1547f9d45862SIan Rogers    {
1548f9d45862SIan Rogers        "BriefDescription": "Bandwidth (MB/sec) of read requests that miss the last level cache (LLC) and go to local memory.",
1549f9d45862SIan Rogers        "MetricExpr": "( UNC_CHA_REQUESTS.READS_LOCAL * 64 / 1000000) / duration_time",
1550f9d45862SIan Rogers        "MetricGroup": "",
1551f9d45862SIan Rogers        "MetricName": "llc_miss_local_memory_bandwidth_read",
1552f9d45862SIan Rogers        "ScaleUnit": "1MB/s"
1553f9d45862SIan Rogers    },
1554f9d45862SIan Rogers    {
1555f9d45862SIan Rogers        "BriefDescription": "Bandwidth (MB/sec) of write requests that miss the last level cache (LLC) and go to local memory.",
1556f9d45862SIan Rogers        "MetricExpr": "( UNC_CHA_REQUESTS.WRITES_LOCAL * 64 / 1000000) / duration_time",
1557f9d45862SIan Rogers        "MetricGroup": "",
1558f9d45862SIan Rogers        "MetricName": "llc_miss_local_memory_bandwidth_write",
1559f9d45862SIan Rogers        "ScaleUnit": "1MB/s"
1560f9d45862SIan Rogers    },
1561f9d45862SIan Rogers    {
1562f9d45862SIan Rogers        "BriefDescription": "Bandwidth (MB/sec) of read requests that miss the last level cache (LLC) and go to remote memory.",
1563f9d45862SIan Rogers        "MetricExpr": "( UNC_CHA_REQUESTS.READS_REMOTE * 64 / 1000000) / duration_time",
1564f9d45862SIan Rogers        "MetricGroup": "",
1565f9d45862SIan Rogers        "MetricName": "llc_miss_remote_memory_bandwidth_read",
1566f9d45862SIan Rogers        "ScaleUnit": "1MB/s"
1567f9d45862SIan Rogers    },
1568f9d45862SIan Rogers    {
1569*55b201a8SIan Rogers        "BriefDescription": "This metric represents Core fraction of cycles in which CPU was likely limited due to LSD (Loop Stream Detector) unit.  LSD typically does well sustaining Uop supply. However; in some rare cases; optimal uop-delivery could not be reached for small loops whose size (in terms of number of uops) does not suit well the LSD structure.",
1570*55b201a8SIan Rogers        "MetricExpr": "100 * ( ( LSD.CYCLES_ACTIVE - LSD.CYCLES_4_UOPS ) / ( ( CPU_CLK_UNHALTED.THREAD_ANY / 2 ) if #SMT_on else ( CPU_CLK_UNHALTED.THREAD ) ) / 2 )",
1571*55b201a8SIan Rogers        "MetricGroup": "FetchBW;LSD;TopdownL3;tma_L3_group;tma_fetch_bandwidth_group",
1572*55b201a8SIan Rogers        "MetricName": "tma_lsd",
1573f9d45862SIan Rogers        "ScaleUnit": "1%"
1574ecd94f1bSKan Liang    }
1575ecd94f1bSKan Liang]
1576