xref: /freebsd/lib/libpmc/pmu-events/arch/x86/amdzen4/pipeline.json (revision 0d4ad64077bcddcff5a170ee97273db95b9cab55)
1[
2  {
3    "MetricName": "total_dispatch_slots",
4    "BriefDescription": "Total dispatch slots (upto 6 instructions can be dispatched in each cycle).",
5    "MetricExpr": "6 * ls_not_halted_cyc"
6  },
7  {
8    "MetricName": "frontend_bound",
9    "BriefDescription": "Fraction of dispatch slots that remained unused because the frontend did not supply enough instructions/ops.",
10    "MetricExpr": "d_ratio(de_no_dispatch_per_slot.no_ops_from_frontend, total_dispatch_slots)",
11    "MetricGroup": "PipelineL1",
12    "ScaleUnit": "100%"
13  },
14  {
15    "MetricName": "bad_speculation",
16    "BriefDescription": "Fraction of dispatched ops that did not retire.",
17    "MetricExpr": "d_ratio(de_src_op_disp.all - ex_ret_ops, total_dispatch_slots)",
18    "MetricGroup": "PipelineL1",
19    "ScaleUnit": "100%"
20  },
21  {
22    "MetricName": "backend_bound",
23    "BriefDescription": "Fraction of dispatch slots that remained unused because of backend stalls.",
24    "MetricExpr": "d_ratio(de_no_dispatch_per_slot.backend_stalls, total_dispatch_slots)",
25    "MetricGroup": "PipelineL1",
26    "ScaleUnit": "100%"
27  },
28  {
29    "MetricName": "smt_contention",
30    "BriefDescription": "Fraction of dispatch slots that remained unused because the other thread was selected.",
31    "MetricExpr": "d_ratio(de_no_dispatch_per_slot.smt_contention, total_dispatch_slots)",
32    "MetricGroup": "PipelineL1",
33    "ScaleUnit": "100%"
34  },
35  {
36    "MetricName": "retiring",
37    "BriefDescription": "Fraction of dispatch slots used by ops that retired.",
38    "MetricExpr": "d_ratio(ex_ret_ops, total_dispatch_slots)",
39    "MetricGroup": "PipelineL1",
40    "ScaleUnit": "100%"
41  },
42  {
43    "MetricName": "frontend_bound_latency",
44    "BriefDescription": "Fraction of dispatch slots that remained unused because of a latency bottleneck in the frontend (such as instruction cache or TLB misses).",
45    "MetricExpr": "d_ratio((6 * cpu@de_no_dispatch_per_slot.no_ops_from_frontend\\,cmask\\=0x6@), total_dispatch_slots)",
46    "MetricGroup": "PipelineL2;frontend_bound_group",
47    "ScaleUnit": "100%"
48  },
49  {
50    "MetricName": "frontend_bound_bandwidth",
51    "BriefDescription": "Fraction of dispatch slots that remained unused because of a bandwidth bottleneck in the frontend (such as decode or op cache fetch bandwidth).",
52    "MetricExpr": "d_ratio(de_no_dispatch_per_slot.no_ops_from_frontend - (6 * cpu@de_no_dispatch_per_slot.no_ops_from_frontend\\,cmask\\=0x6@), total_dispatch_slots)",
53    "MetricGroup": "PipelineL2;frontend_bound_group",
54    "ScaleUnit": "100%"
55  },
56  {
57    "MetricName": "bad_speculation_mispredicts",
58    "BriefDescription": "Fraction of dispatched ops that were flushed due to branch mispredicts.",
59    "MetricExpr": "d_ratio(bad_speculation * ex_ret_brn_misp, ex_ret_brn_misp + resyncs_or_nc_redirects)",
60    "MetricGroup": "PipelineL2;bad_speculation_group",
61    "ScaleUnit": "100%"
62  },
63  {
64    "MetricName": "bad_speculation_pipeline_restarts",
65    "BriefDescription": "Fraction of dispatched ops that were flushed due to pipeline restarts (resyncs).",
66    "MetricExpr": "d_ratio(bad_speculation * resyncs_or_nc_redirects, ex_ret_brn_misp + resyncs_or_nc_redirects)",
67    "MetricGroup": "PipelineL2;bad_speculation_group",
68    "ScaleUnit": "100%"
69  },
70  {
71    "MetricName": "backend_bound_memory",
72    "BriefDescription": "Fraction of dispatch slots that remained unused because of stalls due to the memory subsystem.",
73    "MetricExpr": "backend_bound * d_ratio(ex_no_retire.load_not_complete, ex_no_retire.not_complete)",
74    "MetricGroup": "PipelineL2;backend_bound_group",
75    "ScaleUnit": "100%"
76  },
77  {
78    "MetricName": "backend_bound_cpu",
79    "BriefDescription": "Fraction of dispatch slots that remained unused because of stalls not related to the memory subsystem.",
80    "MetricExpr": "backend_bound * (1 - d_ratio(ex_no_retire.load_not_complete, ex_no_retire.not_complete))",
81    "MetricGroup": "PipelineL2;backend_bound_group",
82    "ScaleUnit": "100%"
83  },
84  {
85    "MetricName": "retiring_fastpath",
86    "BriefDescription": "Fraction of dispatch slots used by fastpath ops that retired.",
87    "MetricExpr": "retiring * (1 - d_ratio(ex_ret_ucode_ops, ex_ret_ops))",
88    "MetricGroup": "PipelineL2;retiring_group",
89    "ScaleUnit": "100%"
90  },
91  {
92    "MetricName": "retiring_microcode",
93    "BriefDescription": "Fraction of dispatch slots used by microcode ops that retired.",
94    "MetricExpr": "retiring * d_ratio(ex_ret_ucode_ops, ex_ret_ops)",
95    "MetricGroup": "PipelineL2;retiring_group",
96    "ScaleUnit": "100%"
97  }
98]
99