1ecd94f1bSKan Liang[
2ecd94f1bSKan Liang    {
349898fefSIan Rogers        "BriefDescription": "Total pipeline cost of Branch Misprediction related bottlenecks",
455b201a8SIan 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))",
549898fefSIan Rogers        "MetricGroup": "Bad;BadSpec;BrMispredicts",
649898fefSIan Rogers        "MetricName": "Mispredictions"
749898fefSIan Rogers    },
849898fefSIan Rogers    {
949898fefSIan Rogers        "BriefDescription": "Total pipeline cost of (external) Memory Bandwidth related bottlenecks",
10*8358b122SIan 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))",
1149898fefSIan Rogers        "MetricGroup": "Mem;MemoryBW;Offcore",
1249898fefSIan Rogers        "MetricName": "Memory_Bandwidth"
1349898fefSIan Rogers    },
1449898fefSIan Rogers    {
1549898fefSIan Rogers        "BriefDescription": "Total pipeline cost of Memory Latency related bottlenecks (external memory and off-core caches)",
16*8358b122SIan 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))",
1749898fefSIan Rogers        "MetricGroup": "Mem;MemoryLat;Offcore",
1849898fefSIan Rogers        "MetricName": "Memory_Latency"
1949898fefSIan Rogers    },
2049898fefSIan Rogers    {
2149898fefSIan Rogers        "BriefDescription": "Total pipeline cost of Memory Address Translation related bottlenecks (data-side TLBs)",
22*8358b122SIan 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)))",
23f9d45862SIan Rogers        "MetricGroup": "Mem;MemoryTLB;Offcore",
2449898fefSIan Rogers        "MetricName": "Memory_Data_TLBs"
2549898fefSIan Rogers    },
2649898fefSIan Rogers    {
2749898fefSIan Rogers        "BriefDescription": "Total pipeline cost of branch related instructions (used for program control-flow including function calls)",
2855b201a8SIan 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)",
2949898fefSIan Rogers        "MetricGroup": "Ret",
3049898fefSIan Rogers        "MetricName": "Branching_Overhead"
3149898fefSIan Rogers    },
3249898fefSIan Rogers    {
3349898fefSIan Rogers        "BriefDescription": "Total pipeline cost of instruction fetch related bottlenecks by large code footprint programs (i-side cache; TLB and BTB misses)",
3455b201a8SIan 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)",
3549898fefSIan Rogers        "MetricGroup": "BigFoot;Fed;Frontend;IcMiss;MemoryTLB",
3649898fefSIan Rogers        "MetricName": "Big_Code"
3749898fefSIan Rogers    },
3849898fefSIan Rogers    {
3949898fefSIan Rogers        "BriefDescription": "Total pipeline cost of instruction fetch bandwidth related bottlenecks",
4055b201a8SIan 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",
4149898fefSIan Rogers        "MetricGroup": "Fed;FetchBW;Frontend",
4249898fefSIan Rogers        "MetricName": "Instruction_Fetch_BW"
4349898fefSIan Rogers    },
4449898fefSIan Rogers    {
4561ec07f5SHaiyan Song        "BriefDescription": "Instructions Per Cycle (per Logical Processor)",
4655b201a8SIan Rogers        "MetricExpr": "INST_RETIRED.ANY / CLKS",
4749898fefSIan Rogers        "MetricGroup": "Ret;Summary",
48ecd94f1bSKan Liang        "MetricName": "IPC"
49ecd94f1bSKan Liang    },
50ecd94f1bSKan Liang    {
51fd550098SAndi Kleen        "BriefDescription": "Uops Per Instruction",
5261ec07f5SHaiyan Song        "MetricExpr": "UOPS_RETIRED.RETIRE_SLOTS / INST_RETIRED.ANY",
5349898fefSIan Rogers        "MetricGroup": "Pipeline;Ret;Retire",
54ecd94f1bSKan Liang        "MetricName": "UPI"
55ecd94f1bSKan Liang    },
56ecd94f1bSKan Liang    {
57fd550098SAndi Kleen        "BriefDescription": "Instruction per taken branch",
5849898fefSIan Rogers        "MetricExpr": "UOPS_RETIRED.RETIRE_SLOTS / BR_INST_RETIRED.NEAR_TAKEN",
5949898fefSIan Rogers        "MetricGroup": "Branches;Fed;FetchBW",
6049898fefSIan Rogers        "MetricName": "UpTB"
61fd550098SAndi Kleen    },
62fd550098SAndi Kleen    {
6355b201a8SIan Rogers        "BriefDescription": "Cycles Per Instruction (per Logical Processor)",
6455b201a8SIan Rogers        "MetricExpr": "1 / IPC",
6555b201a8SIan Rogers        "MetricGroup": "Mem;Pipeline",
6655b201a8SIan Rogers        "MetricName": "CPI"
6755b201a8SIan Rogers    },
6855b201a8SIan Rogers    {
6961ec07f5SHaiyan Song        "BriefDescription": "Per-Logical Processor actual clocks when the Logical Processor is active.",
70ecd94f1bSKan Liang        "MetricExpr": "CPU_CLK_UNHALTED.THREAD",
71ed97cc6cSJin Yao        "MetricGroup": "Pipeline",
72ecd94f1bSKan Liang        "MetricName": "CLKS"
73ecd94f1bSKan Liang    },
74ecd94f1bSKan Liang    {
7549898fefSIan Rogers        "BriefDescription": "Total issue-pipeline slots (per-Physical Core till ICL; per-Logical Processor ICL onward)",
7655b201a8SIan Rogers        "MetricExpr": "4 * CORE_CLKS",
7755b201a8SIan Rogers        "MetricGroup": "tma_L1_group",
7849898fefSIan Rogers        "MetricName": "SLOTS"
7949898fefSIan Rogers    },
8049898fefSIan Rogers    {
8149898fefSIan Rogers        "BriefDescription": "The ratio of Executed- by Issued-Uops",
8249898fefSIan Rogers        "MetricExpr": "UOPS_EXECUTED.THREAD / UOPS_ISSUED.ANY",
8349898fefSIan Rogers        "MetricGroup": "Cor;Pipeline",
8449898fefSIan Rogers        "MetricName": "Execute_per_Issue",
8549898fefSIan 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."
8649898fefSIan Rogers    },
8749898fefSIan Rogers    {
8849898fefSIan Rogers        "BriefDescription": "Instructions Per Cycle across hyper-threads (per physical core)",
8955b201a8SIan Rogers        "MetricExpr": "INST_RETIRED.ANY / CORE_CLKS",
9055b201a8SIan Rogers        "MetricGroup": "Ret;SMT;tma_L1_group",
91ed97cc6cSJin Yao        "MetricName": "CoreIPC"
92ecd94f1bSKan Liang    },
93ecd94f1bSKan Liang    {
94ed97cc6cSJin Yao        "BriefDescription": "Floating Point Operations Per Cycle",
95*8358b122SIan Rogers        "MetricExpr": "(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",
9655b201a8SIan Rogers        "MetricGroup": "Flops;Ret",
97ed97cc6cSJin Yao        "MetricName": "FLOPc"
98ed97cc6cSJin Yao    },
99ed97cc6cSJin Yao    {
100f9d45862SIan Rogers        "BriefDescription": "Actual per-core usage of the Floating Point non-X87 execution units (regardless of precision or vector-width)",
101*8358b122SIan 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)",
10249898fefSIan Rogers        "MetricGroup": "Cor;Flops;HPC",
10349898fefSIan Rogers        "MetricName": "FP_Arith_Utilization",
104f9d45862SIan 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)."
10549898fefSIan Rogers    },
10649898fefSIan Rogers    {
107f9d45862SIan Rogers        "BriefDescription": "Instruction-Level-Parallelism (average number of uops executed when there is execution) per-core",
108*8358b122SIan Rogers        "MetricExpr": "UOPS_EXECUTED.THREAD / (UOPS_EXECUTED.CORE_CYCLES_GE_1 / 2 if #SMT_on else UOPS_EXECUTED.CORE_CYCLES_GE_1)",
10949898fefSIan Rogers        "MetricGroup": "Backend;Cor;Pipeline;PortsUtil",
110ed97cc6cSJin Yao        "MetricName": "ILP"
111ed97cc6cSJin Yao    },
112ed97cc6cSJin Yao    {
113f9d45862SIan Rogers        "BriefDescription": "Probability of Core Bound bottleneck hidden by SMT-profiling artifacts",
114*8358b122SIan 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)",
115f9d45862SIan Rogers        "MetricGroup": "Cor;SMT",
116f9d45862SIan Rogers        "MetricName": "Core_Bound_Likely"
11749898fefSIan Rogers    },
11849898fefSIan Rogers    {
119ed97cc6cSJin Yao        "BriefDescription": "Core actual clocks when any Logical Processor is active on the Physical Core",
120*8358b122SIan 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))",
121ed97cc6cSJin Yao        "MetricGroup": "SMT",
122ed97cc6cSJin Yao        "MetricName": "CORE_CLKS"
123fd550098SAndi Kleen    },
124fd550098SAndi Kleen    {
125038d3b53SJin Yao        "BriefDescription": "Instructions per Load (lower number means higher occurrence rate)",
126fd550098SAndi Kleen        "MetricExpr": "INST_RETIRED.ANY / MEM_INST_RETIRED.ALL_LOADS",
127ed97cc6cSJin Yao        "MetricGroup": "InsType",
128038d3b53SJin Yao        "MetricName": "IpLoad"
129fd550098SAndi Kleen    },
130fd550098SAndi Kleen    {
131038d3b53SJin Yao        "BriefDescription": "Instructions per Store (lower number means higher occurrence rate)",
132fd550098SAndi Kleen        "MetricExpr": "INST_RETIRED.ANY / MEM_INST_RETIRED.ALL_STORES",
133ed97cc6cSJin Yao        "MetricGroup": "InsType",
134038d3b53SJin Yao        "MetricName": "IpStore"
135fd550098SAndi Kleen    },
136fd550098SAndi Kleen    {
137038d3b53SJin Yao        "BriefDescription": "Instructions per Branch (lower number means higher occurrence rate)",
138fd550098SAndi Kleen        "MetricExpr": "INST_RETIRED.ANY / BR_INST_RETIRED.ALL_BRANCHES",
13949898fefSIan Rogers        "MetricGroup": "Branches;Fed;InsType",
140038d3b53SJin Yao        "MetricName": "IpBranch"
141fd550098SAndi Kleen    },
142fd550098SAndi Kleen    {
143038d3b53SJin Yao        "BriefDescription": "Instructions per (near) call (lower number means higher occurrence rate)",
144fd550098SAndi Kleen        "MetricExpr": "INST_RETIRED.ANY / BR_INST_RETIRED.NEAR_CALL",
14549898fefSIan Rogers        "MetricGroup": "Branches;Fed;PGO",
146fd550098SAndi Kleen        "MetricName": "IpCall"
147fd550098SAndi Kleen    },
148fd550098SAndi Kleen    {
14949898fefSIan Rogers        "BriefDescription": "Instruction per taken branch",
15049898fefSIan Rogers        "MetricExpr": "INST_RETIRED.ANY / BR_INST_RETIRED.NEAR_TAKEN",
15149898fefSIan Rogers        "MetricGroup": "Branches;Fed;FetchBW;Frontend;PGO",
15249898fefSIan Rogers        "MetricName": "IpTB"
15349898fefSIan Rogers    },
15449898fefSIan Rogers    {
155038d3b53SJin Yao        "BriefDescription": "Branch instructions per taken branch. ",
156038d3b53SJin Yao        "MetricExpr": "BR_INST_RETIRED.ALL_BRANCHES / BR_INST_RETIRED.NEAR_TAKEN",
15749898fefSIan Rogers        "MetricGroup": "Branches;Fed;PGO",
158038d3b53SJin Yao        "MetricName": "BpTkBranch"
159038d3b53SJin Yao    },
160038d3b53SJin Yao    {
161038d3b53SJin Yao        "BriefDescription": "Instructions per Floating Point (FP) Operation (lower number means higher occurrence rate)",
162*8358b122SIan Rogers        "MetricExpr": "INST_RETIRED.ANY / (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)",
16349898fefSIan Rogers        "MetricGroup": "Flops;InsType",
164038d3b53SJin Yao        "MetricName": "IpFLOP"
165038d3b53SJin Yao    },
166038d3b53SJin Yao    {
16749898fefSIan Rogers        "BriefDescription": "Instructions per FP Arithmetic instruction (lower number means higher occurrence rate)",
168*8358b122SIan 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))",
16949898fefSIan Rogers        "MetricGroup": "Flops;InsType",
17049898fefSIan Rogers        "MetricName": "IpArith",
17149898fefSIan Rogers        "PublicDescription": "Instructions per FP Arithmetic instruction (lower number means higher occurrence rate). May undercount due to FMA double counting. Approximated prior to BDW."
17249898fefSIan Rogers    },
17349898fefSIan Rogers    {
17449898fefSIan Rogers        "BriefDescription": "Instructions per FP Arithmetic Scalar Single-Precision instruction (lower number means higher occurrence rate)",
17549898fefSIan Rogers        "MetricExpr": "INST_RETIRED.ANY / FP_ARITH_INST_RETIRED.SCALAR_SINGLE",
17649898fefSIan Rogers        "MetricGroup": "Flops;FpScalar;InsType",
17749898fefSIan Rogers        "MetricName": "IpArith_Scalar_SP",
17849898fefSIan Rogers        "PublicDescription": "Instructions per FP Arithmetic Scalar Single-Precision instruction (lower number means higher occurrence rate). May undercount due to FMA double counting."
17949898fefSIan Rogers    },
18049898fefSIan Rogers    {
18149898fefSIan Rogers        "BriefDescription": "Instructions per FP Arithmetic Scalar Double-Precision instruction (lower number means higher occurrence rate)",
18249898fefSIan Rogers        "MetricExpr": "INST_RETIRED.ANY / FP_ARITH_INST_RETIRED.SCALAR_DOUBLE",
18349898fefSIan Rogers        "MetricGroup": "Flops;FpScalar;InsType",
18449898fefSIan Rogers        "MetricName": "IpArith_Scalar_DP",
18549898fefSIan Rogers        "PublicDescription": "Instructions per FP Arithmetic Scalar Double-Precision instruction (lower number means higher occurrence rate). May undercount due to FMA double counting."
18649898fefSIan Rogers    },
18749898fefSIan Rogers    {
18849898fefSIan Rogers        "BriefDescription": "Instructions per FP Arithmetic AVX/SSE 128-bit instruction (lower number means higher occurrence rate)",
18949898fefSIan Rogers        "MetricExpr": "INST_RETIRED.ANY / (FP_ARITH_INST_RETIRED.128B_PACKED_DOUBLE + FP_ARITH_INST_RETIRED.128B_PACKED_SINGLE)",
19049898fefSIan Rogers        "MetricGroup": "Flops;FpVector;InsType",
19149898fefSIan Rogers        "MetricName": "IpArith_AVX128",
19249898fefSIan Rogers        "PublicDescription": "Instructions per FP Arithmetic AVX/SSE 128-bit instruction (lower number means higher occurrence rate). May undercount due to FMA double counting."
19349898fefSIan Rogers    },
19449898fefSIan Rogers    {
19549898fefSIan Rogers        "BriefDescription": "Instructions per FP Arithmetic AVX* 256-bit instruction (lower number means higher occurrence rate)",
19649898fefSIan Rogers        "MetricExpr": "INST_RETIRED.ANY / (FP_ARITH_INST_RETIRED.256B_PACKED_DOUBLE + FP_ARITH_INST_RETIRED.256B_PACKED_SINGLE)",
19749898fefSIan Rogers        "MetricGroup": "Flops;FpVector;InsType",
19849898fefSIan Rogers        "MetricName": "IpArith_AVX256",
19949898fefSIan Rogers        "PublicDescription": "Instructions per FP Arithmetic AVX* 256-bit instruction (lower number means higher occurrence rate). May undercount due to FMA double counting."
20049898fefSIan Rogers    },
20149898fefSIan Rogers    {
20249898fefSIan Rogers        "BriefDescription": "Instructions per FP Arithmetic AVX 512-bit instruction (lower number means higher occurrence rate)",
20349898fefSIan Rogers        "MetricExpr": "INST_RETIRED.ANY / (FP_ARITH_INST_RETIRED.512B_PACKED_DOUBLE + FP_ARITH_INST_RETIRED.512B_PACKED_SINGLE)",
20449898fefSIan Rogers        "MetricGroup": "Flops;FpVector;InsType",
20549898fefSIan Rogers        "MetricName": "IpArith_AVX512",
20649898fefSIan Rogers        "PublicDescription": "Instructions per FP Arithmetic AVX 512-bit instruction (lower number means higher occurrence rate). May undercount due to FMA double counting."
20749898fefSIan Rogers    },
20849898fefSIan Rogers    {
209f9d45862SIan Rogers        "BriefDescription": "Instructions per Software prefetch instruction (of any type: NTA/T0/T1/T2/Prefetch) (lower number means higher occurrence rate)",
210f9d45862SIan Rogers        "MetricExpr": "INST_RETIRED.ANY / cpu@SW_PREFETCH_ACCESS.T0\\,umask\\=0xF@",
211f9d45862SIan Rogers        "MetricGroup": "Prefetches",
212f9d45862SIan Rogers        "MetricName": "IpSWPF"
213f9d45862SIan Rogers    },
214f9d45862SIan Rogers    {
21555b201a8SIan Rogers        "BriefDescription": "Total number of retired Instructions Sample with: INST_RETIRED.PREC_DIST",
21661ec07f5SHaiyan Song        "MetricExpr": "INST_RETIRED.ANY",
21755b201a8SIan Rogers        "MetricGroup": "Summary;tma_L1_group",
218ecd94f1bSKan Liang        "MetricName": "Instructions"
219ecd94f1bSKan Liang    },
220ecd94f1bSKan Liang    {
221f9d45862SIan Rogers        "BriefDescription": "Average number of Uops retired in cycles where at least one uop has retired.",
222f9d45862SIan Rogers        "MetricExpr": "UOPS_RETIRED.RETIRE_SLOTS / cpu@UOPS_RETIRED.RETIRE_SLOTS\\,cmask\\=1@",
223f9d45862SIan Rogers        "MetricGroup": "Pipeline;Ret",
224f9d45862SIan Rogers        "MetricName": "Retire"
225f9d45862SIan Rogers    },
226f9d45862SIan Rogers    {
227f9d45862SIan Rogers        "BriefDescription": "",
228f9d45862SIan Rogers        "MetricExpr": "UOPS_EXECUTED.THREAD / cpu@UOPS_EXECUTED.THREAD\\,cmask\\=1@",
229f9d45862SIan Rogers        "MetricGroup": "Cor;Pipeline;PortsUtil;SMT",
230f9d45862SIan Rogers        "MetricName": "Execute"
231f9d45862SIan Rogers    },
232f9d45862SIan Rogers    {
23349898fefSIan Rogers        "BriefDescription": "Average number of Uops issued by front-end when it issued something",
23449898fefSIan Rogers        "MetricExpr": "UOPS_ISSUED.ANY / cpu@UOPS_ISSUED.ANY\\,cmask\\=1@",
23549898fefSIan Rogers        "MetricGroup": "Fed;FetchBW",
23649898fefSIan Rogers        "MetricName": "Fetch_UpC"
23749898fefSIan Rogers    },
23849898fefSIan Rogers    {
239038d3b53SJin Yao        "BriefDescription": "Fraction of Uops delivered by the DSB (aka Decoded ICache; or Uop Cache)",
240f9d45862SIan Rogers        "MetricExpr": "IDQ.DSB_UOPS / (IDQ.DSB_UOPS + IDQ.MITE_UOPS + IDQ.MS_UOPS)",
24149898fefSIan Rogers        "MetricGroup": "DSB;Fed;FetchBW",
242038d3b53SJin Yao        "MetricName": "DSB_Coverage"
243038d3b53SJin Yao    },
244038d3b53SJin Yao    {
245f9d45862SIan 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.",
246f9d45862SIan Rogers        "MetricExpr": "DSB2MITE_SWITCHES.PENALTY_CYCLES / DSB2MITE_SWITCHES.COUNT",
247f9d45862SIan Rogers        "MetricGroup": "DSBmiss",
248f9d45862SIan Rogers        "MetricName": "DSB_Switch_Cost"
249f9d45862SIan Rogers    },
250f9d45862SIan Rogers    {
251f9d45862SIan Rogers        "BriefDescription": "Total penalty related to DSB (uop cache) misses - subset of the Instruction_Fetch_BW Bottleneck.",
25255b201a8SIan 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))",
25349898fefSIan Rogers        "MetricGroup": "DSBmiss;Fed",
254f9d45862SIan Rogers        "MetricName": "DSB_Misses"
25549898fefSIan Rogers    },
25649898fefSIan Rogers    {
257f9d45862SIan Rogers        "BriefDescription": "Number of Instructions per non-speculative DSB miss (lower number means higher occurrence rate)",
25849898fefSIan Rogers        "MetricExpr": "INST_RETIRED.ANY / FRONTEND_RETIRED.ANY_DSB_MISS",
25949898fefSIan Rogers        "MetricGroup": "DSBmiss;Fed",
26049898fefSIan Rogers        "MetricName": "IpDSB_Miss_Ret"
26149898fefSIan Rogers    },
26249898fefSIan Rogers    {
263f9d45862SIan Rogers        "BriefDescription": "Number of Instructions per non-speculative Branch Misprediction (JEClear) (lower number means higher occurrence rate)",
264f9d45862SIan Rogers        "MetricExpr": "INST_RETIRED.ANY / BR_MISP_RETIRED.ALL_BRANCHES",
265f9d45862SIan Rogers        "MetricGroup": "Bad;BadSpec;BrMispredicts",
266f9d45862SIan Rogers        "MetricName": "IpMispredict"
267f9d45862SIan Rogers    },
268f9d45862SIan Rogers    {
269f9d45862SIan Rogers        "BriefDescription": "Branch Misprediction Cost: Fraction of TMA slots wasted per non-speculative branch misprediction (retired JEClear)",
27055b201a8SIan 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",
271f9d45862SIan Rogers        "MetricGroup": "Bad;BrMispredicts",
272f9d45862SIan Rogers        "MetricName": "Branch_Misprediction_Cost"
273f9d45862SIan Rogers    },
274f9d45862SIan Rogers    {
27549898fefSIan Rogers        "BriefDescription": "Fraction of branches that are non-taken conditionals",
27649898fefSIan Rogers        "MetricExpr": "BR_INST_RETIRED.NOT_TAKEN / BR_INST_RETIRED.ALL_BRANCHES",
27749898fefSIan Rogers        "MetricGroup": "Bad;Branches;CodeGen;PGO",
27849898fefSIan Rogers        "MetricName": "Cond_NT"
27949898fefSIan Rogers    },
28049898fefSIan Rogers    {
28149898fefSIan Rogers        "BriefDescription": "Fraction of branches that are taken conditionals",
28249898fefSIan Rogers        "MetricExpr": "(BR_INST_RETIRED.CONDITIONAL - BR_INST_RETIRED.NOT_TAKEN) / BR_INST_RETIRED.ALL_BRANCHES",
28349898fefSIan Rogers        "MetricGroup": "Bad;Branches;CodeGen;PGO",
28449898fefSIan Rogers        "MetricName": "Cond_TK"
28549898fefSIan Rogers    },
28649898fefSIan Rogers    {
28749898fefSIan Rogers        "BriefDescription": "Fraction of branches that are CALL or RET",
28849898fefSIan Rogers        "MetricExpr": "(BR_INST_RETIRED.NEAR_CALL + BR_INST_RETIRED.NEAR_RETURN) / BR_INST_RETIRED.ALL_BRANCHES",
28949898fefSIan Rogers        "MetricGroup": "Bad;Branches",
29049898fefSIan Rogers        "MetricName": "CallRet"
29149898fefSIan Rogers    },
29249898fefSIan Rogers    {
29349898fefSIan Rogers        "BriefDescription": "Fraction of branches that are unconditional (direct or indirect) jumps",
29449898fefSIan 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",
29549898fefSIan Rogers        "MetricGroup": "Bad;Branches",
29649898fefSIan Rogers        "MetricName": "Jump"
29749898fefSIan Rogers    },
29849898fefSIan Rogers    {
299f9d45862SIan Rogers        "BriefDescription": "Actual Average Latency for L1 data-cache miss demand load operations (in core cycles)",
30061ec07f5SHaiyan Song        "MetricExpr": "L1D_PEND_MISS.PENDING / (MEM_LOAD_RETIRED.L1_MISS + MEM_LOAD_RETIRED.FB_HIT)",
30149898fefSIan Rogers        "MetricGroup": "Mem;MemoryBound;MemoryLat",
302f9d45862SIan Rogers        "MetricName": "Load_Miss_Real_Latency"
303ecd94f1bSKan Liang    },
304ecd94f1bSKan Liang    {
30561ec07f5SHaiyan Song        "BriefDescription": "Memory-Level-Parallelism (average number of L1 miss demand load when there is at least one such miss. Per-Logical Processor)",
306fd550098SAndi Kleen        "MetricExpr": "L1D_PEND_MISS.PENDING / L1D_PEND_MISS.PENDING_CYCLES",
30755b201a8SIan Rogers        "MetricGroup": "Mem;MemoryBW;MemoryBound",
308ecd94f1bSKan Liang        "MetricName": "MLP"
309ecd94f1bSKan Liang    },
310ecd94f1bSKan Liang    {
311fd550098SAndi Kleen        "BriefDescription": "L1 cache true misses per kilo instruction for retired demand loads",
312*8358b122SIan Rogers        "MetricExpr": "1e3 * MEM_LOAD_RETIRED.L1_MISS / INST_RETIRED.ANY",
31355b201a8SIan Rogers        "MetricGroup": "CacheMisses;Mem",
314fd550098SAndi Kleen        "MetricName": "L1MPKI"
315fd550098SAndi Kleen    },
316fd550098SAndi Kleen    {
31749898fefSIan Rogers        "BriefDescription": "L1 cache true misses per kilo instruction for all demand loads (including speculative)",
318*8358b122SIan Rogers        "MetricExpr": "1e3 * L2_RQSTS.ALL_DEMAND_DATA_RD / INST_RETIRED.ANY",
31955b201a8SIan Rogers        "MetricGroup": "CacheMisses;Mem",
32049898fefSIan Rogers        "MetricName": "L1MPKI_Load"
32149898fefSIan Rogers    },
32249898fefSIan Rogers    {
323fd550098SAndi Kleen        "BriefDescription": "L2 cache true misses per kilo instruction for retired demand loads",
324*8358b122SIan Rogers        "MetricExpr": "1e3 * MEM_LOAD_RETIRED.L2_MISS / INST_RETIRED.ANY",
32555b201a8SIan Rogers        "MetricGroup": "Backend;CacheMisses;Mem",
326fd550098SAndi Kleen        "MetricName": "L2MPKI"
327fd550098SAndi Kleen    },
328fd550098SAndi Kleen    {
329f9d45862SIan Rogers        "BriefDescription": "L2 cache ([RKL+] true) misses per kilo instruction for all request types (including speculative)",
330*8358b122SIan Rogers        "MetricExpr": "1e3 * L2_RQSTS.MISS / INST_RETIRED.ANY",
33155b201a8SIan Rogers        "MetricGroup": "CacheMisses;Mem;Offcore",
332fd550098SAndi Kleen        "MetricName": "L2MPKI_All"
333fd550098SAndi Kleen    },
334fd550098SAndi Kleen    {
335f9d45862SIan Rogers        "BriefDescription": "L2 cache ([RKL+] true) misses per kilo instruction for all demand loads  (including speculative)",
336*8358b122SIan Rogers        "MetricExpr": "1e3 * L2_RQSTS.DEMAND_DATA_RD_MISS / INST_RETIRED.ANY",
33755b201a8SIan Rogers        "MetricGroup": "CacheMisses;Mem",
33849898fefSIan Rogers        "MetricName": "L2MPKI_Load"
33949898fefSIan Rogers    },
34049898fefSIan Rogers    {
341fd550098SAndi Kleen        "BriefDescription": "L2 cache hits per kilo instruction for all request types (including speculative)",
342*8358b122SIan Rogers        "MetricExpr": "1e3 * (L2_RQSTS.REFERENCES - L2_RQSTS.MISS) / INST_RETIRED.ANY",
34355b201a8SIan Rogers        "MetricGroup": "CacheMisses;Mem",
344fd550098SAndi Kleen        "MetricName": "L2HPKI_All"
345fd550098SAndi Kleen    },
346fd550098SAndi Kleen    {
34749898fefSIan Rogers        "BriefDescription": "L2 cache hits per kilo instruction for all demand loads  (including speculative)",
348*8358b122SIan Rogers        "MetricExpr": "1e3 * L2_RQSTS.DEMAND_DATA_RD_HIT / INST_RETIRED.ANY",
34955b201a8SIan Rogers        "MetricGroup": "CacheMisses;Mem",
35049898fefSIan Rogers        "MetricName": "L2HPKI_Load"
35149898fefSIan Rogers    },
35249898fefSIan Rogers    {
353fd550098SAndi Kleen        "BriefDescription": "L3 cache true misses per kilo instruction for retired demand loads",
354*8358b122SIan Rogers        "MetricExpr": "1e3 * MEM_LOAD_RETIRED.L3_MISS / INST_RETIRED.ANY",
35555b201a8SIan Rogers        "MetricGroup": "CacheMisses;Mem",
356fd550098SAndi Kleen        "MetricName": "L3MPKI"
357fd550098SAndi Kleen    },
358fd550098SAndi Kleen    {
359f9d45862SIan Rogers        "BriefDescription": "Fill Buffer (FB) hits per kilo instructions for retired demand loads (L1D misses that merge into ongoing miss-handling entries)",
360*8358b122SIan Rogers        "MetricExpr": "1e3 * MEM_LOAD_RETIRED.FB_HIT / INST_RETIRED.ANY",
36155b201a8SIan Rogers        "MetricGroup": "CacheMisses;Mem",
36249898fefSIan Rogers        "MetricName": "FB_HPKI"
36349898fefSIan Rogers    },
36449898fefSIan Rogers    {
36549898fefSIan Rogers        "BriefDescription": "Utilization of the core's Page Walker(s) serving STLB misses triggered by instruction/Load/Store accesses",
36649898fefSIan Rogers        "MetricConstraint": "NO_NMI_WATCHDOG",
36755b201a8SIan Rogers        "MetricExpr": "(ITLB_MISSES.WALK_PENDING + DTLB_LOAD_MISSES.WALK_PENDING + DTLB_STORE_MISSES.WALK_PENDING + EPT.WALK_PENDING) / (2 * CORE_CLKS)",
36849898fefSIan Rogers        "MetricGroup": "Mem;MemoryTLB",
36949898fefSIan Rogers        "MetricName": "Page_Walks_Utilization"
37049898fefSIan Rogers    },
37149898fefSIan Rogers    {
372f9d45862SIan Rogers        "BriefDescription": "Average per-core data fill bandwidth to the L1 data cache [GB / sec]",
373*8358b122SIan Rogers        "MetricExpr": "64 * L1D.REPLACEMENT / 1e9 / duration_time",
374f9d45862SIan Rogers        "MetricGroup": "Mem;MemoryBW",
375f9d45862SIan Rogers        "MetricName": "L1D_Cache_Fill_BW"
376f9d45862SIan Rogers    },
377f9d45862SIan Rogers    {
378f9d45862SIan Rogers        "BriefDescription": "Average per-core data fill bandwidth to the L2 cache [GB / sec]",
379*8358b122SIan Rogers        "MetricExpr": "64 * L2_LINES_IN.ALL / 1e9 / duration_time",
380f9d45862SIan Rogers        "MetricGroup": "Mem;MemoryBW",
381f9d45862SIan Rogers        "MetricName": "L2_Cache_Fill_BW"
382f9d45862SIan Rogers    },
383f9d45862SIan Rogers    {
384f9d45862SIan Rogers        "BriefDescription": "Average per-core data fill bandwidth to the L3 cache [GB / sec]",
385*8358b122SIan Rogers        "MetricExpr": "64 * LONGEST_LAT_CACHE.MISS / 1e9 / duration_time",
386f9d45862SIan Rogers        "MetricGroup": "Mem;MemoryBW",
387f9d45862SIan Rogers        "MetricName": "L3_Cache_Fill_BW"
388f9d45862SIan Rogers    },
389f9d45862SIan Rogers    {
390f9d45862SIan Rogers        "BriefDescription": "Average per-core data access bandwidth to the L3 cache [GB / sec]",
391*8358b122SIan Rogers        "MetricExpr": "64 * OFFCORE_REQUESTS.ALL_REQUESTS / 1e9 / duration_time",
392f9d45862SIan Rogers        "MetricGroup": "Mem;MemoryBW;Offcore",
393f9d45862SIan Rogers        "MetricName": "L3_Cache_Access_BW"
394f9d45862SIan Rogers    },
395f9d45862SIan Rogers    {
39661ec07f5SHaiyan 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)",
397*8358b122SIan Rogers        "MetricExpr": "1e3 * L2_LINES_OUT.SILENT / Instructions",
39849898fefSIan Rogers        "MetricGroup": "L2Evicts;Mem;Server",
39961ec07f5SHaiyan Song        "MetricName": "L2_Evictions_Silent_PKI"
40061ec07f5SHaiyan Song    },
40161ec07f5SHaiyan Song    {
40261ec07f5SHaiyan Song        "BriefDescription": "Rate of non silent evictions from the L2 cache per Kilo instruction",
403*8358b122SIan Rogers        "MetricExpr": "1e3 * L2_LINES_OUT.NON_SILENT / Instructions",
40449898fefSIan Rogers        "MetricGroup": "L2Evicts;Mem;Server",
40561ec07f5SHaiyan Song        "MetricName": "L2_Evictions_NonSilent_PKI"
40661ec07f5SHaiyan Song    },
40761ec07f5SHaiyan Song    {
408f9d45862SIan Rogers        "BriefDescription": "Average per-thread data fill bandwidth to the L1 data cache [GB / sec]",
40955b201a8SIan Rogers        "MetricExpr": "L1D_Cache_Fill_BW",
410f9d45862SIan Rogers        "MetricGroup": "Mem;MemoryBW",
411f9d45862SIan Rogers        "MetricName": "L1D_Cache_Fill_BW_1T"
412f9d45862SIan Rogers    },
413f9d45862SIan Rogers    {
414f9d45862SIan Rogers        "BriefDescription": "Average per-thread data fill bandwidth to the L2 cache [GB / sec]",
41555b201a8SIan Rogers        "MetricExpr": "L2_Cache_Fill_BW",
416f9d45862SIan Rogers        "MetricGroup": "Mem;MemoryBW",
417f9d45862SIan Rogers        "MetricName": "L2_Cache_Fill_BW_1T"
418f9d45862SIan Rogers    },
419f9d45862SIan Rogers    {
420f9d45862SIan Rogers        "BriefDescription": "Average per-thread data fill bandwidth to the L3 cache [GB / sec]",
42155b201a8SIan Rogers        "MetricExpr": "L3_Cache_Fill_BW",
422f9d45862SIan Rogers        "MetricGroup": "Mem;MemoryBW",
423f9d45862SIan Rogers        "MetricName": "L3_Cache_Fill_BW_1T"
424f9d45862SIan Rogers    },
425f9d45862SIan Rogers    {
426f9d45862SIan Rogers        "BriefDescription": "Average per-thread data access bandwidth to the L3 cache [GB / sec]",
42755b201a8SIan Rogers        "MetricExpr": "L3_Cache_Access_BW",
428f9d45862SIan Rogers        "MetricGroup": "Mem;MemoryBW;Offcore",
429f9d45862SIan Rogers        "MetricName": "L3_Cache_Access_BW_1T"
430f9d45862SIan Rogers    },
431f9d45862SIan Rogers    {
432fd550098SAndi Kleen        "BriefDescription": "Average CPU Utilization",
433*8358b122SIan Rogers        "MetricExpr": "CPU_CLK_UNHALTED.REF_TSC / TSC",
434ed97cc6cSJin Yao        "MetricGroup": "HPC;Summary",
435ecd94f1bSKan Liang        "MetricName": "CPU_Utilization"
436ecd94f1bSKan Liang    },
437ecd94f1bSKan Liang    {
438ed97cc6cSJin Yao        "BriefDescription": "Measured Average Frequency for unhalted processors [GHz]",
439*8358b122SIan Rogers        "MetricExpr": "Turbo_Utilization * TSC / 1e9 / duration_time",
44055b201a8SIan Rogers        "MetricGroup": "Power;Summary",
441ed97cc6cSJin Yao        "MetricName": "Average_Frequency"
442ed97cc6cSJin Yao    },
443ed97cc6cSJin Yao    {
444ecd94f1bSKan Liang        "BriefDescription": "Giga Floating Point Operations Per Second",
445*8358b122SIan Rogers        "MetricExpr": "(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) / 1e9 / duration_time",
44649898fefSIan Rogers        "MetricGroup": "Cor;Flops;HPC",
447f9d45862SIan Rogers        "MetricName": "GFLOPs",
448f9d45862SIan 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."
449ecd94f1bSKan Liang    },
450ecd94f1bSKan Liang    {
451fd550098SAndi Kleen        "BriefDescription": "Average Frequency Utilization relative nominal frequency",
45255b201a8SIan Rogers        "MetricExpr": "CLKS / CPU_CLK_UNHALTED.REF_TSC",
453ecd94f1bSKan Liang        "MetricGroup": "Power",
454ecd94f1bSKan Liang        "MetricName": "Turbo_Utilization"
455ecd94f1bSKan Liang    },
456ecd94f1bSKan Liang    {
45749898fefSIan Rogers        "BriefDescription": "Fraction of Core cycles where the core was running with power-delivery for baseline license level 0",
458*8358b122SIan Rogers        "MetricExpr": "(CORE_POWER.LVL0_TURBO_LICENSE / 2 / CORE_CLKS if #SMT_on else CORE_POWER.LVL0_TURBO_LICENSE / CORE_CLKS)",
45949898fefSIan Rogers        "MetricGroup": "Power",
46049898fefSIan Rogers        "MetricName": "Power_License0_Utilization",
46149898fefSIan 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."
46249898fefSIan Rogers    },
46349898fefSIan Rogers    {
46449898fefSIan Rogers        "BriefDescription": "Fraction of Core cycles where the core was running with power-delivery for license level 1",
465*8358b122SIan Rogers        "MetricExpr": "(CORE_POWER.LVL1_TURBO_LICENSE / 2 / CORE_CLKS if #SMT_on else CORE_POWER.LVL1_TURBO_LICENSE / CORE_CLKS)",
46649898fefSIan Rogers        "MetricGroup": "Power",
46749898fefSIan Rogers        "MetricName": "Power_License1_Utilization",
46849898fefSIan 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."
46949898fefSIan Rogers    },
47049898fefSIan Rogers    {
47149898fefSIan Rogers        "BriefDescription": "Fraction of Core cycles where the core was running with power-delivery for license level 2 (introduced in SKX)",
472*8358b122SIan Rogers        "MetricExpr": "(CORE_POWER.LVL2_TURBO_LICENSE / 2 / CORE_CLKS if #SMT_on else CORE_POWER.LVL2_TURBO_LICENSE / CORE_CLKS)",
47349898fefSIan Rogers        "MetricGroup": "Power",
47449898fefSIan Rogers        "MetricName": "Power_License2_Utilization",
47549898fefSIan 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."
47649898fefSIan Rogers    },
47749898fefSIan Rogers    {
47861ec07f5SHaiyan Song        "BriefDescription": "Fraction of cycles where both hardware Logical Processors were active",
479*8358b122SIan Rogers        "MetricExpr": "(1 - CPU_CLK_UNHALTED.ONE_THREAD_ACTIVE / (CPU_CLK_UNHALTED.REF_XCLK_ANY / 2) if #SMT_on else 0)",
480ed97cc6cSJin Yao        "MetricGroup": "SMT",
481ecd94f1bSKan Liang        "MetricName": "SMT_2T_Utilization"
482ecd94f1bSKan Liang    },
483ecd94f1bSKan Liang    {
484038d3b53SJin Yao        "BriefDescription": "Fraction of cycles spent in the Operating System (OS) Kernel mode",
485ed97cc6cSJin Yao        "MetricExpr": "CPU_CLK_UNHALTED.THREAD_P:k / CPU_CLK_UNHALTED.THREAD",
486038d3b53SJin Yao        "MetricGroup": "OS",
487ecd94f1bSKan Liang        "MetricName": "Kernel_Utilization"
488ecd94f1bSKan Liang    },
489ecd94f1bSKan Liang    {
49049898fefSIan Rogers        "BriefDescription": "Cycles Per Instruction for the Operating System (OS) Kernel mode",
49149898fefSIan Rogers        "MetricExpr": "CPU_CLK_UNHALTED.THREAD_P:k / INST_RETIRED.ANY_P:k",
49249898fefSIan Rogers        "MetricGroup": "OS",
49349898fefSIan Rogers        "MetricName": "Kernel_CPI"
49449898fefSIan Rogers    },
49549898fefSIan Rogers    {
496fd550098SAndi Kleen        "BriefDescription": "Average external Memory Bandwidth Use for reads and writes [GB / sec]",
497*8358b122SIan Rogers        "MetricExpr": "64 * (UNC_M_CAS_COUNT.RD + UNC_M_CAS_COUNT.WR) / 1e9 / duration_time",
49849898fefSIan Rogers        "MetricGroup": "HPC;Mem;MemoryBW;SoC",
499fd550098SAndi Kleen        "MetricName": "DRAM_BW_Use"
500fd550098SAndi Kleen    },
501fd550098SAndi Kleen    {
502fd550098SAndi Kleen        "BriefDescription": "Average latency of data read request to external memory (in nanoseconds). Accounts for demand loads and L1/L2 prefetches",
503*8358b122SIan Rogers        "MetricExpr": "1e9 * (UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD / UNC_CHA_TOR_INSERTS.IA_MISS_DRD) / (Socket_CLKS / duration_time)",
50449898fefSIan Rogers        "MetricGroup": "Mem;MemoryLat;SoC",
505038d3b53SJin Yao        "MetricName": "MEM_Read_Latency"
506fd550098SAndi Kleen    },
507fd550098SAndi Kleen    {
508fd550098SAndi Kleen        "BriefDescription": "Average number of parallel data read requests to external memory. Accounts for demand loads and L1/L2 prefetches",
509*8358b122SIan Rogers        "MetricExpr": "UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD / UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD@thresh\\=1@",
51049898fefSIan Rogers        "MetricGroup": "Mem;MemoryBW;SoC",
511038d3b53SJin Yao        "MetricName": "MEM_Parallel_Reads"
512fd550098SAndi Kleen    },
513fd550098SAndi Kleen    {
514fd550098SAndi 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",
515*8358b122SIan Rogers        "MetricExpr": "1e9 * (UNC_M_PMM_RPQ_OCCUPANCY.ALL / UNC_M_PMM_RPQ_INSERTS) / imc_0@event\\=0x0@",
51655b201a8SIan Rogers        "MetricGroup": "Mem;MemoryLat;Server;SoC",
517fd550098SAndi Kleen        "MetricName": "MEM_PMM_Read_Latency"
518fd550098SAndi Kleen    },
519fd550098SAndi Kleen    {
52049898fefSIan Rogers        "BriefDescription": "Average latency of data read request to external DRAM memory [in nanoseconds]. Accounts for demand loads and L1/L2 data-read prefetches",
521*8358b122SIan Rogers        "MetricExpr": "1e9 * (UNC_M_RPQ_OCCUPANCY / UNC_M_RPQ_INSERTS) / imc_0@event\\=0x0@",
52255b201a8SIan Rogers        "MetricGroup": "Mem;MemoryLat;Server;SoC",
52349898fefSIan Rogers        "MetricName": "MEM_DRAM_Read_Latency"
52449898fefSIan Rogers    },
52549898fefSIan Rogers    {
526fd550098SAndi Kleen        "BriefDescription": "Average 3DXP Memory Bandwidth Use for reads [GB / sec]",
527*8358b122SIan Rogers        "MetricExpr": "64 * UNC_M_PMM_RPQ_INSERTS / 1e9 / duration_time",
52855b201a8SIan Rogers        "MetricGroup": "Mem;MemoryBW;Server;SoC",
529fd550098SAndi Kleen        "MetricName": "PMM_Read_BW"
530fd550098SAndi Kleen    },
531fd550098SAndi Kleen    {
532fd550098SAndi Kleen        "BriefDescription": "Average 3DXP Memory Bandwidth Use for Writes [GB / sec]",
533*8358b122SIan Rogers        "MetricExpr": "64 * UNC_M_PMM_WPQ_INSERTS / 1e9 / duration_time",
53455b201a8SIan Rogers        "MetricGroup": "Mem;MemoryBW;Server;SoC",
535fd550098SAndi Kleen        "MetricName": "PMM_Write_BW"
536fd550098SAndi Kleen    },
537fd550098SAndi Kleen    {
538038d3b53SJin Yao        "BriefDescription": "Average IO (network or disk) Bandwidth Use for Writes [GB / sec]",
539*8358b122SIan 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 / 1e9 / duration_time",
54055b201a8SIan Rogers        "MetricGroup": "IoBW;Mem;Server;SoC",
541038d3b53SJin Yao        "MetricName": "IO_Write_BW"
542038d3b53SJin Yao    },
543038d3b53SJin Yao    {
544038d3b53SJin Yao        "BriefDescription": "Average IO (network or disk) Bandwidth Use for Reads [GB / sec]",
545*8358b122SIan Rogers        "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 / 1e9 / duration_time",
54655b201a8SIan Rogers        "MetricGroup": "IoBW;Mem;Server;SoC",
547038d3b53SJin Yao        "MetricName": "IO_Read_BW"
548038d3b53SJin Yao    },
549038d3b53SJin Yao    {
550fd550098SAndi Kleen        "BriefDescription": "Socket actual clocks when any core is active on that socket",
55161ec07f5SHaiyan Song        "MetricExpr": "cha_0@event\\=0x0@",
552038d3b53SJin Yao        "MetricGroup": "SoC",
553fd550098SAndi Kleen        "MetricName": "Socket_CLKS"
554fd550098SAndi Kleen    },
555fd550098SAndi Kleen    {
556038d3b53SJin 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]",
557ed97cc6cSJin Yao        "MetricExpr": "INST_RETIRED.ANY / BR_INST_RETIRED.FAR_BRANCH:u",
558038d3b53SJin Yao        "MetricGroup": "Branches;OS",
55961ec07f5SHaiyan Song        "MetricName": "IpFarBranch"
56061ec07f5SHaiyan Song    },
56161ec07f5SHaiyan Song    {
56255b201a8SIan Rogers        "BriefDescription": "Uncore frequency per die [GHZ]",
563*8358b122SIan Rogers        "MetricExpr": "Socket_CLKS / #num_dies / duration_time / 1e9",
56455b201a8SIan Rogers        "MetricGroup": "SoC",
56555b201a8SIan Rogers        "MetricName": "UNCORE_FREQ"
566f9d45862SIan Rogers    },
567f9d45862SIan Rogers    {
568*8358b122SIan Rogers        "BriefDescription": "Percentage of time spent in the active CPU power state C0",
569*8358b122SIan Rogers        "MetricExpr": "CPU_CLK_UNHALTED.REF_TSC / TSC",
570*8358b122SIan Rogers        "MetricName": "cpu_utilization",
571*8358b122SIan Rogers        "ScaleUnit": "100%"
572*8358b122SIan Rogers    },
573*8358b122SIan Rogers    {
574f9d45862SIan Rogers        "BriefDescription": "CPU operating frequency (in GHz)",
575*8358b122SIan Rogers        "MetricExpr": "CPU_CLK_UNHALTED.THREAD / CPU_CLK_UNHALTED.REF_TSC * #SYSTEM_TSC_FREQ / 1e9 / duration_time",
576f9d45862SIan Rogers        "MetricName": "cpu_operating_frequency",
577f9d45862SIan Rogers        "ScaleUnit": "1GHz"
578f9d45862SIan Rogers    },
579f9d45862SIan Rogers    {
580*8358b122SIan Rogers        "BriefDescription": "Cycles per instruction retired; indicating how much time each executed instruction took; in units of cycles.",
581*8358b122SIan Rogers        "MetricExpr": "CPU_CLK_UNHALTED.THREAD / INST_RETIRED.ANY",
582*8358b122SIan Rogers        "MetricName": "cpi",
583*8358b122SIan Rogers        "ScaleUnit": "1per_instr"
584*8358b122SIan Rogers    },
585*8358b122SIan Rogers    {
586f9d45862SIan Rogers        "BriefDescription": "The ratio of number of completed memory load instructions to the total number completed instructions",
587f9d45862SIan Rogers        "MetricExpr": "MEM_INST_RETIRED.ALL_LOADS / INST_RETIRED.ANY",
588f9d45862SIan Rogers        "MetricName": "loads_per_instr",
589f9d45862SIan Rogers        "ScaleUnit": "1per_instr"
590f9d45862SIan Rogers    },
591f9d45862SIan Rogers    {
592f9d45862SIan Rogers        "BriefDescription": "The ratio of number of completed memory store instructions to the total number completed instructions",
593f9d45862SIan Rogers        "MetricExpr": "MEM_INST_RETIRED.ALL_STORES / INST_RETIRED.ANY",
594f9d45862SIan Rogers        "MetricName": "stores_per_instr",
595f9d45862SIan Rogers        "ScaleUnit": "1per_instr"
596f9d45862SIan Rogers    },
597f9d45862SIan Rogers    {
598f9d45862SIan Rogers        "BriefDescription": "Ratio of number of requests missing L1 data cache (includes data+rfo w/ prefetches) to the total number of completed instructions",
599f9d45862SIan Rogers        "MetricExpr": "L1D.REPLACEMENT / INST_RETIRED.ANY",
60055b201a8SIan Rogers        "MetricName": "l1d_mpi",
601f9d45862SIan Rogers        "ScaleUnit": "1per_instr"
602f9d45862SIan Rogers    },
603f9d45862SIan Rogers    {
604f9d45862SIan Rogers        "BriefDescription": "Ratio of number of demand load requests hitting in L1 data cache to the total number of completed instructions ",
605f9d45862SIan Rogers        "MetricExpr": "MEM_LOAD_RETIRED.L1_HIT / INST_RETIRED.ANY",
606f9d45862SIan Rogers        "MetricName": "l1d_demand_data_read_hits_per_instr",
607f9d45862SIan Rogers        "ScaleUnit": "1per_instr"
608f9d45862SIan Rogers    },
609f9d45862SIan Rogers    {
610f9d45862SIan Rogers        "BriefDescription": "Ratio of number of code read requests missing in L1 instruction cache (includes prefetches) to the total number of completed instructions",
611f9d45862SIan Rogers        "MetricExpr": "L2_RQSTS.ALL_CODE_RD / INST_RETIRED.ANY",
612f9d45862SIan Rogers        "MetricName": "l1_i_code_read_misses_with_prefetches_per_instr",
613f9d45862SIan Rogers        "ScaleUnit": "1per_instr"
614f9d45862SIan Rogers    },
615f9d45862SIan Rogers    {
616f9d45862SIan Rogers        "BriefDescription": "Ratio of number of completed demand load requests hitting in L2 cache to the total number of completed instructions ",
617f9d45862SIan Rogers        "MetricExpr": "MEM_LOAD_RETIRED.L2_HIT / INST_RETIRED.ANY",
618f9d45862SIan Rogers        "MetricName": "l2_demand_data_read_hits_per_instr",
619f9d45862SIan Rogers        "ScaleUnit": "1per_instr"
620f9d45862SIan Rogers    },
621f9d45862SIan Rogers    {
622f9d45862SIan Rogers        "BriefDescription": "Ratio of number of requests missing L2 cache (includes code+data+rfo w/ prefetches) to the total number of completed instructions",
623f9d45862SIan Rogers        "MetricExpr": "L2_LINES_IN.ALL / INST_RETIRED.ANY",
62455b201a8SIan Rogers        "MetricName": "l2_mpi",
625f9d45862SIan Rogers        "ScaleUnit": "1per_instr"
626f9d45862SIan Rogers    },
627f9d45862SIan Rogers    {
628f9d45862SIan Rogers        "BriefDescription": "Ratio of number of completed data read request missing L2 cache to the total number of completed instructions",
629f9d45862SIan Rogers        "MetricExpr": "MEM_LOAD_RETIRED.L2_MISS / INST_RETIRED.ANY",
630f9d45862SIan Rogers        "MetricName": "l2_demand_data_read_mpi",
631f9d45862SIan Rogers        "ScaleUnit": "1per_instr"
632f9d45862SIan Rogers    },
633f9d45862SIan Rogers    {
634f9d45862SIan Rogers        "BriefDescription": "Ratio of number of code read request missing L2 cache to the total number of completed instructions",
635f9d45862SIan Rogers        "MetricExpr": "L2_RQSTS.CODE_RD_MISS / INST_RETIRED.ANY",
636f9d45862SIan Rogers        "MetricName": "l2_demand_code_mpi",
637f9d45862SIan Rogers        "ScaleUnit": "1per_instr"
638f9d45862SIan Rogers    },
639f9d45862SIan Rogers    {
640f9d45862SIan 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",
641f9d45862SIan Rogers        "MetricExpr": "cha@unc_cha_tor_inserts.ia_miss\\,config1\\=0x12D4043300000000@ / INST_RETIRED.ANY",
642f9d45862SIan Rogers        "MetricName": "llc_data_read_mpi_demand_plus_prefetch",
643f9d45862SIan Rogers        "ScaleUnit": "1per_instr"
644f9d45862SIan Rogers    },
645f9d45862SIan Rogers    {
646f9d45862SIan 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",
647f9d45862SIan Rogers        "MetricExpr": "cha@unc_cha_tor_inserts.ia_miss\\,config1\\=0x12CC023300000000@ / INST_RETIRED.ANY",
648f9d45862SIan Rogers        "MetricName": "llc_code_read_mpi_demand_plus_prefetch",
649f9d45862SIan Rogers        "ScaleUnit": "1per_instr"
650f9d45862SIan Rogers    },
651f9d45862SIan Rogers    {
652f9d45862SIan Rogers        "BriefDescription": "Average latency of a last level cache (LLC) demand and prefetch data read miss (read memory access) in nano seconds",
653*8358b122SIan Rogers        "MetricExpr": "1e9 * (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",
654f9d45862SIan Rogers        "MetricName": "llc_data_read_demand_plus_prefetch_miss_latency",
655f9d45862SIan Rogers        "ScaleUnit": "1ns"
656f9d45862SIan Rogers    },
657f9d45862SIan Rogers    {
658f9d45862SIan 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",
659*8358b122SIan Rogers        "MetricExpr": "1e9 * (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",
660f9d45862SIan Rogers        "MetricName": "llc_data_read_demand_plus_prefetch_miss_latency_for_local_requests",
661f9d45862SIan Rogers        "ScaleUnit": "1ns"
662f9d45862SIan Rogers    },
663f9d45862SIan Rogers    {
664f9d45862SIan 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",
665*8358b122SIan Rogers        "MetricExpr": "1e9 * (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",
666f9d45862SIan Rogers        "MetricName": "llc_data_read_demand_plus_prefetch_miss_latency_for_remote_requests",
667f9d45862SIan Rogers        "ScaleUnit": "1ns"
668f9d45862SIan Rogers    },
669f9d45862SIan Rogers    {
670*8358b122SIan 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",
671f9d45862SIan Rogers        "MetricExpr": "ITLB_MISSES.WALK_COMPLETED / INST_RETIRED.ANY",
67255b201a8SIan Rogers        "MetricName": "itlb_mpi",
673*8358b122SIan Rogers        "PublicDescription": "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.",
674f9d45862SIan Rogers        "ScaleUnit": "1per_instr"
675f9d45862SIan Rogers    },
676f9d45862SIan Rogers    {
677*8358b122SIan 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",
678f9d45862SIan Rogers        "MetricExpr": "ITLB_MISSES.WALK_COMPLETED_2M_4M / INST_RETIRED.ANY",
67955b201a8SIan Rogers        "MetricName": "itlb_large_page_mpi",
680*8358b122SIan Rogers        "PublicDescription": "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.",
681f9d45862SIan Rogers        "ScaleUnit": "1per_instr"
682f9d45862SIan Rogers    },
683f9d45862SIan Rogers    {
684*8358b122SIan 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",
685f9d45862SIan Rogers        "MetricExpr": "DTLB_LOAD_MISSES.WALK_COMPLETED / INST_RETIRED.ANY",
68655b201a8SIan Rogers        "MetricName": "dtlb_load_mpi",
687*8358b122SIan Rogers        "PublicDescription": "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.",
688f9d45862SIan Rogers        "ScaleUnit": "1per_instr"
689f9d45862SIan Rogers    },
690f9d45862SIan Rogers    {
691*8358b122SIan 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",
692f9d45862SIan Rogers        "MetricExpr": "DTLB_LOAD_MISSES.WALK_COMPLETED_2M_4M / INST_RETIRED.ANY",
69355b201a8SIan Rogers        "MetricName": "dtlb_2mb_large_page_load_mpi",
694*8358b122SIan Rogers        "PublicDescription": "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.",
695f9d45862SIan Rogers        "ScaleUnit": "1per_instr"
696f9d45862SIan Rogers    },
697f9d45862SIan Rogers    {
698*8358b122SIan 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",
699f9d45862SIan Rogers        "MetricExpr": "DTLB_STORE_MISSES.WALK_COMPLETED / INST_RETIRED.ANY",
70055b201a8SIan Rogers        "MetricName": "dtlb_store_mpi",
701*8358b122SIan Rogers        "PublicDescription": "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.",
702f9d45862SIan Rogers        "ScaleUnit": "1per_instr"
703f9d45862SIan Rogers    },
704f9d45862SIan Rogers    {
705f9d45862SIan 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.",
706*8358b122SIan Rogers        "MetricExpr": "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@)",
70755b201a8SIan Rogers        "MetricName": "numa_reads_addressed_to_local_dram",
708*8358b122SIan Rogers        "ScaleUnit": "100%"
709f9d45862SIan Rogers    },
710f9d45862SIan Rogers    {
711f9d45862SIan 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.",
712*8358b122SIan Rogers        "MetricExpr": "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@)",
71355b201a8SIan Rogers        "MetricName": "numa_reads_addressed_to_remote_dram",
714*8358b122SIan Rogers        "ScaleUnit": "100%"
715f9d45862SIan Rogers    },
716f9d45862SIan Rogers    {
717f9d45862SIan Rogers        "BriefDescription": "Uncore operating frequency in GHz",
718*8358b122SIan Rogers        "MetricExpr": "UNC_CHA_CLOCKTICKS / (source_count(UNC_CHA_CLOCKTICKS) * #num_packages) / 1e9 / duration_time",
719f9d45862SIan Rogers        "MetricName": "uncore_frequency",
720f9d45862SIan Rogers        "ScaleUnit": "1GHz"
721f9d45862SIan Rogers    },
722f9d45862SIan Rogers    {
723f9d45862SIan Rogers        "BriefDescription": "Intel(R) Ultra Path Interconnect (UPI) data transmit bandwidth (MB/sec)",
724*8358b122SIan Rogers        "MetricExpr": "UNC_UPI_TxL_FLITS.ALL_DATA * 7.111111111111111 / 1e6 / duration_time",
72555b201a8SIan Rogers        "MetricName": "upi_data_transmit_bw",
726f9d45862SIan Rogers        "ScaleUnit": "1MB/s"
727f9d45862SIan Rogers    },
728f9d45862SIan Rogers    {
729f9d45862SIan Rogers        "BriefDescription": "DDR memory read bandwidth (MB/sec)",
730*8358b122SIan Rogers        "MetricExpr": "UNC_M_CAS_COUNT.RD * 64 / 1e6 / duration_time",
731f9d45862SIan Rogers        "MetricName": "memory_bandwidth_read",
732f9d45862SIan Rogers        "ScaleUnit": "1MB/s"
733f9d45862SIan Rogers    },
734f9d45862SIan Rogers    {
735f9d45862SIan Rogers        "BriefDescription": "DDR memory write bandwidth (MB/sec)",
736*8358b122SIan Rogers        "MetricExpr": "UNC_M_CAS_COUNT.WR * 64 / 1e6 / duration_time",
737f9d45862SIan Rogers        "MetricName": "memory_bandwidth_write",
738f9d45862SIan Rogers        "ScaleUnit": "1MB/s"
739f9d45862SIan Rogers    },
740f9d45862SIan Rogers    {
741f9d45862SIan Rogers        "BriefDescription": "DDR memory bandwidth (MB/sec)",
742*8358b122SIan Rogers        "MetricExpr": "(UNC_M_CAS_COUNT.RD + UNC_M_CAS_COUNT.WR) * 64 / 1e6 / duration_time",
743f9d45862SIan Rogers        "MetricName": "memory_bandwidth_total",
744f9d45862SIan Rogers        "ScaleUnit": "1MB/s"
745f9d45862SIan Rogers    },
746f9d45862SIan Rogers    {
747f9d45862SIan Rogers        "BriefDescription": "Intel(R) Optane(TM) Persistent Memory(PMEM) memory read bandwidth (MB/sec)",
748*8358b122SIan Rogers        "MetricExpr": "UNC_M_PMM_RPQ_INSERTS * 64 / 1e6 / duration_time",
749f9d45862SIan Rogers        "MetricName": "pmem_memory_bandwidth_read",
750f9d45862SIan Rogers        "ScaleUnit": "1MB/s"
751f9d45862SIan Rogers    },
752f9d45862SIan Rogers    {
753f9d45862SIan Rogers        "BriefDescription": "Intel(R) Optane(TM) Persistent Memory(PMEM) memory write bandwidth (MB/sec)",
754*8358b122SIan Rogers        "MetricExpr": "UNC_M_PMM_WPQ_INSERTS * 64 / 1e6 / duration_time",
755f9d45862SIan Rogers        "MetricName": "pmem_memory_bandwidth_write",
756f9d45862SIan Rogers        "ScaleUnit": "1MB/s"
757f9d45862SIan Rogers    },
758f9d45862SIan Rogers    {
759f9d45862SIan Rogers        "BriefDescription": "Intel(R) Optane(TM) Persistent Memory(PMEM) memory bandwidth (MB/sec)",
760*8358b122SIan Rogers        "MetricExpr": "(UNC_M_PMM_RPQ_INSERTS + UNC_M_PMM_WPQ_INSERTS) * 64 / 1e6 / duration_time",
761f9d45862SIan Rogers        "MetricName": "pmem_memory_bandwidth_total",
762f9d45862SIan Rogers        "ScaleUnit": "1MB/s"
763f9d45862SIan Rogers    },
764f9d45862SIan Rogers    {
765f9d45862SIan Rogers        "BriefDescription": "Bandwidth of IO reads that are initiated by end device controllers that are requesting memory from the CPU.",
766*8358b122SIan 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 / 1e6 / duration_time",
76755b201a8SIan Rogers        "MetricName": "io_bandwidth_disk_or_network_writes",
768f9d45862SIan Rogers        "ScaleUnit": "1MB/s"
769f9d45862SIan Rogers    },
770f9d45862SIan Rogers    {
771f9d45862SIan Rogers        "BriefDescription": "Bandwidth of IO writes that are initiated by end device controllers that are writing memory to the CPU.",
772*8358b122SIan 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 / 1e6 / duration_time",
77355b201a8SIan Rogers        "MetricName": "io_bandwidth_disk_or_network_reads",
774f9d45862SIan Rogers        "ScaleUnit": "1MB/s"
775f9d45862SIan Rogers    },
776f9d45862SIan Rogers    {
777f9d45862SIan Rogers        "BriefDescription": "Uops delivered from decoded instruction cache (decoded stream buffer or DSB) as a percent of total uops delivered to Instruction Decode Queue",
778*8358b122SIan Rogers        "MetricExpr": "IDQ.DSB_UOPS / (IDQ.DSB_UOPS + IDQ.MITE_UOPS + IDQ.MS_UOPS + LSD.UOPS)",
77955b201a8SIan Rogers        "MetricName": "percent_uops_delivered_from_decoded_icache",
780*8358b122SIan Rogers        "ScaleUnit": "100%"
781f9d45862SIan Rogers    },
782f9d45862SIan Rogers    {
783f9d45862SIan 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",
784*8358b122SIan Rogers        "MetricExpr": "IDQ.MITE_UOPS / (IDQ.DSB_UOPS + IDQ.MITE_UOPS + IDQ.MS_UOPS + LSD.UOPS)",
78555b201a8SIan Rogers        "MetricName": "percent_uops_delivered_from_legacy_decode_pipeline",
786*8358b122SIan Rogers        "ScaleUnit": "100%"
787f9d45862SIan Rogers    },
788f9d45862SIan Rogers    {
789f9d45862SIan Rogers        "BriefDescription": "Uops delivered from microcode sequencer (MS) as a percent of total uops delivered to Instruction Decode Queue",
790*8358b122SIan Rogers        "MetricExpr": "IDQ.MS_UOPS / (IDQ.DSB_UOPS + IDQ.MITE_UOPS + IDQ.MS_UOPS + LSD.UOPS)",
79155b201a8SIan Rogers        "MetricName": "percent_uops_delivered_from_microcode_sequencer",
792*8358b122SIan Rogers        "ScaleUnit": "100%"
793f9d45862SIan Rogers    },
794f9d45862SIan Rogers    {
795f9d45862SIan Rogers        "BriefDescription": "Bandwidth (MB/sec) of read requests that miss the last level cache (LLC) and go to local memory.",
796*8358b122SIan Rogers        "MetricExpr": "UNC_CHA_REQUESTS.READS_LOCAL * 64 / 1e6 / duration_time",
797f9d45862SIan Rogers        "MetricName": "llc_miss_local_memory_bandwidth_read",
798f9d45862SIan Rogers        "ScaleUnit": "1MB/s"
799f9d45862SIan Rogers    },
800f9d45862SIan Rogers    {
801f9d45862SIan Rogers        "BriefDescription": "Bandwidth (MB/sec) of write requests that miss the last level cache (LLC) and go to local memory.",
802*8358b122SIan Rogers        "MetricExpr": "UNC_CHA_REQUESTS.WRITES_LOCAL * 64 / 1e6 / duration_time",
803f9d45862SIan Rogers        "MetricName": "llc_miss_local_memory_bandwidth_write",
804f9d45862SIan Rogers        "ScaleUnit": "1MB/s"
805f9d45862SIan Rogers    },
806f9d45862SIan Rogers    {
807f9d45862SIan Rogers        "BriefDescription": "Bandwidth (MB/sec) of read requests that miss the last level cache (LLC) and go to remote memory.",
808*8358b122SIan Rogers        "MetricExpr": "UNC_CHA_REQUESTS.READS_REMOTE * 64 / 1e6 / duration_time",
809f9d45862SIan Rogers        "MetricName": "llc_miss_remote_memory_bandwidth_read",
810f9d45862SIan Rogers        "ScaleUnit": "1MB/s"
811f9d45862SIan Rogers    },
812f9d45862SIan Rogers    {
813*8358b122SIan Rogers        "BriefDescription": "This category represents fraction of slots where the processor's Frontend undersupplies its Backend",
814*8358b122SIan Rogers        "MetricExpr": "IDQ_UOPS_NOT_DELIVERED.CORE / SLOTS",
815*8358b122SIan Rogers        "MetricGroup": "PGO;TopdownL1;tma_L1_group;tma_L1_group",
816*8358b122SIan Rogers        "MetricName": "tma_frontend_bound",
817*8358b122SIan 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.",
818*8358b122SIan Rogers        "ScaleUnit": "100%"
819*8358b122SIan Rogers    },
820*8358b122SIan Rogers    {
821*8358b122SIan Rogers        "BriefDescription": "This metric represents fraction of slots the CPU was stalled due to Frontend latency issues",
822*8358b122SIan Rogers        "MetricExpr": "4 * IDQ_UOPS_NOT_DELIVERED.CYCLES_0_UOPS_DELIV.CORE / SLOTS",
823*8358b122SIan Rogers        "MetricGroup": "Frontend;TopdownL2;tma_L2_group;tma_L2_group;tma_frontend_bound_group",
824*8358b122SIan Rogers        "MetricName": "tma_fetch_latency",
825*8358b122SIan 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.",
826*8358b122SIan Rogers        "ScaleUnit": "100%"
827*8358b122SIan Rogers    },
828*8358b122SIan Rogers    {
829*8358b122SIan Rogers        "BriefDescription": "This metric represents fraction of cycles the CPU was stalled due to instruction cache misses.",
830*8358b122SIan Rogers        "MetricExpr": "(ICACHE_16B.IFDATA_STALL + 2 * cpu@ICACHE_16B.IFDATA_STALL\\,cmask\\=0x1\\,edge\\=0x1@) / CPU_CLK_UNHALTED.THREAD",
831*8358b122SIan Rogers        "MetricGroup": "BigFoot;FetchLat;IcMiss;TopdownL3;tma_L3_group;tma_fetch_latency_group",
832*8358b122SIan Rogers        "MetricName": "tma_icache_misses",
833*8358b122SIan Rogers        "ScaleUnit": "100%"
834*8358b122SIan Rogers    },
835*8358b122SIan Rogers    {
836*8358b122SIan Rogers        "BriefDescription": "This metric represents fraction of cycles the CPU was stalled due to Instruction TLB (ITLB) misses.",
837*8358b122SIan Rogers        "MetricExpr": "ICACHE_64B.IFTAG_STALL / CPU_CLK_UNHALTED.THREAD",
838*8358b122SIan Rogers        "MetricGroup": "BigFoot;FetchLat;MemoryTLB;TopdownL3;tma_L3_group;tma_fetch_latency_group",
839*8358b122SIan Rogers        "MetricName": "tma_itlb_misses",
840*8358b122SIan Rogers        "ScaleUnit": "100%"
841*8358b122SIan Rogers    },
842*8358b122SIan Rogers    {
843*8358b122SIan Rogers        "BriefDescription": "This metric represents fraction of cycles the CPU was stalled due to Branch Resteers",
844*8358b122SIan Rogers        "MetricExpr": "INT_MISC.CLEAR_RESTEER_CYCLES / CPU_CLK_UNHALTED.THREAD + tma_unknown_branches",
845*8358b122SIan Rogers        "MetricGroup": "FetchLat;TopdownL3;tma_L3_group;tma_fetch_latency_group",
846*8358b122SIan Rogers        "MetricName": "tma_branch_resteers",
847*8358b122SIan 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.",
848*8358b122SIan Rogers        "ScaleUnit": "100%"
849*8358b122SIan Rogers    },
850*8358b122SIan Rogers    {
851*8358b122SIan 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. ",
852*8358b122SIan Rogers        "MetricExpr": "BR_MISP_RETIRED.ALL_BRANCHES / (BR_MISP_RETIRED.ALL_BRANCHES + MACHINE_CLEARS.COUNT) * INT_MISC.CLEAR_RESTEER_CYCLES / CPU_CLK_UNHALTED.THREAD",
853*8358b122SIan Rogers        "MetricGroup": "BadSpec;BrMispredicts;TopdownL4;tma_L4_group;tma_branch_resteers_group",
854*8358b122SIan Rogers        "MetricName": "tma_mispredicts_resteers",
855*8358b122SIan Rogers        "ScaleUnit": "100%"
856*8358b122SIan Rogers    },
857*8358b122SIan Rogers    {
858*8358b122SIan Rogers        "BriefDescription": "This metric represents fraction of cycles the CPU was stalled due to Branch Resteers as a result of Machine Clears. ",
859*8358b122SIan Rogers        "MetricExpr": "(1 - BR_MISP_RETIRED.ALL_BRANCHES / (BR_MISP_RETIRED.ALL_BRANCHES + MACHINE_CLEARS.COUNT)) * INT_MISC.CLEAR_RESTEER_CYCLES / CPU_CLK_UNHALTED.THREAD",
860*8358b122SIan Rogers        "MetricGroup": "BadSpec;MachineClears;TopdownL4;tma_L4_group;tma_branch_resteers_group",
861*8358b122SIan Rogers        "MetricName": "tma_clears_resteers",
862*8358b122SIan Rogers        "ScaleUnit": "100%"
863*8358b122SIan Rogers    },
864*8358b122SIan Rogers    {
865*8358b122SIan Rogers        "BriefDescription": "This metric represents fraction of cycles the CPU was stalled due to new branch address clears",
866*8358b122SIan Rogers        "MetricExpr": "9 * BACLEARS.ANY / CPU_CLK_UNHALTED.THREAD",
867*8358b122SIan Rogers        "MetricGroup": "BigFoot;FetchLat;TopdownL4;tma_L4_group;tma_branch_resteers_group",
868*8358b122SIan Rogers        "MetricName": "tma_unknown_branches",
869*8358b122SIan 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).",
870*8358b122SIan Rogers        "ScaleUnit": "100%"
871*8358b122SIan Rogers    },
872*8358b122SIan Rogers    {
873*8358b122SIan Rogers        "BriefDescription": "This metric represents fraction of cycles the CPU was stalled due to switches from DSB to MITE pipelines",
874*8358b122SIan Rogers        "MetricExpr": "DSB2MITE_SWITCHES.PENALTY_CYCLES / CPU_CLK_UNHALTED.THREAD",
875*8358b122SIan Rogers        "MetricGroup": "DSBmiss;FetchLat;TopdownL3;tma_L3_group;tma_fetch_latency_group",
876*8358b122SIan Rogers        "MetricName": "tma_dsb_switches",
877*8358b122SIan 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.",
878*8358b122SIan Rogers        "ScaleUnit": "100%"
879*8358b122SIan Rogers    },
880*8358b122SIan Rogers    {
881*8358b122SIan Rogers        "BriefDescription": "This metric represents fraction of cycles CPU was stalled due to Length Changing Prefixes (LCPs)",
882*8358b122SIan Rogers        "MetricExpr": "ILD_STALL.LCP / CPU_CLK_UNHALTED.THREAD",
883*8358b122SIan Rogers        "MetricGroup": "FetchLat;TopdownL3;tma_L3_group;tma_fetch_latency_group",
884*8358b122SIan Rogers        "MetricName": "tma_lcp",
885*8358b122SIan 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.",
886*8358b122SIan Rogers        "ScaleUnit": "100%"
887*8358b122SIan Rogers    },
888*8358b122SIan Rogers    {
889*8358b122SIan 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)",
890*8358b122SIan Rogers        "MetricExpr": "2 * IDQ.MS_SWITCHES / CPU_CLK_UNHALTED.THREAD",
891*8358b122SIan Rogers        "MetricGroup": "FetchLat;MicroSeq;TopdownL3;tma_L3_group;tma_fetch_latency_group",
892*8358b122SIan Rogers        "MetricName": "tma_ms_switches",
893*8358b122SIan 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.",
894*8358b122SIan Rogers        "ScaleUnit": "100%"
895*8358b122SIan Rogers    },
896*8358b122SIan Rogers    {
897*8358b122SIan Rogers        "BriefDescription": "This metric represents fraction of slots the CPU was stalled due to Frontend bandwidth issues",
898*8358b122SIan Rogers        "MetricExpr": "tma_frontend_bound - tma_fetch_latency",
899*8358b122SIan Rogers        "MetricGroup": "FetchBW;Frontend;TopdownL2;tma_L2_group;tma_L2_group;tma_frontend_bound_group",
900*8358b122SIan Rogers        "MetricName": "tma_fetch_bandwidth",
901*8358b122SIan 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.",
902*8358b122SIan Rogers        "ScaleUnit": "100%"
903*8358b122SIan Rogers    },
904*8358b122SIan Rogers    {
905*8358b122SIan Rogers        "BriefDescription": "This metric represents Core fraction of cycles in which CPU was likely limited due to the MITE pipeline (the legacy decode pipeline)",
906*8358b122SIan Rogers        "MetricExpr": "(IDQ.ALL_MITE_CYCLES_ANY_UOPS - IDQ.ALL_MITE_CYCLES_4_UOPS) / CORE_CLKS / 2",
907*8358b122SIan Rogers        "MetricGroup": "DSBmiss;FetchBW;TopdownL3;tma_L3_group;tma_fetch_bandwidth_group",
908*8358b122SIan Rogers        "MetricName": "tma_mite",
909*8358b122SIan 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.",
910*8358b122SIan Rogers        "ScaleUnit": "100%"
911*8358b122SIan Rogers    },
912*8358b122SIan Rogers    {
913*8358b122SIan Rogers        "BriefDescription": "This metric represents fraction of cycles where decoder-0 was the only active decoder",
914*8358b122SIan Rogers        "MetricExpr": "(cpu@INST_DECODED.DECODERS\\,cmask\\=0x1@ - cpu@INST_DECODED.DECODERS\\,cmask\\=0x2@) / CORE_CLKS",
915*8358b122SIan Rogers        "MetricGroup": "DSBmiss;FetchBW;TopdownL4;tma_L4_group;tma_mite_group",
916*8358b122SIan Rogers        "MetricName": "tma_decoder0_alone",
917*8358b122SIan Rogers        "ScaleUnit": "100%"
918*8358b122SIan Rogers    },
919*8358b122SIan Rogers    {
920*8358b122SIan Rogers        "BriefDescription": "This metric represents Core fraction of cycles in which CPU was likely limited due to DSB (decoded uop cache) fetch pipeline",
921*8358b122SIan Rogers        "MetricExpr": "(IDQ.ALL_DSB_CYCLES_ANY_UOPS - IDQ.ALL_DSB_CYCLES_4_UOPS) / CORE_CLKS / 2",
922*8358b122SIan Rogers        "MetricGroup": "DSB;FetchBW;TopdownL3;tma_L3_group;tma_fetch_bandwidth_group",
923*8358b122SIan Rogers        "MetricName": "tma_dsb",
924*8358b122SIan 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.",
925*8358b122SIan Rogers        "ScaleUnit": "100%"
926*8358b122SIan Rogers    },
927*8358b122SIan Rogers    {
928*8358b122SIan Rogers        "BriefDescription": "This category represents fraction of slots wasted due to incorrect speculations",
929*8358b122SIan 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",
930*8358b122SIan Rogers        "MetricGroup": "TopdownL1;tma_L1_group;tma_L1_group",
931*8358b122SIan Rogers        "MetricName": "tma_bad_speculation",
932*8358b122SIan 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.",
933*8358b122SIan Rogers        "ScaleUnit": "100%"
934*8358b122SIan Rogers    },
935*8358b122SIan Rogers    {
936*8358b122SIan Rogers        "BriefDescription": "This metric represents fraction of slots the CPU has wasted due to Branch Misprediction",
937*8358b122SIan Rogers        "MetricExpr": "BR_MISP_RETIRED.ALL_BRANCHES / (BR_MISP_RETIRED.ALL_BRANCHES + MACHINE_CLEARS.COUNT) * tma_bad_speculation",
938*8358b122SIan Rogers        "MetricGroup": "BadSpec;BrMispredicts;TopdownL2;tma_L2_group;tma_L2_group;tma_bad_speculation_group",
939*8358b122SIan Rogers        "MetricName": "tma_branch_mispredicts",
940*8358b122SIan 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.",
941*8358b122SIan Rogers        "ScaleUnit": "100%"
942*8358b122SIan Rogers    },
943*8358b122SIan Rogers    {
944*8358b122SIan Rogers        "BriefDescription": "This metric represents fraction of slots the CPU has wasted due to Machine Clears",
945*8358b122SIan Rogers        "MetricExpr": "tma_bad_speculation - tma_branch_mispredicts",
946*8358b122SIan Rogers        "MetricGroup": "BadSpec;MachineClears;TopdownL2;tma_L2_group;tma_L2_group;tma_bad_speculation_group",
947*8358b122SIan Rogers        "MetricName": "tma_machine_clears",
948*8358b122SIan 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.",
949*8358b122SIan Rogers        "ScaleUnit": "100%"
950*8358b122SIan Rogers    },
951*8358b122SIan Rogers    {
952*8358b122SIan 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",
953*8358b122SIan 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",
954*8358b122SIan Rogers        "MetricGroup": "TopdownL1;tma_L1_group;tma_L1_group",
955*8358b122SIan Rogers        "MetricName": "tma_backend_bound",
956*8358b122SIan 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.",
957*8358b122SIan Rogers        "ScaleUnit": "100%"
958*8358b122SIan Rogers    },
959*8358b122SIan Rogers    {
960*8358b122SIan Rogers        "BriefDescription": "This metric represents fraction of slots the Memory subsystem within the Backend was a bottleneck",
961*8358b122SIan Rogers        "MetricExpr": "(CYCLE_ACTIVITY.STALLS_MEM_ANY + EXE_ACTIVITY.BOUND_ON_STORES) / (CYCLE_ACTIVITY.STALLS_TOTAL + (EXE_ACTIVITY.1_PORTS_UTIL + UOPS_RETIRED.RETIRE_SLOTS / SLOTS * EXE_ACTIVITY.2_PORTS_UTIL) + EXE_ACTIVITY.BOUND_ON_STORES) * tma_backend_bound",
962*8358b122SIan Rogers        "MetricGroup": "Backend;TopdownL2;tma_L2_group;tma_L2_group;tma_backend_bound_group",
963*8358b122SIan Rogers        "MetricName": "tma_memory_bound",
964*8358b122SIan 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).",
965*8358b122SIan Rogers        "ScaleUnit": "100%"
966*8358b122SIan Rogers    },
967*8358b122SIan Rogers    {
968*8358b122SIan Rogers        "BriefDescription": "This metric estimates how often the CPU was stalled without loads missing the L1 data cache",
969*8358b122SIan Rogers        "MetricExpr": "max((CYCLE_ACTIVITY.STALLS_MEM_ANY - CYCLE_ACTIVITY.STALLS_L1D_MISS) / CPU_CLK_UNHALTED.THREAD, 0)",
970*8358b122SIan Rogers        "MetricGroup": "CacheMisses;MemoryBound;TmaL3mem;TopdownL3;tma_L3_group;tma_memory_bound_group",
971*8358b122SIan Rogers        "MetricName": "tma_l1_bound",
972*8358b122SIan 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.",
973*8358b122SIan Rogers        "ScaleUnit": "100%"
974*8358b122SIan Rogers    },
975*8358b122SIan Rogers    {
976*8358b122SIan Rogers        "BriefDescription": "This metric roughly estimates the fraction of cycles where the Data TLB (DTLB) was missed by load accesses",
977*8358b122SIan Rogers        "MetricExpr": "min(9 * cpu@DTLB_LOAD_MISSES.STLB_HIT\\,cmask\\=0x1@ + DTLB_LOAD_MISSES.WALK_ACTIVE, max(CYCLE_ACTIVITY.CYCLES_MEM_ANY - CYCLE_ACTIVITY.CYCLES_L1D_MISS, 0)) / CPU_CLK_UNHALTED.THREAD",
978*8358b122SIan Rogers        "MetricGroup": "MemoryTLB;TopdownL4;tma_L4_group;tma_l1_bound_group",
979*8358b122SIan Rogers        "MetricName": "tma_dtlb_load",
980*8358b122SIan 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.",
981*8358b122SIan Rogers        "ScaleUnit": "100%"
982*8358b122SIan Rogers    },
983*8358b122SIan Rogers    {
984*8358b122SIan 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)",
985*8358b122SIan Rogers        "MetricExpr": "tma_dtlb_load - tma_load_stlb_miss",
986*8358b122SIan Rogers        "MetricGroup": "MemoryTLB;TopdownL5;tma_L5_group;tma_dtlb_load_group",
987*8358b122SIan Rogers        "MetricName": "tma_load_stlb_hit",
988*8358b122SIan Rogers        "ScaleUnit": "100%"
989*8358b122SIan Rogers    },
990*8358b122SIan Rogers    {
991*8358b122SIan 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",
992*8358b122SIan Rogers        "MetricExpr": "DTLB_LOAD_MISSES.WALK_ACTIVE / CPU_CLK_UNHALTED.THREAD",
993*8358b122SIan Rogers        "MetricGroup": "MemoryTLB;TopdownL5;tma_L5_group;tma_dtlb_load_group",
994*8358b122SIan Rogers        "MetricName": "tma_load_stlb_miss",
995*8358b122SIan Rogers        "ScaleUnit": "100%"
996*8358b122SIan Rogers    },
997*8358b122SIan Rogers    {
998*8358b122SIan 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",
999*8358b122SIan Rogers        "MetricExpr": "min(13 * LD_BLOCKS.STORE_FORWARD / CPU_CLK_UNHALTED.THREAD, 1)",
1000*8358b122SIan Rogers        "MetricGroup": "TopdownL4;tma_L4_group;tma_l1_bound_group",
1001*8358b122SIan Rogers        "MetricName": "tma_store_fwd_blk",
1002*8358b122SIan 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.",
1003*8358b122SIan Rogers        "ScaleUnit": "100%"
1004*8358b122SIan Rogers    },
1005*8358b122SIan Rogers    {
1006*8358b122SIan Rogers        "BriefDescription": "This metric represents fraction of cycles the CPU spent handling cache misses due to lock operations",
1007*8358b122SIan Rogers        "MetricExpr": "min((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))) / CPU_CLK_UNHALTED.THREAD, 1)",
1008*8358b122SIan Rogers        "MetricGroup": "Offcore;TopdownL4;tma_L4_group;tma_l1_bound_group",
1009*8358b122SIan Rogers        "MetricName": "tma_lock_latency",
1010*8358b122SIan 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.",
1011*8358b122SIan Rogers        "ScaleUnit": "100%"
1012*8358b122SIan Rogers    },
1013*8358b122SIan Rogers    {
1014*8358b122SIan Rogers        "BriefDescription": "This metric estimates fraction of cycles handling memory load split accesses - load that cross 64-byte cache line boundary. ",
1015*8358b122SIan Rogers        "MetricExpr": "min(Load_Miss_Real_Latency * LD_BLOCKS.NO_SR / CPU_CLK_UNHALTED.THREAD, 1)",
1016*8358b122SIan Rogers        "MetricGroup": "TopdownL4;tma_L4_group;tma_l1_bound_group",
1017*8358b122SIan Rogers        "MetricName": "tma_split_loads",
1018*8358b122SIan Rogers        "ScaleUnit": "100%"
1019*8358b122SIan Rogers    },
1020*8358b122SIan Rogers    {
1021*8358b122SIan Rogers        "BriefDescription": "This metric estimates how often memory load accesses were aliased by preceding stores (in program order) with a 4K address offset",
1022*8358b122SIan Rogers        "MetricExpr": "LD_BLOCKS_PARTIAL.ADDRESS_ALIAS / CPU_CLK_UNHALTED.THREAD",
1023*8358b122SIan Rogers        "MetricGroup": "TopdownL4;tma_L4_group;tma_l1_bound_group",
1024*8358b122SIan Rogers        "MetricName": "tma_4k_aliasing",
1025*8358b122SIan 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).",
1026*8358b122SIan Rogers        "ScaleUnit": "100%"
1027*8358b122SIan Rogers    },
1028*8358b122SIan Rogers    {
1029*8358b122SIan Rogers        "BriefDescription": "This metric does a *rough estimation* of how often L1D Fill Buffer unavailability limited additional L1D miss memory access requests to proceed",
1030*8358b122SIan Rogers        "MetricExpr": "Load_Miss_Real_Latency * cpu@L1D_PEND_MISS.FB_FULL\\,cmask\\=0x1@ / CPU_CLK_UNHALTED.THREAD",
1031*8358b122SIan Rogers        "MetricGroup": "MemoryBW;TopdownL4;tma_L4_group;tma_l1_bound_group",
1032*8358b122SIan Rogers        "MetricName": "tma_fb_full",
1033*8358b122SIan 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).",
1034*8358b122SIan Rogers        "ScaleUnit": "100%"
1035*8358b122SIan Rogers    },
1036*8358b122SIan Rogers    {
1037*8358b122SIan Rogers        "BriefDescription": "This metric estimates how often the CPU was stalled due to L2 cache accesses by loads",
1038*8358b122SIan 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\\=0x1@) * ((CYCLE_ACTIVITY.STALLS_L1D_MISS - CYCLE_ACTIVITY.STALLS_L2_MISS) / CPU_CLK_UNHALTED.THREAD)",
1039*8358b122SIan Rogers        "MetricGroup": "CacheMisses;MemoryBound;TmaL3mem;TopdownL3;tma_L3_group;tma_memory_bound_group",
1040*8358b122SIan Rogers        "MetricName": "tma_l2_bound",
1041*8358b122SIan 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.",
1042*8358b122SIan Rogers        "ScaleUnit": "100%"
1043*8358b122SIan Rogers    },
1044*8358b122SIan Rogers    {
1045*8358b122SIan Rogers        "BriefDescription": "This metric estimates how often the CPU was stalled due to loads accesses to L3 cache or contended with a sibling Core",
1046*8358b122SIan Rogers        "MetricExpr": "(CYCLE_ACTIVITY.STALLS_L2_MISS - CYCLE_ACTIVITY.STALLS_L3_MISS) / CPU_CLK_UNHALTED.THREAD",
1047*8358b122SIan Rogers        "MetricGroup": "CacheMisses;MemoryBound;TmaL3mem;TopdownL3;tma_L3_group;tma_memory_bound_group",
1048*8358b122SIan Rogers        "MetricName": "tma_l3_bound",
1049*8358b122SIan 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.",
1050*8358b122SIan Rogers        "ScaleUnit": "100%"
1051*8358b122SIan Rogers    },
1052*8358b122SIan Rogers    {
1053*8358b122SIan Rogers        "BriefDescription": "This metric estimates fraction of cycles while the memory subsystem was handling synchronizations due to contested accesses",
1054*8358b122SIan Rogers        "MetricExpr": "min(((47.5 * (CPU_CLK_UNHALTED.THREAD / CPU_CLK_UNHALTED.REF_TSC * #SYSTEM_TSC_FREQ / 1e9 / (duration_time * 1e3 / 1e3)) - 3.5 * (CPU_CLK_UNHALTED.THREAD / CPU_CLK_UNHALTED.REF_TSC * #SYSTEM_TSC_FREQ / 1e9 / (duration_time * 1e3 / 1e3))) * (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))) + (47.5 * (CPU_CLK_UNHALTED.THREAD / CPU_CLK_UNHALTED.REF_TSC * #SYSTEM_TSC_FREQ / 1e9 / (duration_time * 1e3 / 1e3)) - 3.5 * (CPU_CLK_UNHALTED.THREAD / CPU_CLK_UNHALTED.REF_TSC * #SYSTEM_TSC_FREQ / 1e9 / (duration_time * 1e3 / 1e3))) * MEM_LOAD_L3_HIT_RETIRED.XSNP_MISS) * (1 + MEM_LOAD_RETIRED.FB_HIT / MEM_LOAD_RETIRED.L1_MISS / 2) / CPU_CLK_UNHALTED.THREAD, 1)",
1055*8358b122SIan Rogers        "MetricGroup": "DataSharing;Offcore;Snoop;TopdownL4;tma_L4_group;tma_l3_bound_group",
1056*8358b122SIan Rogers        "MetricName": "tma_contested_accesses",
1057*8358b122SIan 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.",
1058*8358b122SIan Rogers        "ScaleUnit": "100%"
1059*8358b122SIan Rogers    },
1060*8358b122SIan Rogers    {
1061*8358b122SIan Rogers        "BriefDescription": "This metric estimates fraction of cycles while the memory subsystem was handling synchronizations due to data-sharing accesses",
1062*8358b122SIan Rogers        "MetricExpr": "min((47.5 * (CPU_CLK_UNHALTED.THREAD / CPU_CLK_UNHALTED.REF_TSC * #SYSTEM_TSC_FREQ / 1e9 / (duration_time * 1e3 / 1e3)) - 3.5 * (CPU_CLK_UNHALTED.THREAD / CPU_CLK_UNHALTED.REF_TSC * #SYSTEM_TSC_FREQ / 1e9 / (duration_time * 1e3 / 1e3))) * (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) / CPU_CLK_UNHALTED.THREAD, 1)",
1063*8358b122SIan Rogers        "MetricGroup": "Offcore;Snoop;TopdownL4;tma_L4_group;tma_l3_bound_group",
1064*8358b122SIan Rogers        "MetricName": "tma_data_sharing",
1065*8358b122SIan 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.",
1066*8358b122SIan Rogers        "ScaleUnit": "100%"
1067*8358b122SIan Rogers    },
1068*8358b122SIan Rogers    {
1069*8358b122SIan Rogers        "BriefDescription": "This metric represents fraction of cycles with demand load accesses that hit the L3 cache under unloaded scenarios (possibly L3 latency limited)",
1070*8358b122SIan Rogers        "MetricExpr": "min((20.5 * (CPU_CLK_UNHALTED.THREAD / CPU_CLK_UNHALTED.REF_TSC * #SYSTEM_TSC_FREQ / 1e9 / (duration_time * 1e3 / 1e3)) - 3.5 * (CPU_CLK_UNHALTED.THREAD / CPU_CLK_UNHALTED.REF_TSC * #SYSTEM_TSC_FREQ / 1e9 / (duration_time * 1e3 / 1e3))) * MEM_LOAD_RETIRED.L3_HIT * (1 + MEM_LOAD_RETIRED.FB_HIT / MEM_LOAD_RETIRED.L1_MISS / 2) / CPU_CLK_UNHALTED.THREAD, 1)",
1071*8358b122SIan Rogers        "MetricGroup": "MemoryLat;TopdownL4;tma_L4_group;tma_l3_bound_group",
1072*8358b122SIan Rogers        "MetricName": "tma_l3_hit_latency",
1073*8358b122SIan 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.",
1074*8358b122SIan Rogers        "ScaleUnit": "100%"
1075*8358b122SIan Rogers    },
1076*8358b122SIan Rogers    {
1077*8358b122SIan 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)",
1078*8358b122SIan Rogers        "MetricExpr": "(OFFCORE_REQUESTS_BUFFER.SQ_FULL / 2 if #SMT_on else OFFCORE_REQUESTS_BUFFER.SQ_FULL) / CORE_CLKS",
1079*8358b122SIan Rogers        "MetricGroup": "MemoryBW;Offcore;TopdownL4;tma_L4_group;tma_l3_bound_group",
1080*8358b122SIan Rogers        "MetricName": "tma_sq_full",
1081*8358b122SIan 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.",
1082*8358b122SIan Rogers        "ScaleUnit": "100%"
1083*8358b122SIan Rogers    },
1084*8358b122SIan Rogers    {
1085*8358b122SIan Rogers        "BriefDescription": "This metric estimates how often the CPU was stalled on accesses to external memory (DRAM) by loads",
1086*8358b122SIan Rogers        "MetricExpr": "min(CYCLE_ACTIVITY.STALLS_L3_MISS / CPU_CLK_UNHALTED.THREAD + (CYCLE_ACTIVITY.STALLS_L1D_MISS - CYCLE_ACTIVITY.STALLS_L2_MISS) / CPU_CLK_UNHALTED.THREAD - tma_l2_bound - min(((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 / CPU_CLK_UNHALTED.THREAD + (CYCLE_ACTIVITY.STALLS_L1D_MISS - CYCLE_ACTIVITY.STALLS_L2_MISS) / CPU_CLK_UNHALTED.THREAD - tma_l2_bound) if 1e6 * (MEM_LOAD_L3_MISS_RETIRED.REMOTE_PMM + MEM_LOAD_RETIRED.LOCAL_PMM) > MEM_LOAD_RETIRED.L1_MISS else 0), 1), 1)",
1087*8358b122SIan Rogers        "MetricGroup": "MemoryBound;TmaL3mem;TopdownL3;tma_L3_group;tma_memory_bound_group",
1088*8358b122SIan Rogers        "MetricName": "tma_dram_bound",
1089*8358b122SIan 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.",
1090*8358b122SIan Rogers        "ScaleUnit": "100%"
1091*8358b122SIan Rogers    },
1092*8358b122SIan Rogers    {
1093*8358b122SIan 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)",
1094*8358b122SIan Rogers        "MetricExpr": "min(CPU_CLK_UNHALTED.THREAD, cpu@OFFCORE_REQUESTS_OUTSTANDING.ALL_DATA_RD\\,cmask\\=0x4@) / CPU_CLK_UNHALTED.THREAD",
1095*8358b122SIan Rogers        "MetricGroup": "MemoryBW;Offcore;TopdownL4;tma_L4_group;tma_dram_bound_group",
1096*8358b122SIan Rogers        "MetricName": "tma_mem_bandwidth",
1097*8358b122SIan 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).",
1098*8358b122SIan Rogers        "ScaleUnit": "100%"
1099*8358b122SIan Rogers    },
1100*8358b122SIan Rogers    {
1101*8358b122SIan Rogers        "BriefDescription": "This metric estimates fraction of cycles where the performance was likely hurt due to latency from external memory (DRAM)",
1102*8358b122SIan Rogers        "MetricExpr": "min(CPU_CLK_UNHALTED.THREAD, OFFCORE_REQUESTS_OUTSTANDING.CYCLES_WITH_DATA_RD) / CPU_CLK_UNHALTED.THREAD - tma_mem_bandwidth",
1103*8358b122SIan Rogers        "MetricGroup": "MemoryLat;Offcore;TopdownL4;tma_L4_group;tma_dram_bound_group",
1104*8358b122SIan Rogers        "MetricName": "tma_mem_latency",
1105*8358b122SIan 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).",
1106*8358b122SIan Rogers        "ScaleUnit": "100%"
1107*8358b122SIan Rogers    },
1108*8358b122SIan Rogers    {
1109*8358b122SIan Rogers        "BriefDescription": "This metric estimates fraction of cycles while the memory subsystem was handling loads from local memory",
1110*8358b122SIan Rogers        "MetricExpr": "min((80 * (CPU_CLK_UNHALTED.THREAD / CPU_CLK_UNHALTED.REF_TSC * #SYSTEM_TSC_FREQ / 1e9 / (duration_time * 1e3 / 1e3)) - 20.5 * (CPU_CLK_UNHALTED.THREAD / CPU_CLK_UNHALTED.REF_TSC * #SYSTEM_TSC_FREQ / 1e9 / (duration_time * 1e3 / 1e3))) * MEM_LOAD_L3_MISS_RETIRED.LOCAL_DRAM * (1 + MEM_LOAD_RETIRED.FB_HIT / MEM_LOAD_RETIRED.L1_MISS / 2) / CPU_CLK_UNHALTED.THREAD, 1)",
1111*8358b122SIan Rogers        "MetricGroup": "Server;TopdownL5;tma_L5_group;tma_mem_latency_group",
1112*8358b122SIan Rogers        "MetricName": "tma_local_dram",
1113*8358b122SIan 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.",
1114*8358b122SIan Rogers        "ScaleUnit": "100%"
1115*8358b122SIan Rogers    },
1116*8358b122SIan Rogers    {
1117*8358b122SIan Rogers        "BriefDescription": "This metric estimates fraction of cycles while the memory subsystem was handling loads from remote memory",
1118*8358b122SIan Rogers        "MetricExpr": "min((147.5 * (CPU_CLK_UNHALTED.THREAD / CPU_CLK_UNHALTED.REF_TSC * #SYSTEM_TSC_FREQ / 1e9 / (duration_time * 1e3 / 1e3)) - 20.5 * (CPU_CLK_UNHALTED.THREAD / CPU_CLK_UNHALTED.REF_TSC * #SYSTEM_TSC_FREQ / 1e9 / (duration_time * 1e3 / 1e3))) * MEM_LOAD_L3_MISS_RETIRED.REMOTE_DRAM * (1 + MEM_LOAD_RETIRED.FB_HIT / MEM_LOAD_RETIRED.L1_MISS / 2) / CPU_CLK_UNHALTED.THREAD, 1)",
1119*8358b122SIan Rogers        "MetricGroup": "Server;Snoop;TopdownL5;tma_L5_group;tma_mem_latency_group",
1120*8358b122SIan Rogers        "MetricName": "tma_remote_dram",
1121*8358b122SIan 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",
1122*8358b122SIan Rogers        "ScaleUnit": "100%"
1123*8358b122SIan Rogers    },
1124*8358b122SIan Rogers    {
1125*8358b122SIan Rogers        "BriefDescription": "This metric estimates fraction of cycles while the memory subsystem was handling loads from remote cache in other sockets including synchronizations issues",
1126*8358b122SIan Rogers        "MetricExpr": "min(((110 * (CPU_CLK_UNHALTED.THREAD / CPU_CLK_UNHALTED.REF_TSC * #SYSTEM_TSC_FREQ / 1e9 / (duration_time * 1e3 / 1e3)) - 20.5 * (CPU_CLK_UNHALTED.THREAD / CPU_CLK_UNHALTED.REF_TSC * #SYSTEM_TSC_FREQ / 1e9 / (duration_time * 1e3 / 1e3))) * MEM_LOAD_L3_MISS_RETIRED.REMOTE_HITM + (110 * (CPU_CLK_UNHALTED.THREAD / CPU_CLK_UNHALTED.REF_TSC * #SYSTEM_TSC_FREQ / 1e9 / (duration_time * 1e3 / 1e3)) - 20.5 * (CPU_CLK_UNHALTED.THREAD / CPU_CLK_UNHALTED.REF_TSC * #SYSTEM_TSC_FREQ / 1e9 / (duration_time * 1e3 / 1e3))) * MEM_LOAD_L3_MISS_RETIRED.REMOTE_FWD) * (1 + MEM_LOAD_RETIRED.FB_HIT / MEM_LOAD_RETIRED.L1_MISS / 2) / CPU_CLK_UNHALTED.THREAD, 1)",
1127*8358b122SIan Rogers        "MetricGroup": "Offcore;Server;Snoop;TopdownL5;tma_L5_group;tma_mem_latency_group",
1128*8358b122SIan Rogers        "MetricName": "tma_remote_cache",
1129*8358b122SIan 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",
1130*8358b122SIan Rogers        "ScaleUnit": "100%"
1131*8358b122SIan Rogers    },
1132*8358b122SIan Rogers    {
1133*8358b122SIan 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",
1134*8358b122SIan Rogers        "MetricExpr": "min(((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 / CPU_CLK_UNHALTED.THREAD + (CYCLE_ACTIVITY.STALLS_L1D_MISS - CYCLE_ACTIVITY.STALLS_L2_MISS) / CPU_CLK_UNHALTED.THREAD - tma_l2_bound) if 1e6 * (MEM_LOAD_L3_MISS_RETIRED.REMOTE_PMM + MEM_LOAD_RETIRED.LOCAL_PMM) > MEM_LOAD_RETIRED.L1_MISS else 0), 1)",
1135*8358b122SIan Rogers        "MetricGroup": "MemoryBound;Server;TmaL3mem;TopdownL3;tma_L3_group;tma_memory_bound_group",
1136*8358b122SIan Rogers        "MetricName": "tma_pmm_bound",
1137*8358b122SIan 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. ",
1138*8358b122SIan Rogers        "ScaleUnit": "100%"
1139*8358b122SIan Rogers    },
1140*8358b122SIan Rogers    {
1141*8358b122SIan 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",
1142*8358b122SIan Rogers        "MetricExpr": "EXE_ACTIVITY.BOUND_ON_STORES / CPU_CLK_UNHALTED.THREAD",
1143*8358b122SIan Rogers        "MetricGroup": "MemoryBound;TmaL3mem;TopdownL3;tma_L3_group;tma_memory_bound_group",
1144*8358b122SIan Rogers        "MetricName": "tma_store_bound",
1145*8358b122SIan 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.",
1146*8358b122SIan Rogers        "ScaleUnit": "100%"
1147*8358b122SIan Rogers    },
1148*8358b122SIan Rogers    {
1149*8358b122SIan Rogers        "BriefDescription": "This metric estimates fraction of cycles the CPU spent handling L1D store misses",
1150*8358b122SIan 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)) / CPU_CLK_UNHALTED.THREAD",
1151*8358b122SIan Rogers        "MetricGroup": "MemoryLat;Offcore;TopdownL4;tma_L4_group;tma_store_bound_group",
1152*8358b122SIan Rogers        "MetricName": "tma_store_latency",
1153*8358b122SIan 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)",
1154*8358b122SIan Rogers        "ScaleUnit": "100%"
1155*8358b122SIan Rogers    },
1156*8358b122SIan Rogers    {
1157*8358b122SIan Rogers        "BriefDescription": "This metric roughly estimates how often CPU was handling synchronizations due to False Sharing",
1158*8358b122SIan Rogers        "MetricExpr": "min((110 * (CPU_CLK_UNHALTED.THREAD / CPU_CLK_UNHALTED.REF_TSC * #SYSTEM_TSC_FREQ / 1e9 / (duration_time * 1e3 / 1e3)) * (OCR.DEMAND_RFO.L3_MISS.REMOTE_HITM + OCR.PF_L2_RFO.L3_MISS.REMOTE_HITM) + 47.5 * (CPU_CLK_UNHALTED.THREAD / CPU_CLK_UNHALTED.REF_TSC * #SYSTEM_TSC_FREQ / 1e9 / (duration_time * 1e3 / 1e3)) * (OCR.DEMAND_RFO.L3_HIT.HITM_OTHER_CORE + OCR.PF_L2_RFO.L3_HIT.HITM_OTHER_CORE)) / CPU_CLK_UNHALTED.THREAD, 1)",
1159*8358b122SIan Rogers        "MetricGroup": "DataSharing;Offcore;Snoop;TopdownL4;tma_L4_group;tma_store_bound_group",
1160*8358b122SIan Rogers        "MetricName": "tma_false_sharing",
1161*8358b122SIan 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. ",
1162*8358b122SIan Rogers        "ScaleUnit": "100%"
1163*8358b122SIan Rogers    },
1164*8358b122SIan Rogers    {
1165*8358b122SIan Rogers        "BriefDescription": "This metric represents rate of split store accesses",
1166*8358b122SIan Rogers        "MetricExpr": "MEM_INST_RETIRED.SPLIT_STORES / CORE_CLKS",
1167*8358b122SIan Rogers        "MetricGroup": "TopdownL4;tma_L4_group;tma_store_bound_group",
1168*8358b122SIan Rogers        "MetricName": "tma_split_stores",
1169*8358b122SIan Rogers        "PublicDescription": "This metric represents rate of split store accesses.  Consider aligning your data to the 64-byte cache line granularity.",
1170*8358b122SIan Rogers        "ScaleUnit": "100%"
1171*8358b122SIan Rogers    },
1172*8358b122SIan Rogers    {
1173*8358b122SIan Rogers        "BriefDescription": "This metric roughly estimates the fraction of cycles spent handling first-level data TLB store misses",
1174*8358b122SIan Rogers        "MetricExpr": "min((9 * cpu@DTLB_STORE_MISSES.STLB_HIT\\,cmask\\=0x1@ + DTLB_STORE_MISSES.WALK_ACTIVE) / CORE_CLKS, 1)",
1175*8358b122SIan Rogers        "MetricGroup": "MemoryTLB;TopdownL4;tma_L4_group;tma_store_bound_group",
1176*8358b122SIan Rogers        "MetricName": "tma_dtlb_store",
1177*8358b122SIan 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.",
1178*8358b122SIan Rogers        "ScaleUnit": "100%"
1179*8358b122SIan Rogers    },
1180*8358b122SIan Rogers    {
1181*8358b122SIan 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)",
1182*8358b122SIan Rogers        "MetricExpr": "tma_dtlb_store - DTLB_STORE_MISSES.WALK_ACTIVE / CORE_CLKS",
1183*8358b122SIan Rogers        "MetricGroup": "MemoryTLB;TopdownL5;tma_L5_group;tma_dtlb_store_group",
1184*8358b122SIan Rogers        "MetricName": "tma_store_stlb_hit",
1185*8358b122SIan Rogers        "ScaleUnit": "100%"
1186*8358b122SIan Rogers    },
1187*8358b122SIan Rogers    {
1188*8358b122SIan Rogers        "BriefDescription": "This metric estimates the fraction of cycles where the STLB was missed by store accesses, performing a hardware page walk",
1189*8358b122SIan Rogers        "MetricExpr": "DTLB_STORE_MISSES.WALK_ACTIVE / CORE_CLKS",
1190*8358b122SIan Rogers        "MetricGroup": "MemoryTLB;TopdownL5;tma_L5_group;tma_dtlb_store_group",
1191*8358b122SIan Rogers        "MetricName": "tma_store_stlb_miss",
1192*8358b122SIan Rogers        "ScaleUnit": "100%"
1193*8358b122SIan Rogers    },
1194*8358b122SIan Rogers    {
1195*8358b122SIan Rogers        "BriefDescription": "This metric represents fraction of slots where Core non-memory issues were of a bottleneck",
1196*8358b122SIan Rogers        "MetricExpr": "tma_backend_bound - tma_memory_bound",
1197*8358b122SIan Rogers        "MetricGroup": "Backend;Compute;TopdownL2;tma_L2_group;tma_L2_group;tma_backend_bound_group",
1198*8358b122SIan Rogers        "MetricName": "tma_core_bound",
1199*8358b122SIan 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).",
1200*8358b122SIan Rogers        "ScaleUnit": "100%"
1201*8358b122SIan Rogers    },
1202*8358b122SIan Rogers    {
1203*8358b122SIan Rogers        "BriefDescription": "This metric represents fraction of cycles where the Divider unit was active",
1204*8358b122SIan Rogers        "MetricExpr": "ARITH.DIVIDER_ACTIVE / CPU_CLK_UNHALTED.THREAD",
1205*8358b122SIan Rogers        "MetricGroup": "TopdownL3;tma_L3_group;tma_core_bound_group",
1206*8358b122SIan Rogers        "MetricName": "tma_divider",
1207*8358b122SIan 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.",
1208*8358b122SIan Rogers        "ScaleUnit": "100%"
1209*8358b122SIan Rogers    },
1210*8358b122SIan Rogers    {
1211*8358b122SIan Rogers        "BriefDescription": "This metric estimates fraction of cycles the CPU performance was potentially limited due to Core computation issues (non divider-related)",
1212*8358b122SIan Rogers        "MetricExpr": "((EXE_ACTIVITY.EXE_BOUND_0_PORTS + (EXE_ACTIVITY.1_PORTS_UTIL + UOPS_RETIRED.RETIRE_SLOTS / SLOTS * EXE_ACTIVITY.2_PORTS_UTIL)) / CPU_CLK_UNHALTED.THREAD if ARITH.DIVIDER_ACTIVE < CYCLE_ACTIVITY.STALLS_TOTAL - CYCLE_ACTIVITY.STALLS_MEM_ANY else (EXE_ACTIVITY.1_PORTS_UTIL + UOPS_RETIRED.RETIRE_SLOTS / SLOTS * EXE_ACTIVITY.2_PORTS_UTIL) / CPU_CLK_UNHALTED.THREAD)",
1213*8358b122SIan Rogers        "MetricGroup": "PortsUtil;TopdownL3;tma_L3_group;tma_core_bound_group",
1214*8358b122SIan Rogers        "MetricName": "tma_ports_utilization",
1215*8358b122SIan 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.",
1216*8358b122SIan Rogers        "ScaleUnit": "100%"
1217*8358b122SIan Rogers    },
1218*8358b122SIan Rogers    {
1219*8358b122SIan 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)",
1220*8358b122SIan Rogers        "MetricExpr": "(UOPS_EXECUTED.CORE_CYCLES_NONE / 2 if #SMT_on else CYCLE_ACTIVITY.STALLS_TOTAL - CYCLE_ACTIVITY.STALLS_MEM_ANY) / CORE_CLKS",
1221*8358b122SIan Rogers        "MetricGroup": "PortsUtil;TopdownL4;tma_L4_group;tma_ports_utilization_group",
1222*8358b122SIan Rogers        "MetricName": "tma_ports_utilized_0",
1223*8358b122SIan 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.",
1224*8358b122SIan Rogers        "ScaleUnit": "100%"
1225*8358b122SIan Rogers    },
1226*8358b122SIan Rogers    {
1227*8358b122SIan Rogers        "BriefDescription": "This metric represents fraction of cycles the CPU issue-pipeline was stalled due to serializing operations",
1228*8358b122SIan Rogers        "MetricExpr": "PARTIAL_RAT_STALLS.SCOREBOARD / CPU_CLK_UNHALTED.THREAD",
1229*8358b122SIan Rogers        "MetricGroup": "TopdownL5;tma_L5_group;tma_ports_utilized_0_group",
1230*8358b122SIan Rogers        "MetricName": "tma_serializing_operation",
1231*8358b122SIan 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.",
1232*8358b122SIan Rogers        "ScaleUnit": "100%"
1233*8358b122SIan Rogers    },
1234*8358b122SIan Rogers    {
1235*8358b122SIan Rogers        "BriefDescription": "This metric represents fraction of cycles the CPU was stalled due to PAUSE Instructions.",
1236*8358b122SIan Rogers        "MetricExpr": "40 * ROB_MISC_EVENTS.PAUSE_INST / CPU_CLK_UNHALTED.THREAD",
1237*8358b122SIan Rogers        "MetricGroup": "TopdownL6;tma_L6_group;tma_serializing_operation_group",
1238*8358b122SIan Rogers        "MetricName": "tma_slow_pause",
1239*8358b122SIan Rogers        "ScaleUnit": "100%"
1240*8358b122SIan Rogers    },
1241*8358b122SIan Rogers    {
1242*8358b122SIan Rogers        "BriefDescription": "The Mixing_Vectors metric gives the percentage of injected blend uops out of all uops issued",
1243*8358b122SIan Rogers        "MetricExpr": "min(CPU_CLK_UNHALTED.THREAD * UOPS_ISSUED.VECTOR_WIDTH_MISMATCH / UOPS_ISSUED.ANY, 1)",
1244*8358b122SIan Rogers        "MetricGroup": "TopdownL5;tma_L5_group;tma_ports_utilized_0_group",
1245*8358b122SIan Rogers        "MetricName": "tma_mixing_vectors",
1246*8358b122SIan 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.",
1247*8358b122SIan Rogers        "ScaleUnit": "100%"
1248*8358b122SIan Rogers    },
1249*8358b122SIan Rogers    {
1250*8358b122SIan 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)",
1251*8358b122SIan 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",
1252*8358b122SIan Rogers        "MetricGroup": "PortsUtil;TopdownL4;tma_L4_group;tma_ports_utilization_group",
1253*8358b122SIan Rogers        "MetricName": "tma_ports_utilized_1",
1254*8358b122SIan 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.",
1255*8358b122SIan Rogers        "ScaleUnit": "100%"
1256*8358b122SIan Rogers    },
1257*8358b122SIan Rogers    {
1258*8358b122SIan 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)",
1259*8358b122SIan 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",
1260*8358b122SIan Rogers        "MetricGroup": "PortsUtil;TopdownL4;tma_L4_group;tma_ports_utilization_group",
1261*8358b122SIan Rogers        "MetricName": "tma_ports_utilized_2",
1262*8358b122SIan 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.",
1263*8358b122SIan Rogers        "ScaleUnit": "100%"
1264*8358b122SIan Rogers    },
1265*8358b122SIan Rogers    {
1266*8358b122SIan 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).",
1267*8358b122SIan Rogers        "MetricExpr": "(UOPS_EXECUTED.CORE_CYCLES_GE_3 / 2 if #SMT_on else UOPS_EXECUTED.CORE_CYCLES_GE_3) / CORE_CLKS",
1268*8358b122SIan Rogers        "MetricGroup": "PortsUtil;TopdownL4;tma_L4_group;tma_ports_utilization_group",
1269*8358b122SIan Rogers        "MetricName": "tma_ports_utilized_3m",
1270*8358b122SIan Rogers        "ScaleUnit": "100%"
1271*8358b122SIan Rogers    },
1272*8358b122SIan Rogers    {
1273*8358b122SIan Rogers        "BriefDescription": "This metric represents Core fraction of cycles CPU dispatched uops on execution ports for ALU operations.",
1274*8358b122SIan Rogers        "MetricExpr": "(UOPS_DISPATCHED_PORT.PORT_0 + UOPS_DISPATCHED_PORT.PORT_1 + UOPS_DISPATCHED_PORT.PORT_5 + UOPS_DISPATCHED_PORT.PORT_6) / SLOTS",
1275*8358b122SIan Rogers        "MetricGroup": "TopdownL5;tma_L5_group;tma_ports_utilized_3m_group",
1276*8358b122SIan Rogers        "MetricName": "tma_alu_op_utilization",
1277*8358b122SIan Rogers        "ScaleUnit": "100%"
1278*8358b122SIan Rogers    },
1279*8358b122SIan Rogers    {
1280*8358b122SIan Rogers        "BriefDescription": "This metric represents Core fraction of cycles CPU dispatched uops on execution port 0 ([SNB+] ALU; [HSW+] ALU and 2nd branch)",
1281*8358b122SIan Rogers        "MetricExpr": "UOPS_DISPATCHED_PORT.PORT_0 / CORE_CLKS",
1282*8358b122SIan Rogers        "MetricGroup": "Compute;TopdownL6;tma_L6_group;tma_alu_op_utilization_group",
1283*8358b122SIan Rogers        "MetricName": "tma_port_0",
1284*8358b122SIan Rogers        "ScaleUnit": "100%"
1285*8358b122SIan Rogers    },
1286*8358b122SIan Rogers    {
1287*8358b122SIan Rogers        "BriefDescription": "This metric represents Core fraction of cycles CPU dispatched uops on execution port 1 (ALU)",
1288*8358b122SIan Rogers        "MetricExpr": "UOPS_DISPATCHED_PORT.PORT_1 / CORE_CLKS",
1289*8358b122SIan Rogers        "MetricGroup": "TopdownL6;tma_L6_group;tma_alu_op_utilization_group",
1290*8358b122SIan Rogers        "MetricName": "tma_port_1",
1291*8358b122SIan Rogers        "ScaleUnit": "100%"
1292*8358b122SIan Rogers    },
1293*8358b122SIan Rogers    {
1294*8358b122SIan Rogers        "BriefDescription": "This metric represents Core fraction of cycles CPU dispatched uops on execution port 5 ([SNB+] Branches and ALU; [HSW+] ALU)",
1295*8358b122SIan Rogers        "MetricExpr": "UOPS_DISPATCHED_PORT.PORT_5 / CORE_CLKS",
1296*8358b122SIan Rogers        "MetricGroup": "TopdownL6;tma_L6_group;tma_alu_op_utilization_group",
1297*8358b122SIan Rogers        "MetricName": "tma_port_5",
1298*8358b122SIan Rogers        "ScaleUnit": "100%"
1299*8358b122SIan Rogers    },
1300*8358b122SIan Rogers    {
1301*8358b122SIan Rogers        "BriefDescription": "This metric represents Core fraction of cycles CPU dispatched uops on execution port 6 ([HSW+]Primary Branch and simple ALU)",
1302*8358b122SIan Rogers        "MetricExpr": "UOPS_DISPATCHED_PORT.PORT_6 / CORE_CLKS",
1303*8358b122SIan Rogers        "MetricGroup": "TopdownL6;tma_L6_group;tma_alu_op_utilization_group",
1304*8358b122SIan Rogers        "MetricName": "tma_port_6",
1305*8358b122SIan Rogers        "ScaleUnit": "100%"
1306*8358b122SIan Rogers    },
1307*8358b122SIan Rogers    {
1308*8358b122SIan Rogers        "BriefDescription": "This metric represents Core fraction of cycles CPU dispatched uops on execution port for Load operations",
1309*8358b122SIan 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)",
1310*8358b122SIan Rogers        "MetricGroup": "TopdownL5;tma_L5_group;tma_ports_utilized_3m_group",
1311*8358b122SIan Rogers        "MetricName": "tma_load_op_utilization",
1312*8358b122SIan Rogers        "ScaleUnit": "100%"
1313*8358b122SIan Rogers    },
1314*8358b122SIan Rogers    {
1315*8358b122SIan Rogers        "BriefDescription": "This metric represents Core fraction of cycles CPU dispatched uops on execution port 2 ([SNB+]Loads and Store-address; [ICL+] Loads)",
1316*8358b122SIan Rogers        "MetricExpr": "UOPS_DISPATCHED_PORT.PORT_2 / CORE_CLKS",
1317*8358b122SIan Rogers        "MetricGroup": "TopdownL6;tma_L6_group;tma_load_op_utilization_group",
1318*8358b122SIan Rogers        "MetricName": "tma_port_2",
1319*8358b122SIan Rogers        "ScaleUnit": "100%"
1320*8358b122SIan Rogers    },
1321*8358b122SIan Rogers    {
1322*8358b122SIan Rogers        "BriefDescription": "This metric represents Core fraction of cycles CPU dispatched uops on execution port 3 ([SNB+]Loads and Store-address; [ICL+] Loads)",
1323*8358b122SIan Rogers        "MetricExpr": "UOPS_DISPATCHED_PORT.PORT_3 / CORE_CLKS",
1324*8358b122SIan Rogers        "MetricGroup": "TopdownL6;tma_L6_group;tma_load_op_utilization_group",
1325*8358b122SIan Rogers        "MetricName": "tma_port_3",
1326*8358b122SIan Rogers        "ScaleUnit": "100%"
1327*8358b122SIan Rogers    },
1328*8358b122SIan Rogers    {
1329*8358b122SIan Rogers        "BriefDescription": "This metric represents Core fraction of cycles CPU dispatched uops on execution port for Store operations",
1330*8358b122SIan Rogers        "MetricExpr": "UOPS_DISPATCHED_PORT.PORT_4 / CORE_CLKS",
1331*8358b122SIan Rogers        "MetricGroup": "TopdownL5;tma_L5_group;tma_ports_utilized_3m_group",
1332*8358b122SIan Rogers        "MetricName": "tma_store_op_utilization",
1333*8358b122SIan Rogers        "ScaleUnit": "100%"
1334*8358b122SIan Rogers    },
1335*8358b122SIan Rogers    {
1336*8358b122SIan Rogers        "BriefDescription": "This metric represents Core fraction of cycles CPU dispatched uops on execution port 4 (Store-data)",
1337*8358b122SIan Rogers        "MetricExpr": "tma_store_op_utilization",
1338*8358b122SIan Rogers        "MetricGroup": "TopdownL6;tma_L6_group;tma_store_op_utilization_group",
1339*8358b122SIan Rogers        "MetricName": "tma_port_4",
1340*8358b122SIan Rogers        "ScaleUnit": "100%"
1341*8358b122SIan Rogers    },
1342*8358b122SIan Rogers    {
1343*8358b122SIan Rogers        "BriefDescription": "This metric represents Core fraction of cycles CPU dispatched uops on execution port 7 ([HSW+]simple Store-address)",
1344*8358b122SIan Rogers        "MetricExpr": "UOPS_DISPATCHED_PORT.PORT_7 / CORE_CLKS",
1345*8358b122SIan Rogers        "MetricGroup": "TopdownL6;tma_L6_group;tma_store_op_utilization_group",
1346*8358b122SIan Rogers        "MetricName": "tma_port_7",
1347*8358b122SIan Rogers        "ScaleUnit": "100%"
1348*8358b122SIan Rogers    },
1349*8358b122SIan Rogers    {
1350*8358b122SIan Rogers        "BriefDescription": "This category represents fraction of slots utilized by useful work i.e. issued uops that eventually get retired",
1351*8358b122SIan Rogers        "MetricExpr": "UOPS_RETIRED.RETIRE_SLOTS / SLOTS",
1352*8358b122SIan Rogers        "MetricGroup": "TopdownL1;tma_L1_group;tma_L1_group",
1353*8358b122SIan Rogers        "MetricName": "tma_retiring",
1354*8358b122SIan 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. ",
1355*8358b122SIan Rogers        "ScaleUnit": "100%"
1356*8358b122SIan Rogers    },
1357*8358b122SIan Rogers    {
1358*8358b122SIan 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)",
1359*8358b122SIan Rogers        "MetricExpr": "tma_retiring - (UOPS_RETIRED.RETIRE_SLOTS + UOPS_RETIRED.MACRO_FUSED - INST_RETIRED.ANY) / SLOTS",
1360*8358b122SIan Rogers        "MetricGroup": "Retire;TopdownL2;tma_L2_group;tma_L2_group;tma_retiring_group",
1361*8358b122SIan Rogers        "MetricName": "tma_light_operations",
1362*8358b122SIan 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.",
1363*8358b122SIan Rogers        "ScaleUnit": "100%"
1364*8358b122SIan Rogers    },
1365*8358b122SIan Rogers    {
1366*8358b122SIan Rogers        "BriefDescription": "This metric represents overall arithmetic floating-point (FP) operations fraction the CPU has executed (retired)",
1367*8358b122SIan Rogers        "MetricExpr": "tma_retiring * UOPS_EXECUTED.X87 / UOPS_EXECUTED.THREAD + tma_fp_scalar + tma_fp_vector",
1368*8358b122SIan Rogers        "MetricGroup": "HPC;TopdownL3;tma_L3_group;tma_light_operations_group",
1369*8358b122SIan Rogers        "MetricName": "tma_fp_arith",
1370*8358b122SIan 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.",
1371*8358b122SIan Rogers        "ScaleUnit": "100%"
1372*8358b122SIan Rogers    },
1373*8358b122SIan Rogers    {
1374*8358b122SIan Rogers        "BriefDescription": "This metric serves as an approximation of legacy x87 usage",
1375*8358b122SIan Rogers        "MetricExpr": "tma_retiring * UOPS_EXECUTED.X87 / UOPS_EXECUTED.THREAD",
1376*8358b122SIan Rogers        "MetricGroup": "Compute;TopdownL4;tma_L4_group;tma_fp_arith_group",
1377*8358b122SIan Rogers        "MetricName": "tma_x87_use",
1378*8358b122SIan 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.",
1379*8358b122SIan Rogers        "ScaleUnit": "100%"
1380*8358b122SIan Rogers    },
1381*8358b122SIan Rogers    {
1382*8358b122SIan Rogers        "BriefDescription": "This metric approximates arithmetic floating-point (FP) scalar uops fraction the CPU has retired",
1383*8358b122SIan Rogers        "MetricExpr": "(FP_ARITH_INST_RETIRED.SCALAR_SINGLE + FP_ARITH_INST_RETIRED.SCALAR_DOUBLE) / UOPS_RETIRED.RETIRE_SLOTS",
1384*8358b122SIan Rogers        "MetricGroup": "Compute;Flops;TopdownL4;tma_L4_group;tma_fp_arith_group",
1385*8358b122SIan Rogers        "MetricName": "tma_fp_scalar",
1386*8358b122SIan Rogers        "PublicDescription": "This metric approximates arithmetic floating-point (FP) scalar uops fraction the CPU has retired. May overcount due to FMA double counting.",
1387*8358b122SIan Rogers        "ScaleUnit": "100%"
1388*8358b122SIan Rogers    },
1389*8358b122SIan Rogers    {
1390*8358b122SIan Rogers        "BriefDescription": "This metric approximates arithmetic floating-point (FP) vector uops fraction the CPU has retired aggregated across all vector widths",
1391*8358b122SIan Rogers        "MetricExpr": "min((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, 1)",
1392*8358b122SIan Rogers        "MetricGroup": "Compute;Flops;TopdownL4;tma_L4_group;tma_fp_arith_group",
1393*8358b122SIan Rogers        "MetricName": "tma_fp_vector",
1394*8358b122SIan 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.",
1395*8358b122SIan Rogers        "ScaleUnit": "100%"
1396*8358b122SIan Rogers    },
1397*8358b122SIan Rogers    {
1398*8358b122SIan Rogers        "BriefDescription": "This metric approximates arithmetic FP vector uops fraction the CPU has retired for 128-bit wide vectors",
1399*8358b122SIan Rogers        "MetricExpr": "min((FP_ARITH_INST_RETIRED.128B_PACKED_DOUBLE + FP_ARITH_INST_RETIRED.128B_PACKED_SINGLE) / UOPS_RETIRED.RETIRE_SLOTS, 1)",
1400*8358b122SIan Rogers        "MetricGroup": "Compute;Flops;TopdownL5;tma_L5_group;tma_fp_vector_group",
1401*8358b122SIan Rogers        "MetricName": "tma_fp_vector_128b",
1402*8358b122SIan 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.",
1403*8358b122SIan Rogers        "ScaleUnit": "100%"
1404*8358b122SIan Rogers    },
1405*8358b122SIan Rogers    {
1406*8358b122SIan Rogers        "BriefDescription": "This metric approximates arithmetic FP vector uops fraction the CPU has retired for 256-bit wide vectors",
1407*8358b122SIan Rogers        "MetricExpr": "min((FP_ARITH_INST_RETIRED.256B_PACKED_DOUBLE + FP_ARITH_INST_RETIRED.256B_PACKED_SINGLE) / UOPS_RETIRED.RETIRE_SLOTS, 1)",
1408*8358b122SIan Rogers        "MetricGroup": "Compute;Flops;TopdownL5;tma_L5_group;tma_fp_vector_group",
1409*8358b122SIan Rogers        "MetricName": "tma_fp_vector_256b",
1410*8358b122SIan 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.",
1411*8358b122SIan Rogers        "ScaleUnit": "100%"
1412*8358b122SIan Rogers    },
1413*8358b122SIan Rogers    {
1414*8358b122SIan Rogers        "BriefDescription": "This metric approximates arithmetic FP vector uops fraction the CPU has retired for 512-bit wide vectors",
1415*8358b122SIan Rogers        "MetricExpr": "min((FP_ARITH_INST_RETIRED.512B_PACKED_DOUBLE + FP_ARITH_INST_RETIRED.512B_PACKED_SINGLE) / UOPS_RETIRED.RETIRE_SLOTS, 1)",
1416*8358b122SIan Rogers        "MetricGroup": "Compute;Flops;TopdownL5;tma_L5_group;tma_fp_vector_group",
1417*8358b122SIan Rogers        "MetricName": "tma_fp_vector_512b",
1418*8358b122SIan 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.",
1419*8358b122SIan Rogers        "ScaleUnit": "100%"
1420*8358b122SIan Rogers    },
1421*8358b122SIan Rogers    {
1422*8358b122SIan Rogers        "BriefDescription": "This metric represents fraction of slots where the CPU was retiring memory operations -- uops for memory load or store accesses.",
1423*8358b122SIan Rogers        "MetricExpr": "tma_light_operations * MEM_INST_RETIRED.ANY / INST_RETIRED.ANY",
1424*8358b122SIan Rogers        "MetricGroup": "Pipeline;TopdownL3;tma_L3_group;tma_light_operations_group",
1425*8358b122SIan Rogers        "MetricName": "tma_memory_operations",
1426*8358b122SIan Rogers        "ScaleUnit": "100%"
1427*8358b122SIan Rogers    },
1428*8358b122SIan Rogers    {
1429*8358b122SIan Rogers        "BriefDescription": "This metric represents fraction of slots where the CPU was retiring fused instructions -- where one uop can represent multiple contiguous instructions",
1430*8358b122SIan Rogers        "MetricExpr": "tma_light_operations * UOPS_RETIRED.MACRO_FUSED / UOPS_RETIRED.RETIRE_SLOTS",
1431*8358b122SIan Rogers        "MetricGroup": "Pipeline;TopdownL3;tma_L3_group;tma_light_operations_group",
1432*8358b122SIan Rogers        "MetricName": "tma_fused_instructions",
1433*8358b122SIan 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.",
1434*8358b122SIan Rogers        "ScaleUnit": "100%"
1435*8358b122SIan Rogers    },
1436*8358b122SIan Rogers    {
1437*8358b122SIan Rogers        "BriefDescription": "This metric represents fraction of slots where the CPU was retiring branch instructions that were not fused",
1438*8358b122SIan Rogers        "MetricExpr": "tma_light_operations * (BR_INST_RETIRED.ALL_BRANCHES - UOPS_RETIRED.MACRO_FUSED) / UOPS_RETIRED.RETIRE_SLOTS",
1439*8358b122SIan Rogers        "MetricGroup": "Pipeline;TopdownL3;tma_L3_group;tma_light_operations_group",
1440*8358b122SIan Rogers        "MetricName": "tma_non_fused_branches",
1441*8358b122SIan 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.",
1442*8358b122SIan Rogers        "ScaleUnit": "100%"
1443*8358b122SIan Rogers    },
1444*8358b122SIan Rogers    {
1445*8358b122SIan Rogers        "BriefDescription": "This metric represents fraction of slots where the CPU was retiring NOP (no op) instructions",
1446*8358b122SIan Rogers        "MetricExpr": "tma_light_operations * INST_RETIRED.NOP / UOPS_RETIRED.RETIRE_SLOTS",
1447*8358b122SIan Rogers        "MetricGroup": "Pipeline;TopdownL3;tma_L3_group;tma_light_operations_group",
1448*8358b122SIan Rogers        "MetricName": "tma_nop_instructions",
1449*8358b122SIan 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.",
1450*8358b122SIan Rogers        "ScaleUnit": "100%"
1451*8358b122SIan Rogers    },
1452*8358b122SIan Rogers    {
1453*8358b122SIan 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",
1454*8358b122SIan Rogers        "MetricExpr": "max(0, tma_light_operations - (tma_fp_arith + tma_memory_operations + tma_fused_instructions + tma_non_fused_branches + tma_nop_instructions))",
1455*8358b122SIan Rogers        "MetricGroup": "Pipeline;TopdownL3;tma_L3_group;tma_light_operations_group",
1456*8358b122SIan Rogers        "MetricName": "tma_other_light_ops",
1457*8358b122SIan Rogers        "ScaleUnit": "100%"
1458*8358b122SIan Rogers    },
1459*8358b122SIan Rogers    {
1460*8358b122SIan 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",
1461*8358b122SIan Rogers        "MetricExpr": "(UOPS_RETIRED.RETIRE_SLOTS + UOPS_RETIRED.MACRO_FUSED - INST_RETIRED.ANY) / SLOTS",
1462*8358b122SIan Rogers        "MetricGroup": "Retire;TopdownL2;tma_L2_group;tma_L2_group;tma_retiring_group",
1463*8358b122SIan Rogers        "MetricName": "tma_heavy_operations",
1464*8358b122SIan 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.",
1465*8358b122SIan Rogers        "ScaleUnit": "100%"
1466*8358b122SIan Rogers    },
1467*8358b122SIan Rogers    {
1468*8358b122SIan 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",
1469*8358b122SIan Rogers        "MetricExpr": "tma_heavy_operations - UOPS_RETIRED.RETIRE_SLOTS / UOPS_ISSUED.ANY * IDQ.MS_UOPS / SLOTS",
1470*8358b122SIan Rogers        "MetricGroup": "TopdownL3;tma_L3_group;tma_heavy_operations_group",
1471*8358b122SIan Rogers        "MetricName": "tma_few_uops_instructions",
1472*8358b122SIan 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.",
1473*8358b122SIan Rogers        "ScaleUnit": "100%"
1474*8358b122SIan Rogers    },
1475*8358b122SIan Rogers    {
1476*8358b122SIan Rogers        "BriefDescription": "This metric represents fraction of slots the CPU was retiring uops fetched by the Microcode Sequencer (MS) unit",
1477*8358b122SIan Rogers        "MetricExpr": "UOPS_RETIRED.RETIRE_SLOTS / UOPS_ISSUED.ANY * IDQ.MS_UOPS / SLOTS",
1478*8358b122SIan Rogers        "MetricGroup": "MicroSeq;TopdownL3;tma_L3_group;tma_heavy_operations_group",
1479*8358b122SIan Rogers        "MetricName": "tma_microcode_sequencer",
1480*8358b122SIan 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.",
1481*8358b122SIan Rogers        "ScaleUnit": "100%"
1482*8358b122SIan Rogers    },
1483*8358b122SIan Rogers    {
1484*8358b122SIan Rogers        "BriefDescription": "This metric estimates fraction of slots the CPU retired uops delivered by the Microcode_Sequencer as a result of Assists",
1485*8358b122SIan Rogers        "MetricExpr": "min(100 * (FP_ASSIST.ANY + OTHER_ASSISTS.ANY) / SLOTS, 1)",
1486*8358b122SIan Rogers        "MetricGroup": "TopdownL4;tma_L4_group;tma_microcode_sequencer_group",
1487*8358b122SIan Rogers        "MetricName": "tma_assists",
1488*8358b122SIan 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.",
1489*8358b122SIan Rogers        "ScaleUnit": "100%"
1490*8358b122SIan Rogers    },
1491*8358b122SIan Rogers    {
1492*8358b122SIan Rogers        "BriefDescription": "This metric estimates fraction of cycles the CPU retired uops originated from CISC (complex instruction set computer) instruction",
1493*8358b122SIan Rogers        "MetricExpr": "max(0, tma_microcode_sequencer - tma_assists)",
1494*8358b122SIan Rogers        "MetricGroup": "TopdownL4;tma_L4_group;tma_microcode_sequencer_group",
1495*8358b122SIan Rogers        "MetricName": "tma_cisc",
1496*8358b122SIan 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.",
1497*8358b122SIan Rogers        "ScaleUnit": "100%"
1498*8358b122SIan Rogers    },
1499*8358b122SIan Rogers    {
1500*8358b122SIan Rogers        "BriefDescription": "C3 residency percent per core",
1501*8358b122SIan Rogers        "MetricExpr": "cstate_core@c3\\-residency@ / TSC",
1502*8358b122SIan Rogers        "MetricGroup": "Power",
1503*8358b122SIan Rogers        "MetricName": "C3_Core_Residency",
1504*8358b122SIan Rogers        "ScaleUnit": "100%"
1505*8358b122SIan Rogers    },
1506*8358b122SIan Rogers    {
1507*8358b122SIan Rogers        "BriefDescription": "C6 residency percent per core",
1508*8358b122SIan Rogers        "MetricExpr": "cstate_core@c6\\-residency@ / TSC",
1509*8358b122SIan Rogers        "MetricGroup": "Power",
1510*8358b122SIan Rogers        "MetricName": "C6_Core_Residency",
1511*8358b122SIan Rogers        "ScaleUnit": "100%"
1512*8358b122SIan Rogers    },
1513*8358b122SIan Rogers    {
1514*8358b122SIan Rogers        "BriefDescription": "C7 residency percent per core",
1515*8358b122SIan Rogers        "MetricExpr": "cstate_core@c7\\-residency@ / TSC",
1516*8358b122SIan Rogers        "MetricGroup": "Power",
1517*8358b122SIan Rogers        "MetricName": "C7_Core_Residency",
1518*8358b122SIan Rogers        "ScaleUnit": "100%"
1519*8358b122SIan Rogers    },
1520*8358b122SIan Rogers    {
1521*8358b122SIan Rogers        "BriefDescription": "C2 residency percent per package",
1522*8358b122SIan Rogers        "MetricExpr": "cstate_pkg@c2\\-residency@ / TSC",
1523*8358b122SIan Rogers        "MetricGroup": "Power",
1524*8358b122SIan Rogers        "MetricName": "C2_Pkg_Residency",
1525*8358b122SIan Rogers        "ScaleUnit": "100%"
1526*8358b122SIan Rogers    },
1527*8358b122SIan Rogers    {
1528*8358b122SIan Rogers        "BriefDescription": "C3 residency percent per package",
1529*8358b122SIan Rogers        "MetricExpr": "cstate_pkg@c3\\-residency@ / TSC",
1530*8358b122SIan Rogers        "MetricGroup": "Power",
1531*8358b122SIan Rogers        "MetricName": "C3_Pkg_Residency",
1532*8358b122SIan Rogers        "ScaleUnit": "100%"
1533*8358b122SIan Rogers    },
1534*8358b122SIan Rogers    {
1535*8358b122SIan Rogers        "BriefDescription": "C6 residency percent per package",
1536*8358b122SIan Rogers        "MetricExpr": "cstate_pkg@c6\\-residency@ / TSC",
1537*8358b122SIan Rogers        "MetricGroup": "Power",
1538*8358b122SIan Rogers        "MetricName": "C6_Pkg_Residency",
1539*8358b122SIan Rogers        "ScaleUnit": "100%"
1540*8358b122SIan Rogers    },
1541*8358b122SIan Rogers    {
1542*8358b122SIan Rogers        "BriefDescription": "C7 residency percent per package",
1543*8358b122SIan Rogers        "MetricExpr": "cstate_pkg@c7\\-residency@ / TSC",
1544*8358b122SIan Rogers        "MetricGroup": "Power",
1545*8358b122SIan Rogers        "MetricName": "C7_Pkg_Residency",
1546*8358b122SIan Rogers        "ScaleUnit": "100%"
1547ecd94f1bSKan Liang    }
1548ecd94f1bSKan Liang]
1549