1[ 2 { 3 "BriefDescription": "This category represents fraction of slots where the processor's Frontend undersupplies its Backend", 4 "MetricExpr": "IDQ_UOPS_NOT_DELIVERED.CORE / (4 * CPU_CLK_UNHALTED.THREAD)", 5 "MetricGroup": "TopdownL1", 6 "MetricName": "Frontend_Bound", 7 "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." 8 }, 9 { 10 "BriefDescription": "This category represents fraction of slots where the processor's Frontend undersupplies its Backend. SMT version; use when SMT is enabled and measuring per logical CPU.", 11 "MetricExpr": "IDQ_UOPS_NOT_DELIVERED.CORE / (4 * ( ( CPU_CLK_UNHALTED.THREAD / 2 ) * ( 1 + CPU_CLK_UNHALTED.ONE_THREAD_ACTIVE / CPU_CLK_UNHALTED.REF_XCLK ) ))", 12 "MetricGroup": "TopdownL1_SMT", 13 "MetricName": "Frontend_Bound_SMT", 14 "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. SMT version; use when SMT is enabled and measuring per logical CPU." 15 }, 16 { 17 "BriefDescription": "This category represents fraction of slots wasted due to incorrect speculations", 18 "MetricExpr": "( UOPS_ISSUED.ANY - UOPS_RETIRED.RETIRE_SLOTS + 4 * INT_MISC.RECOVERY_CYCLES ) / (4 * CPU_CLK_UNHALTED.THREAD)", 19 "MetricGroup": "TopdownL1", 20 "MetricName": "Bad_Speculation", 21 "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." 22 }, 23 { 24 "BriefDescription": "This category represents fraction of slots wasted due to incorrect speculations. SMT version; use when SMT is enabled and measuring per logical CPU.", 25 "MetricExpr": "( UOPS_ISSUED.ANY - UOPS_RETIRED.RETIRE_SLOTS + 4 * ( INT_MISC.RECOVERY_CYCLES_ANY / 2 ) ) / (4 * ( ( CPU_CLK_UNHALTED.THREAD / 2 ) * ( 1 + CPU_CLK_UNHALTED.ONE_THREAD_ACTIVE / CPU_CLK_UNHALTED.REF_XCLK ) ))", 26 "MetricGroup": "TopdownL1_SMT", 27 "MetricName": "Bad_Speculation_SMT", 28 "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. SMT version; use when SMT is enabled and measuring per logical CPU." 29 }, 30 { 31 "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", 32 "MetricConstraint": "NO_NMI_WATCHDOG", 33 "MetricExpr": "1 - ( (IDQ_UOPS_NOT_DELIVERED.CORE / (4 * CPU_CLK_UNHALTED.THREAD)) + (( UOPS_ISSUED.ANY - UOPS_RETIRED.RETIRE_SLOTS + 4 * INT_MISC.RECOVERY_CYCLES ) / (4 * CPU_CLK_UNHALTED.THREAD)) + (UOPS_RETIRED.RETIRE_SLOTS / (4 * CPU_CLK_UNHALTED.THREAD)) )", 34 "MetricGroup": "TopdownL1", 35 "MetricName": "Backend_Bound", 36 "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." 37 }, 38 { 39 "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. SMT version; use when SMT is enabled and measuring per logical CPU.", 40 "MetricExpr": "1 - ( (IDQ_UOPS_NOT_DELIVERED.CORE / (4 * ( ( CPU_CLK_UNHALTED.THREAD / 2 ) * ( 1 + CPU_CLK_UNHALTED.ONE_THREAD_ACTIVE / CPU_CLK_UNHALTED.REF_XCLK ) ))) + (( UOPS_ISSUED.ANY - UOPS_RETIRED.RETIRE_SLOTS + 4 * ( INT_MISC.RECOVERY_CYCLES_ANY / 2 ) ) / (4 * ( ( CPU_CLK_UNHALTED.THREAD / 2 ) * ( 1 + CPU_CLK_UNHALTED.ONE_THREAD_ACTIVE / CPU_CLK_UNHALTED.REF_XCLK ) ))) + (UOPS_RETIRED.RETIRE_SLOTS / (4 * ( ( CPU_CLK_UNHALTED.THREAD / 2 ) * ( 1 + CPU_CLK_UNHALTED.ONE_THREAD_ACTIVE / CPU_CLK_UNHALTED.REF_XCLK ) ))) )", 41 "MetricGroup": "TopdownL1_SMT", 42 "MetricName": "Backend_Bound_SMT", 43 "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. SMT version; use when SMT is enabled and measuring per logical CPU." 44 }, 45 { 46 "BriefDescription": "This category represents fraction of slots utilized by useful work i.e. issued uops that eventually get retired", 47 "MetricExpr": "UOPS_RETIRED.RETIRE_SLOTS / (4 * CPU_CLK_UNHALTED.THREAD)", 48 "MetricGroup": "TopdownL1", 49 "MetricName": "Retiring", 50 "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. " 51 }, 52 { 53 "BriefDescription": "This category represents fraction of slots utilized by useful work i.e. issued uops that eventually get retired. SMT version; use when SMT is enabled and measuring per logical CPU.", 54 "MetricExpr": "UOPS_RETIRED.RETIRE_SLOTS / (4 * ( ( CPU_CLK_UNHALTED.THREAD / 2 ) * ( 1 + CPU_CLK_UNHALTED.ONE_THREAD_ACTIVE / CPU_CLK_UNHALTED.REF_XCLK ) ))", 55 "MetricGroup": "TopdownL1_SMT", 56 "MetricName": "Retiring_SMT", 57 "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. SMT version; use when SMT is enabled and measuring per logical CPU." 58 }, 59 { 60 "BriefDescription": "Instructions Per Cycle (per Logical Processor)", 61 "MetricExpr": "INST_RETIRED.ANY / CPU_CLK_UNHALTED.THREAD", 62 "MetricGroup": "Ret;Summary", 63 "MetricName": "IPC" 64 }, 65 { 66 "BriefDescription": "Uops Per Instruction", 67 "MetricExpr": "UOPS_RETIRED.RETIRE_SLOTS / INST_RETIRED.ANY", 68 "MetricGroup": "Pipeline;Ret;Retire", 69 "MetricName": "UPI" 70 }, 71 { 72 "BriefDescription": "Instruction per taken branch", 73 "MetricExpr": "UOPS_RETIRED.RETIRE_SLOTS / BR_INST_RETIRED.NEAR_TAKEN", 74 "MetricGroup": "Branches;Fed;FetchBW", 75 "MetricName": "UpTB" 76 }, 77 { 78 "BriefDescription": "Per-Logical Processor actual clocks when the Logical Processor is active.", 79 "MetricExpr": "CPU_CLK_UNHALTED.THREAD", 80 "MetricGroup": "Pipeline", 81 "MetricName": "CLKS" 82 }, 83 { 84 "BriefDescription": "Total issue-pipeline slots (per-Physical Core till ICL; per-Logical Processor ICL onward)", 85 "MetricExpr": "4 * CPU_CLK_UNHALTED.THREAD", 86 "MetricGroup": "TmaL1", 87 "MetricName": "SLOTS" 88 }, 89 { 90 "BriefDescription": "Total issue-pipeline slots (per-Physical Core till ICL; per-Logical Processor ICL onward)", 91 "MetricExpr": "4 * ( ( CPU_CLK_UNHALTED.THREAD / 2 ) * ( 1 + CPU_CLK_UNHALTED.ONE_THREAD_ACTIVE / CPU_CLK_UNHALTED.REF_XCLK ) )", 92 "MetricGroup": "TmaL1_SMT", 93 "MetricName": "SLOTS_SMT" 94 }, 95 { 96 "BriefDescription": "Instructions Per Cycle across hyper-threads (per physical core)", 97 "MetricExpr": "INST_RETIRED.ANY / CPU_CLK_UNHALTED.THREAD", 98 "MetricGroup": "Ret;SMT;TmaL1", 99 "MetricName": "CoreIPC" 100 }, 101 { 102 "BriefDescription": "Instructions Per Cycle across hyper-threads (per physical core)", 103 "MetricExpr": "INST_RETIRED.ANY / ( ( CPU_CLK_UNHALTED.THREAD / 2 ) * ( 1 + CPU_CLK_UNHALTED.ONE_THREAD_ACTIVE / CPU_CLK_UNHALTED.REF_XCLK ) )", 104 "MetricGroup": "Ret;SMT;TmaL1_SMT", 105 "MetricName": "CoreIPC_SMT" 106 }, 107 { 108 "BriefDescription": "Instruction-Level-Parallelism (average number of uops executed when there is execution) per-core", 109 "MetricExpr": "( UOPS_EXECUTED.CORE / 2 / (( cpu@UOPS_EXECUTED.CORE\\,cmask\\=1@ / 2 ) if #SMT_on else cpu@UOPS_EXECUTED.CORE\\,cmask\\=1@) ) if #SMT_on else UOPS_EXECUTED.CORE / (( cpu@UOPS_EXECUTED.CORE\\,cmask\\=1@ / 2 ) if #SMT_on else cpu@UOPS_EXECUTED.CORE\\,cmask\\=1@)", 110 "MetricGroup": "Backend;Cor;Pipeline;PortsUtil", 111 "MetricName": "ILP" 112 }, 113 { 114 "BriefDescription": "Core actual clocks when any Logical Processor is active on the Physical Core", 115 "MetricExpr": "( ( CPU_CLK_UNHALTED.THREAD / 2 ) * ( 1 + CPU_CLK_UNHALTED.ONE_THREAD_ACTIVE / CPU_CLK_UNHALTED.REF_XCLK ) )", 116 "MetricGroup": "SMT", 117 "MetricName": "CORE_CLKS" 118 }, 119 { 120 "BriefDescription": "Instructions per Load (lower number means higher occurrence rate)", 121 "MetricExpr": "INST_RETIRED.ANY / MEM_UOPS_RETIRED.ALL_LOADS", 122 "MetricGroup": "InsType", 123 "MetricName": "IpLoad" 124 }, 125 { 126 "BriefDescription": "Instructions per Store (lower number means higher occurrence rate)", 127 "MetricExpr": "INST_RETIRED.ANY / MEM_UOPS_RETIRED.ALL_STORES", 128 "MetricGroup": "InsType", 129 "MetricName": "IpStore" 130 }, 131 { 132 "BriefDescription": "Instructions per Branch (lower number means higher occurrence rate)", 133 "MetricExpr": "INST_RETIRED.ANY / BR_INST_RETIRED.ALL_BRANCHES", 134 "MetricGroup": "Branches;Fed;InsType", 135 "MetricName": "IpBranch" 136 }, 137 { 138 "BriefDescription": "Instructions per (near) call (lower number means higher occurrence rate)", 139 "MetricExpr": "INST_RETIRED.ANY / BR_INST_RETIRED.NEAR_CALL", 140 "MetricGroup": "Branches;Fed;PGO", 141 "MetricName": "IpCall" 142 }, 143 { 144 "BriefDescription": "Instruction per taken branch", 145 "MetricExpr": "INST_RETIRED.ANY / BR_INST_RETIRED.NEAR_TAKEN", 146 "MetricGroup": "Branches;Fed;FetchBW;Frontend;PGO", 147 "MetricName": "IpTB" 148 }, 149 { 150 "BriefDescription": "Branch instructions per taken branch. ", 151 "MetricExpr": "BR_INST_RETIRED.ALL_BRANCHES / BR_INST_RETIRED.NEAR_TAKEN", 152 "MetricGroup": "Branches;Fed;PGO", 153 "MetricName": "BpTkBranch" 154 }, 155 { 156 "BriefDescription": "Total number of retired Instructions, Sample with: INST_RETIRED.PREC_DIST", 157 "MetricExpr": "INST_RETIRED.ANY", 158 "MetricGroup": "Summary;TmaL1", 159 "MetricName": "Instructions" 160 }, 161 { 162 "BriefDescription": "Average number of Uops retired in cycles where at least one uop has retired.", 163 "MetricExpr": "UOPS_RETIRED.RETIRE_SLOTS / cpu@UOPS_RETIRED.RETIRE_SLOTS\\,cmask\\=1@", 164 "MetricGroup": "Pipeline;Ret", 165 "MetricName": "Retire" 166 }, 167 { 168 "BriefDescription": "Fraction of Uops delivered by the DSB (aka Decoded ICache; or Uop Cache)", 169 "MetricExpr": "IDQ.DSB_UOPS / (( IDQ.DSB_UOPS + LSD.UOPS + IDQ.MITE_UOPS + IDQ.MS_UOPS ) )", 170 "MetricGroup": "DSB;Fed;FetchBW", 171 "MetricName": "DSB_Coverage" 172 }, 173 { 174 "BriefDescription": "Number of Instructions per non-speculative Branch Misprediction (JEClear) (lower number means higher occurrence rate)", 175 "MetricExpr": "INST_RETIRED.ANY / BR_MISP_RETIRED.ALL_BRANCHES", 176 "MetricGroup": "Bad;BadSpec;BrMispredicts", 177 "MetricName": "IpMispredict" 178 }, 179 { 180 "BriefDescription": "Actual Average Latency for L1 data-cache miss demand load operations (in core cycles)", 181 "MetricExpr": "L1D_PEND_MISS.PENDING / ( MEM_LOAD_UOPS_RETIRED.L1_MISS + mem_load_uops_retired.hit_lfb )", 182 "MetricGroup": "Mem;MemoryBound;MemoryLat", 183 "MetricName": "Load_Miss_Real_Latency" 184 }, 185 { 186 "BriefDescription": "Memory-Level-Parallelism (average number of L1 miss demand load when there is at least one such miss. Per-Logical Processor)", 187 "MetricExpr": "L1D_PEND_MISS.PENDING / L1D_PEND_MISS.PENDING_CYCLES", 188 "MetricGroup": "Mem;MemoryBound;MemoryBW", 189 "MetricName": "MLP" 190 }, 191 { 192 "BriefDescription": "L1 cache true misses per kilo instruction for retired demand loads", 193 "MetricExpr": "1000 * MEM_LOAD_UOPS_RETIRED.L1_MISS / INST_RETIRED.ANY", 194 "MetricGroup": "Mem;CacheMisses", 195 "MetricName": "L1MPKI" 196 }, 197 { 198 "BriefDescription": "L2 cache true misses per kilo instruction for retired demand loads", 199 "MetricExpr": "1000 * MEM_LOAD_UOPS_RETIRED.L2_MISS / INST_RETIRED.ANY", 200 "MetricGroup": "Mem;Backend;CacheMisses", 201 "MetricName": "L2MPKI" 202 }, 203 { 204 "BriefDescription": "L3 cache true misses per kilo instruction for retired demand loads", 205 "MetricExpr": "1000 * MEM_LOAD_UOPS_RETIRED.L3_MISS / INST_RETIRED.ANY", 206 "MetricGroup": "Mem;CacheMisses", 207 "MetricName": "L3MPKI" 208 }, 209 { 210 "BriefDescription": "Utilization of the core's Page Walker(s) serving STLB misses triggered by instruction/Load/Store accesses", 211 "MetricConstraint": "NO_NMI_WATCHDOG", 212 "MetricExpr": "( ITLB_MISSES.WALK_DURATION + DTLB_LOAD_MISSES.WALK_DURATION + DTLB_STORE_MISSES.WALK_DURATION ) / CPU_CLK_UNHALTED.THREAD", 213 "MetricGroup": "Mem;MemoryTLB", 214 "MetricName": "Page_Walks_Utilization" 215 }, 216 { 217 "BriefDescription": "Utilization of the core's Page Walker(s) serving STLB misses triggered by instruction/Load/Store accesses", 218 "MetricExpr": "( ITLB_MISSES.WALK_DURATION + DTLB_LOAD_MISSES.WALK_DURATION + DTLB_STORE_MISSES.WALK_DURATION ) / ( ( CPU_CLK_UNHALTED.THREAD / 2 ) * ( 1 + CPU_CLK_UNHALTED.ONE_THREAD_ACTIVE / CPU_CLK_UNHALTED.REF_XCLK ) )", 219 "MetricGroup": "Mem;MemoryTLB_SMT", 220 "MetricName": "Page_Walks_Utilization_SMT" 221 }, 222 { 223 "BriefDescription": "Average per-core data fill bandwidth to the L1 data cache [GB / sec]", 224 "MetricExpr": "64 * L1D.REPLACEMENT / 1000000000 / duration_time", 225 "MetricGroup": "Mem;MemoryBW", 226 "MetricName": "L1D_Cache_Fill_BW" 227 }, 228 { 229 "BriefDescription": "Average per-core data fill bandwidth to the L2 cache [GB / sec]", 230 "MetricExpr": "64 * L2_LINES_IN.ALL / 1000000000 / duration_time", 231 "MetricGroup": "Mem;MemoryBW", 232 "MetricName": "L2_Cache_Fill_BW" 233 }, 234 { 235 "BriefDescription": "Average per-core data fill bandwidth to the L3 cache [GB / sec]", 236 "MetricExpr": "64 * LONGEST_LAT_CACHE.MISS / 1000000000 / duration_time", 237 "MetricGroup": "Mem;MemoryBW", 238 "MetricName": "L3_Cache_Fill_BW" 239 }, 240 { 241 "BriefDescription": "Average per-thread data fill bandwidth to the L1 data cache [GB / sec]", 242 "MetricExpr": "(64 * L1D.REPLACEMENT / 1000000000 / duration_time)", 243 "MetricGroup": "Mem;MemoryBW", 244 "MetricName": "L1D_Cache_Fill_BW_1T" 245 }, 246 { 247 "BriefDescription": "Average per-thread data fill bandwidth to the L2 cache [GB / sec]", 248 "MetricExpr": "(64 * L2_LINES_IN.ALL / 1000000000 / duration_time)", 249 "MetricGroup": "Mem;MemoryBW", 250 "MetricName": "L2_Cache_Fill_BW_1T" 251 }, 252 { 253 "BriefDescription": "Average per-thread data fill bandwidth to the L3 cache [GB / sec]", 254 "MetricExpr": "(64 * LONGEST_LAT_CACHE.MISS / 1000000000 / duration_time)", 255 "MetricGroup": "Mem;MemoryBW", 256 "MetricName": "L3_Cache_Fill_BW_1T" 257 }, 258 { 259 "BriefDescription": "Average per-thread data access bandwidth to the L3 cache [GB / sec]", 260 "MetricExpr": "0", 261 "MetricGroup": "Mem;MemoryBW;Offcore", 262 "MetricName": "L3_Cache_Access_BW_1T" 263 }, 264 { 265 "BriefDescription": "Average CPU Utilization", 266 "MetricExpr": "CPU_CLK_UNHALTED.REF_TSC / msr@tsc@", 267 "MetricGroup": "HPC;Summary", 268 "MetricName": "CPU_Utilization" 269 }, 270 { 271 "BriefDescription": "Measured Average Frequency for unhalted processors [GHz]", 272 "MetricExpr": "(CPU_CLK_UNHALTED.THREAD / CPU_CLK_UNHALTED.REF_TSC) * msr@tsc@ / 1000000000 / duration_time", 273 "MetricGroup": "Summary;Power", 274 "MetricName": "Average_Frequency" 275 }, 276 { 277 "BriefDescription": "Average Frequency Utilization relative nominal frequency", 278 "MetricExpr": "CPU_CLK_UNHALTED.THREAD / CPU_CLK_UNHALTED.REF_TSC", 279 "MetricGroup": "Power", 280 "MetricName": "Turbo_Utilization" 281 }, 282 { 283 "BriefDescription": "Fraction of cycles where both hardware Logical Processors were active", 284 "MetricExpr": "1 - CPU_CLK_UNHALTED.ONE_THREAD_ACTIVE / ( CPU_CLK_UNHALTED.REF_XCLK_ANY / 2 ) if #SMT_on else 0", 285 "MetricGroup": "SMT", 286 "MetricName": "SMT_2T_Utilization" 287 }, 288 { 289 "BriefDescription": "Fraction of cycles spent in the Operating System (OS) Kernel mode", 290 "MetricExpr": "CPU_CLK_UNHALTED.THREAD_P:k / CPU_CLK_UNHALTED.THREAD", 291 "MetricGroup": "OS", 292 "MetricName": "Kernel_Utilization" 293 }, 294 { 295 "BriefDescription": "Cycles Per Instruction for the Operating System (OS) Kernel mode", 296 "MetricExpr": "CPU_CLK_UNHALTED.THREAD_P:k / INST_RETIRED.ANY_P:k", 297 "MetricGroup": "OS", 298 "MetricName": "Kernel_CPI" 299 }, 300 { 301 "BriefDescription": "Average external Memory Bandwidth Use for reads and writes [GB / sec]", 302 "MetricExpr": "( 64 * ( uncore_imc@cas_count_read@ + uncore_imc@cas_count_write@ ) / 1000000000 ) / duration_time", 303 "MetricGroup": "HPC;Mem;MemoryBW;SoC", 304 "MetricName": "DRAM_BW_Use" 305 }, 306 { 307 "BriefDescription": "Average latency of data read request to external memory (in nanoseconds). Accounts for demand loads and L1/L2 prefetches", 308 "MetricExpr": "1000000000 * ( cbox@event\\=0x36\\,umask\\=0x3\\,filter_opc\\=0x182@ / cbox@event\\=0x35\\,umask\\=0x3\\,filter_opc\\=0x182@ ) / ( cbox_0@event\\=0x0@ / duration_time )", 309 "MetricGroup": "Mem;MemoryLat;SoC", 310 "MetricName": "MEM_Read_Latency" 311 }, 312 { 313 "BriefDescription": "Average number of parallel data read requests to external memory. Accounts for demand loads and L1/L2 prefetches", 314 "MetricExpr": "cbox@event\\=0x36\\,umask\\=0x3\\,filter_opc\\=0x182@ / cbox@event\\=0x36\\,umask\\=0x3\\,filter_opc\\=0x182\\,thresh\\=1@", 315 "MetricGroup": "Mem;MemoryBW;SoC", 316 "MetricName": "MEM_Parallel_Reads" 317 }, 318 { 319 "BriefDescription": "Socket actual clocks when any core is active on that socket", 320 "MetricExpr": "cbox_0@event\\=0x0@", 321 "MetricGroup": "SoC", 322 "MetricName": "Socket_CLKS" 323 }, 324 { 325 "BriefDescription": "Uncore frequency per die [GHZ]", 326 "MetricExpr": "cbox_0@event\\=0x0@ / #num_dies / duration_time / 1000000000", 327 "MetricGroup": "SoC", 328 "MetricName": "UNCORE_FREQ" 329 }, 330 { 331 "BriefDescription": "Instructions per Far Branch ( Far Branches apply upon transition from application to operating system, handling interrupts, exceptions) [lower number means higher occurrence rate]", 332 "MetricExpr": "INST_RETIRED.ANY / BR_INST_RETIRED.FAR_BRANCH:u", 333 "MetricGroup": "Branches;OS", 334 "MetricName": "IpFarBranch" 335 }, 336 { 337 "BriefDescription": "C3 residency percent per core", 338 "MetricExpr": "(cstate_core@c3\\-residency@ / msr@tsc@) * 100", 339 "MetricGroup": "Power", 340 "MetricName": "C3_Core_Residency" 341 }, 342 { 343 "BriefDescription": "C6 residency percent per core", 344 "MetricExpr": "(cstate_core@c6\\-residency@ / msr@tsc@) * 100", 345 "MetricGroup": "Power", 346 "MetricName": "C6_Core_Residency" 347 }, 348 { 349 "BriefDescription": "C7 residency percent per core", 350 "MetricExpr": "(cstate_core@c7\\-residency@ / msr@tsc@) * 100", 351 "MetricGroup": "Power", 352 "MetricName": "C7_Core_Residency" 353 }, 354 { 355 "BriefDescription": "C2 residency percent per package", 356 "MetricExpr": "(cstate_pkg@c2\\-residency@ / msr@tsc@) * 100", 357 "MetricGroup": "Power", 358 "MetricName": "C2_Pkg_Residency" 359 }, 360 { 361 "BriefDescription": "C3 residency percent per package", 362 "MetricExpr": "(cstate_pkg@c3\\-residency@ / msr@tsc@) * 100", 363 "MetricGroup": "Power", 364 "MetricName": "C3_Pkg_Residency" 365 }, 366 { 367 "BriefDescription": "C6 residency percent per package", 368 "MetricExpr": "(cstate_pkg@c6\\-residency@ / msr@tsc@) * 100", 369 "MetricGroup": "Power", 370 "MetricName": "C6_Pkg_Residency" 371 }, 372 { 373 "BriefDescription": "C7 residency percent per package", 374 "MetricExpr": "(cstate_pkg@c7\\-residency@ / msr@tsc@) * 100", 375 "MetricGroup": "Power", 376 "MetricName": "C7_Pkg_Residency" 377 }, 378 { 379 "BriefDescription": "CPU operating frequency (in GHz)", 380 "MetricExpr": "( CPU_CLK_UNHALTED.THREAD / CPU_CLK_UNHALTED.REF_TSC * #SYSTEM_TSC_FREQ ) / 1000000000", 381 "MetricGroup": "", 382 "MetricName": "cpu_operating_frequency", 383 "ScaleUnit": "1GHz" 384 }, 385 { 386 "BriefDescription": "Cycles per instruction retired; indicating how much time each executed instruction took; in units of cycles.", 387 "MetricExpr": " CPU_CLK_UNHALTED.THREAD / INST_RETIRED.ANY ", 388 "MetricGroup": "", 389 "MetricName": "cpi", 390 "ScaleUnit": "1per_instr" 391 }, 392 { 393 "BriefDescription": "The ratio of number of completed memory load instructions to the total number completed instructions", 394 "MetricExpr": " MEM_UOPS_RETIRED.ALL_LOADS / INST_RETIRED.ANY ", 395 "MetricGroup": "", 396 "MetricName": "loads_per_instr", 397 "ScaleUnit": "1per_instr" 398 }, 399 { 400 "BriefDescription": "The ratio of number of completed memory store instructions to the total number completed instructions", 401 "MetricExpr": " MEM_UOPS_RETIRED.ALL_STORES / INST_RETIRED.ANY ", 402 "MetricGroup": "", 403 "MetricName": "stores_per_instr", 404 "ScaleUnit": "1per_instr" 405 }, 406 { 407 "BriefDescription": "Ratio of number of requests missing L1 data cache (includes data+rfo w/ prefetches) to the total number of completed instructions", 408 "MetricExpr": " L1D.REPLACEMENT / INST_RETIRED.ANY ", 409 "MetricGroup": "", 410 "MetricName": "l1d_mpi_includes_data_plus_rfo_with_prefetches", 411 "ScaleUnit": "1per_instr" 412 }, 413 { 414 "BriefDescription": "Ratio of number of demand load requests hitting in L1 data cache to the total number of completed instructions", 415 "MetricExpr": " MEM_LOAD_UOPS_RETIRED.L1_HIT / INST_RETIRED.ANY ", 416 "MetricGroup": "", 417 "MetricName": "l1d_demand_data_read_hits_per_instr", 418 "ScaleUnit": "1per_instr" 419 }, 420 { 421 "BriefDescription": "Ratio of number of code read requests missing in L1 instruction cache (includes prefetches) to the total number of completed instructions", 422 "MetricExpr": " L2_RQSTS.ALL_CODE_RD / INST_RETIRED.ANY ", 423 "MetricGroup": "", 424 "MetricName": "l1_i_code_read_misses_with_prefetches_per_instr", 425 "ScaleUnit": "1per_instr" 426 }, 427 { 428 "BriefDescription": "Ratio of number of completed demand load requests hitting in L2 cache to the total number of completed instructions", 429 "MetricExpr": " MEM_LOAD_UOPS_RETIRED.L2_HIT / INST_RETIRED.ANY ", 430 "MetricGroup": "", 431 "MetricName": "l2_demand_data_read_hits_per_instr", 432 "ScaleUnit": "1per_instr" 433 }, 434 { 435 "BriefDescription": "Ratio of number of requests missing L2 cache (includes code+data+rfo w/ prefetches) to the total number of completed instructions", 436 "MetricExpr": " L2_LINES_IN.ALL / INST_RETIRED.ANY ", 437 "MetricGroup": "", 438 "MetricName": "l2_mpi_includes_code_plus_data_plus_rfo_with_prefetches", 439 "ScaleUnit": "1per_instr" 440 }, 441 { 442 "BriefDescription": "Ratio of number of completed data read request missing L2 cache to the total number of completed instructions", 443 "MetricExpr": " MEM_LOAD_UOPS_RETIRED.L2_MISS / INST_RETIRED.ANY ", 444 "MetricGroup": "", 445 "MetricName": "l2_demand_data_read_mpi", 446 "ScaleUnit": "1per_instr" 447 }, 448 { 449 "BriefDescription": "Ratio of number of code read request missing L2 cache to the total number of completed instructions", 450 "MetricExpr": " L2_RQSTS.CODE_RD_MISS / INST_RETIRED.ANY ", 451 "MetricGroup": "", 452 "MetricName": "l2_demand_code_mpi", 453 "ScaleUnit": "1per_instr" 454 }, 455 { 456 "BriefDescription": "Ratio of number of completed page walks (for all page sizes) caused by a code fetch to the total number of completed instructions. This implies it missed in the ITLB (Instruction TLB) and further levels of TLB.", 457 "MetricExpr": " ITLB_MISSES.WALK_COMPLETED / INST_RETIRED.ANY ", 458 "MetricGroup": "", 459 "MetricName": "itlb_mpi", 460 "ScaleUnit": "1per_instr" 461 }, 462 { 463 "BriefDescription": "Ratio of number of completed page walks (for 2 megabyte and 4 megabyte page sizes) caused by a code fetch to the total number of completed instructions. This implies it missed in the Instruction Translation Lookaside Buffer (ITLB) and further levels of TLB.", 464 "MetricExpr": " ITLB_MISSES.WALK_COMPLETED_2M_4M / INST_RETIRED.ANY ", 465 "MetricGroup": "", 466 "MetricName": "itlb_large_page_mpi", 467 "ScaleUnit": "1per_instr" 468 }, 469 { 470 "BriefDescription": "Ratio of number of completed page walks (for all page sizes) caused by demand data loads to the total number of completed instructions. This implies it missed in the DTLB and further levels of TLB.", 471 "MetricExpr": " DTLB_LOAD_MISSES.WALK_COMPLETED / INST_RETIRED.ANY ", 472 "MetricGroup": "", 473 "MetricName": "dtlb_load_mpi", 474 "ScaleUnit": "1per_instr" 475 }, 476 { 477 "BriefDescription": "Ratio of number of completed page walks (for all page sizes) caused by demand data stores to the total number of completed instructions. This implies it missed in the DTLB and further levels of TLB.", 478 "MetricExpr": " DTLB_STORE_MISSES.WALK_COMPLETED / INST_RETIRED.ANY ", 479 "MetricGroup": "", 480 "MetricName": "dtlb_store_mpi", 481 "ScaleUnit": "1per_instr" 482 }, 483 { 484 "BriefDescription": "Intel(R) Quick Path Interconnect (QPI) data transmit bandwidth (MB/sec)", 485 "MetricExpr": "( UNC_Q_TxL_FLITS_G0.DATA * 8 / 1000000) / duration_time", 486 "MetricGroup": "", 487 "MetricName": "qpi_data_transmit_bw_only_data", 488 "ScaleUnit": "1MB/s" 489 }, 490 { 491 "BriefDescription": "DDR memory read bandwidth (MB/sec)", 492 "MetricExpr": "( UNC_M_CAS_COUNT.RD * 64 / 1000000) / duration_time", 493 "MetricGroup": "", 494 "MetricName": "memory_bandwidth_read", 495 "ScaleUnit": "1MB/s" 496 }, 497 { 498 "BriefDescription": "DDR memory write bandwidth (MB/sec)", 499 "MetricExpr": "( UNC_M_CAS_COUNT.WR * 64 / 1000000) / duration_time", 500 "MetricGroup": "", 501 "MetricName": "memory_bandwidth_write", 502 "ScaleUnit": "1MB/s" 503 }, 504 { 505 "BriefDescription": "DDR memory bandwidth (MB/sec)", 506 "MetricExpr": "(( UNC_M_CAS_COUNT.RD + UNC_M_CAS_COUNT.WR ) * 64 / 1000000) / duration_time", 507 "MetricGroup": "", 508 "MetricName": "memory_bandwidth_total", 509 "ScaleUnit": "1MB/s" 510 }, 511 { 512 "BriefDescription": "Bandwidth of IO reads that are initiated by end device controllers that are requesting memory from the CPU.", 513 "MetricExpr": "( cbox@UNC_C_TOR_INSERTS.OPCODE\\,filter_opc\\=0x19e@ * 64 / 1000000) / duration_time", 514 "MetricGroup": "", 515 "MetricName": "io_bandwidth_read", 516 "ScaleUnit": "1MB/s" 517 }, 518 { 519 "BriefDescription": "Bandwidth of IO writes that are initiated by end device controllers that are writing memory to the CPU.", 520 "MetricExpr": "( cbox@UNC_C_TOR_INSERTS.OPCODE\\,filter_opc\\=0x1c8\\,filter_tid\\=0x3e@ * 64 / 1000000) / duration_time", 521 "MetricGroup": "", 522 "MetricName": "io_bandwidth_write", 523 "ScaleUnit": "1MB/s" 524 }, 525 { 526 "BriefDescription": "Uops delivered from decoded instruction cache (decoded stream buffer or DSB) as a percent of total uops delivered to Instruction Decode Queue", 527 "MetricExpr": "100 * ( IDQ.DSB_UOPS / UOPS_ISSUED.ANY )", 528 "MetricGroup": "", 529 "MetricName": "percent_uops_delivered_frodecoded_icache_dsb", 530 "ScaleUnit": "1%" 531 }, 532 { 533 "BriefDescription": "Uops delivered from legacy decode pipeline (Micro-instruction Translation Engine or MITE) as a percent of total uops delivered to Instruction Decode Queue", 534 "MetricExpr": "100 * ( IDQ.MITE_UOPS / UOPS_ISSUED.ANY )", 535 "MetricGroup": "", 536 "MetricName": "percent_uops_delivered_frolegacy_decode_pipeline_mite", 537 "ScaleUnit": "1%" 538 }, 539 { 540 "BriefDescription": "Uops delivered from microcode sequencer (MS) as a percent of total uops delivered to Instruction Decode Queue", 541 "MetricExpr": "100 * ( IDQ.MS_UOPS / UOPS_ISSUED.ANY )", 542 "MetricGroup": "", 543 "MetricName": "percent_uops_delivered_fromicrocode_sequencer_ms", 544 "ScaleUnit": "1%" 545 }, 546 { 547 "BriefDescription": "Uops delivered from loop stream detector(LSD) as a percent of total uops delivered to Instruction Decode Queue", 548 "MetricExpr": "100 * ( UOPS_ISSUED.ANY - IDQ.MITE_UOPS - IDQ.MS_UOPS - IDQ.DSB_UOPS ) / UOPS_ISSUED.ANY ", 549 "MetricGroup": "", 550 "MetricName": "percent_uops_delivered_froloop_streadetector_lsd", 551 "ScaleUnit": "1%" 552 }, 553 { 554 "BriefDescription": "Ratio of number of data read requests missing last level core cache (includes demand w/ prefetches) to the total number of completed instructions", 555 "MetricExpr": "( cbox@UNC_C_TOR_INSERTS.MISS_OPCODE\\,filter_opc\\=0x182@ + cbox@UNC_C_TOR_INSERTS.MISS_OPCODE\\,filter_opc\\=0x192@ ) / INST_RETIRED.ANY ", 556 "MetricGroup": "", 557 "MetricName": "llc_data_read_mpi_demand_plus_prefetch", 558 "ScaleUnit": "1per_instr" 559 }, 560 { 561 "BriefDescription": "Ratio of number of code read requests missing last level core cache (includes demand w/ prefetches) to the total number of completed instructions", 562 "MetricExpr": "( cbox@UNC_C_TOR_INSERTS.MISS_OPCODE\\,filter_opc\\=0x181@ + cbox@UNC_C_TOR_INSERTS.MISS_OPCODE\\,filter_opc\\=0x191@ ) / INST_RETIRED.ANY ", 563 "MetricGroup": "", 564 "MetricName": "llc_code_read_mpi_demand_plus_prefetch", 565 "ScaleUnit": "1per_instr" 566 }, 567 { 568 "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.", 569 "MetricExpr": "100 * cbox@UNC_C_TOR_INSERTS.MISS_OPCODE\\,filter_opc\\=0x182@ / ( cbox@UNC_C_TOR_INSERTS.MISS_OPCODE\\,filter_opc\\=0x182@ + cbox@UNC_C_TOR_INSERTS.MISS_OPCODE\\,filter_opc\\=0x182@ )", 570 "MetricGroup": "", 571 "MetricName": "numa_percent_reads_addressed_to_local_dram", 572 "ScaleUnit": "1%" 573 }, 574 { 575 "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.", 576 "MetricExpr": "100 * cbox@UNC_C_TOR_INSERTS.MISS_OPCODE\\,filter_opc\\=0x182@ / ( cbox@UNC_C_TOR_INSERTS.MISS_OPCODE\\,filter_opc\\=0x182@ + cbox@UNC_C_TOR_INSERTS.MISS_OPCODE\\,filter_opc\\=0x182@ )", 577 "MetricGroup": "", 578 "MetricName": "numa_percent_reads_addressed_to_remote_dram", 579 "ScaleUnit": "1%" 580 }, 581 { 582 "BriefDescription": "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.", 583 "MetricExpr": "100 * ( IDQ_UOPS_NOT_DELIVERED.CORE / ( ( 4 ) * ( ( CPU_CLK_UNHALTED.THREAD_ANY / 2 ) if #SMT_on else ( CPU_CLK_UNHALTED.THREAD ) ) ) )", 584 "MetricGroup": "TmaL1, PGO", 585 "MetricName": "tma_frontend_bound_percent", 586 "ScaleUnit": "1%" 587 }, 588 { 589 "BriefDescription": "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.", 590 "MetricExpr": "100 * ( ( 4 ) * ( min( CPU_CLK_UNHALTED.THREAD , IDQ_UOPS_NOT_DELIVERED.CYCLES_0_UOPS_DELIV.CORE ) ) / ( ( 4 ) * ( ( CPU_CLK_UNHALTED.THREAD_ANY / 2 ) if #SMT_on else ( CPU_CLK_UNHALTED.THREAD ) ) ) )", 591 "MetricGroup": "Frontend, TmaL2", 592 "MetricName": "tma_fetch_latency_percent", 593 "ScaleUnit": "1%" 594 }, 595 { 596 "BriefDescription": "This metric represents fraction of cycles the CPU was stalled due to instruction cache misses.", 597 "MetricExpr": "100 * ( ICACHE.IFDATA_STALL / ( CPU_CLK_UNHALTED.THREAD ) )", 598 "MetricGroup": "BigFoot, FetchLat, IcMiss", 599 "MetricName": "tma_icache_misses_percent", 600 "ScaleUnit": "1%" 601 }, 602 { 603 "BriefDescription": "This metric represents fraction of cycles the CPU was stalled due to Instruction TLB (ITLB) misses.", 604 "MetricExpr": "100 * ( ( 14 * ITLB_MISSES.STLB_HIT + ITLB_MISSES.WALK_DURATION ) / ( CPU_CLK_UNHALTED.THREAD ) )", 605 "MetricGroup": "BigFoot, FetchLat, MemoryTLB", 606 "MetricName": "tma_itlb_misses_percent", 607 "ScaleUnit": "1%" 608 }, 609 { 610 "BriefDescription": "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.", 611 "MetricExpr": "100 * ( ( 12 ) * ( BR_MISP_RETIRED.ALL_BRANCHES + MACHINE_CLEARS.COUNT + BACLEARS.ANY ) / ( CPU_CLK_UNHALTED.THREAD ) )", 612 "MetricGroup": "FetchLat", 613 "MetricName": "tma_branch_resteers_percent", 614 "ScaleUnit": "1%" 615 }, 616 { 617 "BriefDescription": "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.", 618 "MetricExpr": "100 * ( DSB2MITE_SWITCHES.PENALTY_CYCLES / ( CPU_CLK_UNHALTED.THREAD ) )", 619 "MetricGroup": "DSBmiss, FetchLat", 620 "MetricName": "tma_dsb_switches_percent", 621 "ScaleUnit": "1%" 622 }, 623 { 624 "BriefDescription": "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.", 625 "MetricExpr": "100 * ( ILD_STALL.LCP / ( CPU_CLK_UNHALTED.THREAD ) )", 626 "MetricGroup": "FetchLat", 627 "MetricName": "tma_lcp_percent", 628 "ScaleUnit": "1%" 629 }, 630 { 631 "BriefDescription": "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.", 632 "MetricExpr": "100 * ( ( 2 ) * IDQ.MS_SWITCHES / ( CPU_CLK_UNHALTED.THREAD ) )", 633 "MetricGroup": "FetchLat, MicroSeq", 634 "MetricName": "tma_ms_switches_percent", 635 "ScaleUnit": "1%" 636 }, 637 { 638 "BriefDescription": "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.", 639 "MetricExpr": "100 * ( ( IDQ_UOPS_NOT_DELIVERED.CORE / ( ( 4 ) * ( ( CPU_CLK_UNHALTED.THREAD_ANY / 2 ) if #SMT_on else ( CPU_CLK_UNHALTED.THREAD ) ) ) ) - ( ( 4 ) * ( min( CPU_CLK_UNHALTED.THREAD , IDQ_UOPS_NOT_DELIVERED.CYCLES_0_UOPS_DELIV.CORE ) ) / ( ( 4 ) * ( ( CPU_CLK_UNHALTED.THREAD_ANY / 2 ) if #SMT_on else ( CPU_CLK_UNHALTED.THREAD ) ) ) ) )", 640 "MetricGroup": "FetchBW, Frontend, TmaL2", 641 "MetricName": "tma_fetch_bandwidth_percent", 642 "ScaleUnit": "1%" 643 }, 644 { 645 "BriefDescription": "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.", 646 "MetricExpr": "100 * ( ( IDQ.ALL_MITE_CYCLES_ANY_UOPS - IDQ.ALL_MITE_CYCLES_4_UOPS ) / ( ( CPU_CLK_UNHALTED.THREAD_ANY / 2 ) if #SMT_on else ( CPU_CLK_UNHALTED.THREAD ) ) / 2 )", 647 "MetricGroup": "DSBmiss, FetchBW", 648 "MetricName": "tma_mite_percent", 649 "ScaleUnit": "1%" 650 }, 651 { 652 "BriefDescription": "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.", 653 "MetricExpr": "100 * ( ( IDQ.ALL_DSB_CYCLES_ANY_UOPS - IDQ.ALL_DSB_CYCLES_4_UOPS ) / ( ( CPU_CLK_UNHALTED.THREAD_ANY / 2 ) if #SMT_on else ( CPU_CLK_UNHALTED.THREAD ) ) / 2 )", 654 "MetricGroup": "DSB, FetchBW", 655 "MetricName": "tma_dsb_percent", 656 "ScaleUnit": "1%" 657 }, 658 { 659 "BriefDescription": "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.", 660 "MetricExpr": "100 * ( ( UOPS_ISSUED.ANY - ( UOPS_RETIRED.RETIRE_SLOTS ) + ( 4 ) * ( ( INT_MISC.RECOVERY_CYCLES_ANY / 2 ) if #SMT_on else INT_MISC.RECOVERY_CYCLES ) ) / ( ( 4 ) * ( ( CPU_CLK_UNHALTED.THREAD_ANY / 2 ) if #SMT_on else ( CPU_CLK_UNHALTED.THREAD ) ) ) )", 661 "MetricGroup": "TmaL1", 662 "MetricName": "tma_bad_speculation_percent", 663 "ScaleUnit": "1%" 664 }, 665 { 666 "BriefDescription": "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.", 667 "MetricExpr": "100 * ( ( BR_MISP_RETIRED.ALL_BRANCHES / ( BR_MISP_RETIRED.ALL_BRANCHES + MACHINE_CLEARS.COUNT ) ) * ( ( UOPS_ISSUED.ANY - ( UOPS_RETIRED.RETIRE_SLOTS ) + ( 4 ) * ( ( INT_MISC.RECOVERY_CYCLES_ANY / 2 ) if #SMT_on else INT_MISC.RECOVERY_CYCLES ) ) / ( ( 4 ) * ( ( CPU_CLK_UNHALTED.THREAD_ANY / 2 ) if #SMT_on else ( CPU_CLK_UNHALTED.THREAD ) ) ) ) )", 668 "MetricGroup": "BadSpec, BrMispredicts, TmaL2", 669 "MetricName": "tma_branch_mispredicts_percent", 670 "ScaleUnit": "1%" 671 }, 672 { 673 "BriefDescription": "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.", 674 "MetricExpr": "100 * ( ( ( UOPS_ISSUED.ANY - ( UOPS_RETIRED.RETIRE_SLOTS ) + ( 4 ) * ( ( INT_MISC.RECOVERY_CYCLES_ANY / 2 ) if #SMT_on else INT_MISC.RECOVERY_CYCLES ) ) / ( ( 4 ) * ( ( CPU_CLK_UNHALTED.THREAD_ANY / 2 ) if #SMT_on else ( CPU_CLK_UNHALTED.THREAD ) ) ) ) - ( ( BR_MISP_RETIRED.ALL_BRANCHES / ( BR_MISP_RETIRED.ALL_BRANCHES + MACHINE_CLEARS.COUNT ) ) * ( ( UOPS_ISSUED.ANY - ( UOPS_RETIRED.RETIRE_SLOTS ) + ( 4 ) * ( ( INT_MISC.RECOVERY_CYCLES_ANY / 2 ) if #SMT_on else INT_MISC.RECOVERY_CYCLES ) ) / ( ( 4 ) * ( ( CPU_CLK_UNHALTED.THREAD_ANY / 2 ) if #SMT_on else ( CPU_CLK_UNHALTED.THREAD ) ) ) ) ) )", 675 "MetricGroup": "BadSpec, MachineClears, TmaL2", 676 "MetricName": "tma_machine_clears_percent", 677 "ScaleUnit": "1%" 678 }, 679 { 680 "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. 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.", 681 "MetricExpr": "100 * ( 1 - ( ( IDQ_UOPS_NOT_DELIVERED.CORE / ( ( 4 ) * ( ( CPU_CLK_UNHALTED.THREAD_ANY / 2 ) if #SMT_on else ( CPU_CLK_UNHALTED.THREAD ) ) ) ) + ( ( UOPS_ISSUED.ANY - ( UOPS_RETIRED.RETIRE_SLOTS ) + ( 4 ) * ( ( INT_MISC.RECOVERY_CYCLES_ANY / 2 ) if #SMT_on else INT_MISC.RECOVERY_CYCLES ) ) / ( ( 4 ) * ( ( CPU_CLK_UNHALTED.THREAD_ANY / 2 ) if #SMT_on else ( CPU_CLK_UNHALTED.THREAD ) ) ) ) + ( ( UOPS_RETIRED.RETIRE_SLOTS ) / ( ( 4 ) * ( ( CPU_CLK_UNHALTED.THREAD_ANY / 2 ) if #SMT_on else ( CPU_CLK_UNHALTED.THREAD ) ) ) ) ) )", 682 "MetricGroup": "TmaL1", 683 "MetricName": "tma_backend_bound_percent", 684 "ScaleUnit": "1%" 685 }, 686 { 687 "BriefDescription": "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).", 688 "MetricExpr": "100 * ( ( ( ( min( CPU_CLK_UNHALTED.THREAD , CYCLE_ACTIVITY.STALLS_LDM_PENDING ) ) + RESOURCE_STALLS.SB ) / ( ( ( min( CPU_CLK_UNHALTED.THREAD , CYCLE_ACTIVITY.CYCLES_NO_EXECUTE ) ) + ( cpu@UOPS_EXECUTED.CORE\\,cmask\\=0x1@ - ( cpu@UOPS_EXECUTED.CORE\\,cmask\\=0x3@ if ( ( INST_RETIRED.ANY / ( CPU_CLK_UNHALTED.THREAD ) ) > 1.8 ) else cpu@UOPS_EXECUTED.CORE\\,cmask\\=0x2@ ) ) / 2 - ( RS_EVENTS.EMPTY_CYCLES if ( ( ( 4 ) * ( min( CPU_CLK_UNHALTED.THREAD , IDQ_UOPS_NOT_DELIVERED.CYCLES_0_UOPS_DELIV.CORE ) ) / ( ( 4 ) * ( ( CPU_CLK_UNHALTED.THREAD_ANY / 2 ) if #SMT_on else ( CPU_CLK_UNHALTED.THREAD ) ) ) ) > 0.1 ) else 0 ) + RESOURCE_STALLS.SB ) if #SMT_on else ( ( min( CPU_CLK_UNHALTED.THREAD , CYCLE_ACTIVITY.CYCLES_NO_EXECUTE ) ) + cpu@UOPS_EXECUTED.CORE\\,cmask\\=0x1@ - ( cpu@UOPS_EXECUTED.CORE\\,cmask\\=0x3@ if ( ( INST_RETIRED.ANY / ( CPU_CLK_UNHALTED.THREAD ) ) > 1.8 ) else cpu@UOPS_EXECUTED.CORE\\,cmask\\=0x2@ ) - ( RS_EVENTS.EMPTY_CYCLES if ( ( ( 4 ) * ( min( CPU_CLK_UNHALTED.THREAD , IDQ_UOPS_NOT_DELIVERED.CYCLES_0_UOPS_DELIV.CORE ) ) / ( ( 4 ) * ( ( CPU_CLK_UNHALTED.THREAD_ANY / 2 ) if #SMT_on else ( CPU_CLK_UNHALTED.THREAD ) ) ) ) > 0.1 ) else 0 ) + RESOURCE_STALLS.SB ) ) ) * ( 1 - ( ( IDQ_UOPS_NOT_DELIVERED.CORE / ( ( 4 ) * ( ( CPU_CLK_UNHALTED.THREAD_ANY / 2 ) if #SMT_on else ( CPU_CLK_UNHALTED.THREAD ) ) ) ) + ( ( UOPS_ISSUED.ANY - ( UOPS_RETIRED.RETIRE_SLOTS ) + ( 4 ) * ( ( INT_MISC.RECOVERY_CYCLES_ANY / 2 ) if #SMT_on else INT_MISC.RECOVERY_CYCLES ) ) / ( ( 4 ) * ( ( CPU_CLK_UNHALTED.THREAD_ANY / 2 ) if #SMT_on else ( CPU_CLK_UNHALTED.THREAD ) ) ) ) + ( ( UOPS_RETIRED.RETIRE_SLOTS ) / ( ( 4 ) * ( ( CPU_CLK_UNHALTED.THREAD_ANY / 2 ) if #SMT_on else ( CPU_CLK_UNHALTED.THREAD ) ) ) ) ) ) )", 689 "MetricGroup": "Backend, TmaL2", 690 "MetricName": "tma_memory_bound_percent", 691 "ScaleUnit": "1%" 692 }, 693 { 694 "BriefDescription": "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.", 695 "MetricExpr": "100 * ( max( ( ( min( CPU_CLK_UNHALTED.THREAD , CYCLE_ACTIVITY.STALLS_LDM_PENDING ) ) - CYCLE_ACTIVITY.STALLS_L1D_PENDING ) / ( CPU_CLK_UNHALTED.THREAD ) , 0 ) )", 696 "MetricGroup": "CacheMisses, MemoryBound, TmaL3mem", 697 "MetricName": "tma_l1_bound_percent", 698 "ScaleUnit": "1%" 699 }, 700 { 701 "BriefDescription": "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.", 702 "MetricExpr": "100 * ( ( CYCLE_ACTIVITY.STALLS_L1D_PENDING - CYCLE_ACTIVITY.STALLS_L2_PENDING ) / ( CPU_CLK_UNHALTED.THREAD ) )", 703 "MetricGroup": "CacheMisses, MemoryBound, TmaL3mem", 704 "MetricName": "tma_l2_bound_percent", 705 "ScaleUnit": "1%" 706 }, 707 { 708 "BriefDescription": "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.", 709 "MetricExpr": "100 * ( ( MEM_LOAD_UOPS_RETIRED.L3_HIT / ( MEM_LOAD_UOPS_RETIRED.L3_HIT + ( 7 ) * MEM_LOAD_UOPS_RETIRED.L3_MISS ) ) * CYCLE_ACTIVITY.STALLS_L2_PENDING / ( CPU_CLK_UNHALTED.THREAD ) )", 710 "MetricGroup": "CacheMisses, MemoryBound, TmaL3mem", 711 "MetricName": "tma_l3_bound_percent", 712 "ScaleUnit": "1%" 713 }, 714 { 715 "BriefDescription": "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.", 716 "MetricExpr": "100 * ( min( ( ( 1 - ( MEM_LOAD_UOPS_RETIRED.L3_HIT / ( MEM_LOAD_UOPS_RETIRED.L3_HIT + ( 7 ) * MEM_LOAD_UOPS_RETIRED.L3_MISS ) ) ) * CYCLE_ACTIVITY.STALLS_L2_PENDING / ( CPU_CLK_UNHALTED.THREAD ) ) , ( 1 ) ) )", 717 "MetricGroup": "MemoryBound, TmaL3mem", 718 "MetricName": "tma_drabound_percent", 719 "ScaleUnit": "1%" 720 }, 721 { 722 "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. 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.", 723 "MetricExpr": "100 * ( RESOURCE_STALLS.SB / ( CPU_CLK_UNHALTED.THREAD ) )", 724 "MetricGroup": "MemoryBound, TmaL3mem", 725 "MetricName": "tma_store_bound_percent", 726 "ScaleUnit": "1%" 727 }, 728 { 729 "BriefDescription": "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).", 730 "MetricExpr": "100 * ( ( 1 - ( ( IDQ_UOPS_NOT_DELIVERED.CORE / ( ( 4 ) * ( ( CPU_CLK_UNHALTED.THREAD_ANY / 2 ) if #SMT_on else ( CPU_CLK_UNHALTED.THREAD ) ) ) ) + ( ( UOPS_ISSUED.ANY - ( UOPS_RETIRED.RETIRE_SLOTS ) + ( 4 ) * ( ( INT_MISC.RECOVERY_CYCLES_ANY / 2 ) if #SMT_on else INT_MISC.RECOVERY_CYCLES ) ) / ( ( 4 ) * ( ( CPU_CLK_UNHALTED.THREAD_ANY / 2 ) if #SMT_on else ( CPU_CLK_UNHALTED.THREAD ) ) ) ) + ( ( UOPS_RETIRED.RETIRE_SLOTS ) / ( ( 4 ) * ( ( CPU_CLK_UNHALTED.THREAD_ANY / 2 ) if #SMT_on else ( CPU_CLK_UNHALTED.THREAD ) ) ) ) ) ) - ( ( ( ( min( CPU_CLK_UNHALTED.THREAD , CYCLE_ACTIVITY.STALLS_LDM_PENDING ) ) + RESOURCE_STALLS.SB ) / ( ( ( min( CPU_CLK_UNHALTED.THREAD , CYCLE_ACTIVITY.CYCLES_NO_EXECUTE ) ) + ( cpu@UOPS_EXECUTED.CORE\\,cmask\\=0x1@ - ( cpu@UOPS_EXECUTED.CORE\\,cmask\\=0x3@ if ( ( INST_RETIRED.ANY / ( CPU_CLK_UNHALTED.THREAD ) ) > 1.8 ) else cpu@UOPS_EXECUTED.CORE\\,cmask\\=0x2@ ) ) / 2 - ( RS_EVENTS.EMPTY_CYCLES if ( ( ( 4 ) * ( min( CPU_CLK_UNHALTED.THREAD , IDQ_UOPS_NOT_DELIVERED.CYCLES_0_UOPS_DELIV.CORE ) ) / ( ( 4 ) * ( ( CPU_CLK_UNHALTED.THREAD_ANY / 2 ) if #SMT_on else ( CPU_CLK_UNHALTED.THREAD ) ) ) ) > 0.1 ) else 0 ) + RESOURCE_STALLS.SB ) if #SMT_on else ( ( min( CPU_CLK_UNHALTED.THREAD , CYCLE_ACTIVITY.CYCLES_NO_EXECUTE ) ) + cpu@UOPS_EXECUTED.CORE\\,cmask\\=0x1@ - ( cpu@UOPS_EXECUTED.CORE\\,cmask\\=0x3@ if ( ( INST_RETIRED.ANY / ( CPU_CLK_UNHALTED.THREAD ) ) > 1.8 ) else cpu@UOPS_EXECUTED.CORE\\,cmask\\=0x2@ ) - ( RS_EVENTS.EMPTY_CYCLES if ( ( ( 4 ) * ( min( CPU_CLK_UNHALTED.THREAD , IDQ_UOPS_NOT_DELIVERED.CYCLES_0_UOPS_DELIV.CORE ) ) / ( ( 4 ) * ( ( CPU_CLK_UNHALTED.THREAD_ANY / 2 ) if #SMT_on else ( CPU_CLK_UNHALTED.THREAD ) ) ) ) > 0.1 ) else 0 ) + RESOURCE_STALLS.SB ) ) ) * ( 1 - ( ( IDQ_UOPS_NOT_DELIVERED.CORE / ( ( 4 ) * ( ( CPU_CLK_UNHALTED.THREAD_ANY / 2 ) if #SMT_on else ( CPU_CLK_UNHALTED.THREAD ) ) ) ) + ( ( UOPS_ISSUED.ANY - ( UOPS_RETIRED.RETIRE_SLOTS ) + ( 4 ) * ( ( INT_MISC.RECOVERY_CYCLES_ANY / 2 ) if #SMT_on else INT_MISC.RECOVERY_CYCLES ) ) / ( ( 4 ) * ( ( CPU_CLK_UNHALTED.THREAD_ANY / 2 ) if #SMT_on else ( CPU_CLK_UNHALTED.THREAD ) ) ) ) + ( ( UOPS_RETIRED.RETIRE_SLOTS ) / ( ( 4 ) * ( ( CPU_CLK_UNHALTED.THREAD_ANY / 2 ) if #SMT_on else ( CPU_CLK_UNHALTED.THREAD ) ) ) ) ) ) ) )", 731 "MetricGroup": "Backend, TmaL2, Compute", 732 "MetricName": "tma_core_bound_percent", 733 "ScaleUnit": "1%" 734 }, 735 { 736 "BriefDescription": "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.", 737 "MetricExpr": "100 * ( 10 * ARITH.DIVIDER_UOPS / ( ( CPU_CLK_UNHALTED.THREAD_ANY / 2 ) if #SMT_on else ( CPU_CLK_UNHALTED.THREAD ) ) )", 738 "MetricGroup": "", 739 "MetricName": "tma_divider_percent", 740 "ScaleUnit": "1%" 741 }, 742 { 743 "BriefDescription": "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.", 744 "MetricExpr": "100 * ( ( ( ( ( min( CPU_CLK_UNHALTED.THREAD , CYCLE_ACTIVITY.CYCLES_NO_EXECUTE ) ) + ( cpu@UOPS_EXECUTED.CORE\\,cmask\\=0x1@ - ( cpu@UOPS_EXECUTED.CORE\\,cmask\\=0x3@ if ( ( INST_RETIRED.ANY / ( CPU_CLK_UNHALTED.THREAD ) ) > 1.8 ) else cpu@UOPS_EXECUTED.CORE\\,cmask\\=0x2@ ) ) / 2 - ( RS_EVENTS.EMPTY_CYCLES if ( ( ( 4 ) * ( min( CPU_CLK_UNHALTED.THREAD , IDQ_UOPS_NOT_DELIVERED.CYCLES_0_UOPS_DELIV.CORE ) ) / ( ( 4 ) * ( ( CPU_CLK_UNHALTED.THREAD_ANY / 2 ) if #SMT_on else ( CPU_CLK_UNHALTED.THREAD ) ) ) ) > 0.1 ) else 0 ) + RESOURCE_STALLS.SB ) if #SMT_on else ( ( min( CPU_CLK_UNHALTED.THREAD , CYCLE_ACTIVITY.CYCLES_NO_EXECUTE ) ) + cpu@UOPS_EXECUTED.CORE\\,cmask\\=0x1@ - ( cpu@UOPS_EXECUTED.CORE\\,cmask\\=0x3@ if ( ( INST_RETIRED.ANY / ( CPU_CLK_UNHALTED.THREAD ) ) > 1.8 ) else cpu@UOPS_EXECUTED.CORE\\,cmask\\=0x2@ ) - ( RS_EVENTS.EMPTY_CYCLES if ( ( ( 4 ) * ( min( CPU_CLK_UNHALTED.THREAD , IDQ_UOPS_NOT_DELIVERED.CYCLES_0_UOPS_DELIV.CORE ) ) / ( ( 4 ) * ( ( CPU_CLK_UNHALTED.THREAD_ANY / 2 ) if #SMT_on else ( CPU_CLK_UNHALTED.THREAD ) ) ) ) > 0.1 ) else 0 ) + RESOURCE_STALLS.SB ) ) - RESOURCE_STALLS.SB - ( min( CPU_CLK_UNHALTED.THREAD , CYCLE_ACTIVITY.STALLS_LDM_PENDING ) ) ) / ( CPU_CLK_UNHALTED.THREAD ) )", 745 "MetricGroup": "PortsUtil", 746 "MetricName": "tma_ports_utilization_percent", 747 "ScaleUnit": "1%" 748 }, 749 { 750 "BriefDescription": "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. ", 751 "MetricExpr": "100 * ( ( UOPS_RETIRED.RETIRE_SLOTS ) / ( ( 4 ) * ( ( CPU_CLK_UNHALTED.THREAD_ANY / 2 ) if #SMT_on else ( CPU_CLK_UNHALTED.THREAD ) ) ) )", 752 "MetricGroup": "TmaL1", 753 "MetricName": "tma_retiring_percent", 754 "ScaleUnit": "1%" 755 }, 756 { 757 "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). 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.", 758 "MetricExpr": "100 * ( ( ( UOPS_RETIRED.RETIRE_SLOTS ) / ( ( 4 ) * ( ( CPU_CLK_UNHALTED.THREAD_ANY / 2 ) if #SMT_on else ( CPU_CLK_UNHALTED.THREAD ) ) ) ) - ( ( ( ( UOPS_RETIRED.RETIRE_SLOTS ) / UOPS_ISSUED.ANY ) * IDQ.MS_UOPS / ( ( 4 ) * ( ( CPU_CLK_UNHALTED.THREAD_ANY / 2 ) if #SMT_on else ( CPU_CLK_UNHALTED.THREAD ) ) ) ) ) )", 759 "MetricGroup": "Retire, TmaL2", 760 "MetricName": "tma_light_operations_percent", 761 "ScaleUnit": "1%" 762 }, 763 { 764 "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. This highly-correlates with the uop length of these instructions/sequences.", 765 "MetricExpr": "100 * ( ( ( ( UOPS_RETIRED.RETIRE_SLOTS ) / UOPS_ISSUED.ANY ) * IDQ.MS_UOPS / ( ( 4 ) * ( ( CPU_CLK_UNHALTED.THREAD_ANY / 2 ) if #SMT_on else ( CPU_CLK_UNHALTED.THREAD ) ) ) ) )", 766 "MetricGroup": "Retire, TmaL2", 767 "MetricName": "tma_heavy_operations_percent", 768 "ScaleUnit": "1%" 769 }, 770 { 771 "BriefDescription": "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.", 772 "MetricExpr": "100 * ( ( ( UOPS_RETIRED.RETIRE_SLOTS ) / UOPS_ISSUED.ANY ) * IDQ.MS_UOPS / ( ( 4 ) * ( ( CPU_CLK_UNHALTED.THREAD_ANY / 2 ) if #SMT_on else ( CPU_CLK_UNHALTED.THREAD ) ) ) )", 773 "MetricGroup": "MicroSeq", 774 "MetricName": "tma_microcode_sequencer_percent", 775 "ScaleUnit": "1%" 776 } 777] 778