perf pmu-events: Move test events/metrics to JSON
authorIan Rogers <irogers@google.com>
Fri, 12 Aug 2022 23:09:44 +0000 (16:09 -0700)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Sat, 13 Aug 2022 18:01:15 +0000 (15:01 -0300)
Move arrays of pmu_events into the JSON code so that it may be
regenerated and modified by the jevents.py script.

Signed-off-by: Ian Rogers <irogers@google.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: James Clark <james.clark@arm.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: John Garry <john.garry@huawei.com>
Cc: Kan Liang <kan.liang@linux.intel.com>
Cc: Leo Yan <leo.yan@linaro.org>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Mike Leach <mike.leach@linaro.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Ravi Bangoria <ravi.bangoria@amd.com>
Cc: Stephane Eranian <eranian@google.com>
Cc: Will Deacon <will@kernel.org>
Cc: Xing Zhengjun <zhengjun.xing@linux.intel.com>
Cc: linux-arm-kernel@lists.infradead.org
Link: https://lore.kernel.org/r/20220812230949.683239-10-irogers@google.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/pmu-events/arch/test/test_soc/cpu/metrics.json [new file with mode: 0644]
tools/perf/pmu-events/empty-pmu-events.c
tools/perf/tests/expand-cgroup.c
tools/perf/tests/parse-metric.c

diff --git a/tools/perf/pmu-events/arch/test/test_soc/cpu/metrics.json b/tools/perf/pmu-events/arch/test/test_soc/cpu/metrics.json
new file mode 100644 (file)
index 0000000..42d9b52
--- /dev/null
@@ -0,0 +1,64 @@
+[
+  {
+    "MetricExpr": "1 / IPC",
+    "MetricName": "CPI"
+  },
+  {
+    "MetricExpr": "inst_retired.any / cpu_clk_unhalted.thread",
+    "MetricName": "IPC",
+    "MetricGroup": "group1"
+  },
+  {
+    "MetricExpr": "idq_uops_not_delivered.core / (4 * (( ( cpu_clk_unhalted.thread / 2 ) * ( 1 + cpu_clk_unhalted.one_thread_active / cpu_clk_unhalted.ref_xclk ) )))",
+    "MetricName": "Frontend_Bound_SMT"
+  },
+  {
+    "MetricExpr": "l1d\\-loads\\-misses / inst_retired.any",
+    "MetricName": "dcache_miss_cpi"
+  },
+  {
+    "MetricExpr": "l1i\\-loads\\-misses / inst_retired.any",
+    "MetricName": "icache_miss_cycles"
+  },
+  {
+    "MetricExpr": "(dcache_miss_cpi + icache_miss_cycles)",
+    "MetricName": "cache_miss_cycles",
+    "MetricGroup": "group1"
+  },
+  {
+    "MetricExpr": "l2_rqsts.demand_data_rd_hit + l2_rqsts.pf_hit + l2_rqsts.rfo_hit",
+    "MetricName": "DCache_L2_All_Hits"
+  },
+  {
+    "MetricExpr": "max(l2_rqsts.all_demand_data_rd - l2_rqsts.demand_data_rd_hit, 0) + l2_rqsts.pf_miss + l2_rqsts.rfo_miss",
+    "MetricName": "DCache_L2_All_Miss"
+  },
+  {
+    "MetricExpr": "dcache_l2_all_hits + dcache_l2_all_miss",
+    "MetricName": "DCache_L2_All"
+  },
+  {
+    "MetricExpr": "d_ratio(dcache_l2_all_hits, dcache_l2_all)",
+    "MetricName": "DCache_L2_Hits"
+  },
+  {
+    "MetricExpr": "d_ratio(dcache_l2_all_miss, dcache_l2_all)",
+    "MetricName": "DCache_L2_Misses"
+  },
+  {
+    "MetricExpr": "ipc + M2",
+    "MetricName": "M1"
+  },
+  {
+    "MetricExpr": "ipc + M1",
+    "MetricName": "M2"
+  },
+  {
+    "MetricExpr": "1/M3",
+    "MetricName": "M3"
+  },
+  {
+    "MetricExpr": "64 * l1d.replacement / 1000000000 / duration_time",
+    "MetricName": "L1D_Cache_Fill_BW"
+  }
+]
index 8ef75af..028f44e 100644 (file)
@@ -105,6 +105,70 @@ static const struct pmu_event pme_test_soc_cpu[] = {
                .desc = "L2 BTB Correction",
                .topic = "branch",
        },
+       {
+               .metric_expr    = "1 / IPC",
+               .metric_name    = "CPI",
+       },
+       {
+               .metric_expr    = "inst_retired.any / cpu_clk_unhalted.thread",
+               .metric_name    = "IPC",
+               .metric_group   = "group1",
+       },
+       {
+               .metric_expr    = "idq_uops_not_delivered.core / (4 * (( ( cpu_clk_unhalted.thread / 2 ) * "
+               "( 1 + cpu_clk_unhalted.one_thread_active / cpu_clk_unhalted.ref_xclk ) )))",
+               .metric_name    = "Frontend_Bound_SMT",
+       },
+       {
+               .metric_expr    = "l1d\\-loads\\-misses / inst_retired.any",
+               .metric_name    = "dcache_miss_cpi",
+       },
+       {
+               .metric_expr    = "l1i\\-loads\\-misses / inst_retired.any",
+               .metric_name    = "icache_miss_cycles",
+       },
+       {
+               .metric_expr    = "(dcache_miss_cpi + icache_miss_cycles)",
+               .metric_name    = "cache_miss_cycles",
+               .metric_group   = "group1",
+       },
+       {
+               .metric_expr    = "l2_rqsts.demand_data_rd_hit + l2_rqsts.pf_hit + l2_rqsts.rfo_hit",
+               .metric_name    = "DCache_L2_All_Hits",
+       },
+       {
+               .metric_expr    = "max(l2_rqsts.all_demand_data_rd - l2_rqsts.demand_data_rd_hit, 0) + "
+               "l2_rqsts.pf_miss + l2_rqsts.rfo_miss",
+               .metric_name    = "DCache_L2_All_Miss",
+       },
+       {
+               .metric_expr    = "dcache_l2_all_hits + dcache_l2_all_miss",
+               .metric_name    = "DCache_L2_All",
+       },
+       {
+               .metric_expr    = "d_ratio(dcache_l2_all_hits, dcache_l2_all)",
+               .metric_name    = "DCache_L2_Hits",
+       },
+       {
+               .metric_expr    = "d_ratio(dcache_l2_all_miss, dcache_l2_all)",
+               .metric_name    = "DCache_L2_Misses",
+       },
+       {
+               .metric_expr    = "ipc + M2",
+               .metric_name    = "M1",
+       },
+       {
+               .metric_expr    = "ipc + M1",
+               .metric_name    = "M2",
+       },
+       {
+               .metric_expr    = "1/M3",
+               .metric_name    = "M3",
+       },
+       {
+               .metric_expr    = "64 * l1d.replacement / 1000000000 / duration_time",
+               .metric_name    = "L1D_Cache_Fill_BW",
+       },
        {
                .name = 0,
                .event = 0,
index 411fc57..e79ee86 100644 (file)
@@ -180,26 +180,13 @@ static int expand_metric_events(void)
        struct evlist *evlist;
        struct rblist metric_events;
        const char metric_str[] = "CPI";
-
-       struct pmu_event pme_test[] = {
-               {
-                       .metric_expr    = "instructions / cycles",
-                       .metric_name    = "IPC",
-               },
-               {
-                       .metric_expr    = "1 / IPC",
-                       .metric_name    = "CPI",
-               },
-               {
-                       .metric_expr    = NULL,
-                       .metric_name    = NULL,
-               },
-       };
+       const struct pmu_event *pme_test;
 
        evlist = evlist__new();
        TEST_ASSERT_VAL("failed to get evlist", evlist);
 
        rblist__init(&metric_events);
+       pme_test = find_core_events_table("testarch", "testcpu");
        ret = metricgroup__parse_groups_test(evlist, pme_test, metric_str,
                                             false, false, &metric_events);
        if (ret < 0) {
index 7aebde7..30c7091 100644 (file)
 #include "stat.h"
 #include "pmu.h"
 
-static struct pmu_event pme_test[] = {
-{
-       .metric_expr    = "inst_retired.any / cpu_clk_unhalted.thread",
-       .metric_name    = "IPC",
-       .metric_group   = "group1",
-},
-{
-       .metric_expr    = "idq_uops_not_delivered.core / (4 * (( ( cpu_clk_unhalted.thread / 2 ) * "
-                         "( 1 + cpu_clk_unhalted.one_thread_active / cpu_clk_unhalted.ref_xclk ) )))",
-       .metric_name    = "Frontend_Bound_SMT",
-},
-{
-       .metric_expr    = "l1d\\-loads\\-misses / inst_retired.any",
-       .metric_name    = "dcache_miss_cpi",
-},
-{
-       .metric_expr    = "l1i\\-loads\\-misses / inst_retired.any",
-       .metric_name    = "icache_miss_cycles",
-},
-{
-       .metric_expr    = "(dcache_miss_cpi + icache_miss_cycles)",
-       .metric_name    = "cache_miss_cycles",
-       .metric_group   = "group1",
-},
-{
-       .metric_expr    = "l2_rqsts.demand_data_rd_hit + l2_rqsts.pf_hit + l2_rqsts.rfo_hit",
-       .metric_name    = "DCache_L2_All_Hits",
-},
-{
-       .metric_expr    = "max(l2_rqsts.all_demand_data_rd - l2_rqsts.demand_data_rd_hit, 0) + "
-                         "l2_rqsts.pf_miss + l2_rqsts.rfo_miss",
-       .metric_name    = "DCache_L2_All_Miss",
-},
-{
-       .metric_expr    = "dcache_l2_all_hits + dcache_l2_all_miss",
-       .metric_name    = "DCache_L2_All",
-},
-{
-       .metric_expr    = "d_ratio(dcache_l2_all_hits, dcache_l2_all)",
-       .metric_name    = "DCache_L2_Hits",
-},
-{
-       .metric_expr    = "d_ratio(dcache_l2_all_miss, dcache_l2_all)",
-       .metric_name    = "DCache_L2_Misses",
-},
-{
-       .metric_expr    = "ipc + m2",
-       .metric_name    = "M1",
-},
-{
-       .metric_expr    = "ipc + m1",
-       .metric_name    = "M2",
-},
-{
-       .metric_expr    = "1/m3",
-       .metric_name    = "M3",
-},
-{
-       .metric_expr    = "64 * l1d.replacement / 1000000000 / duration_time",
-       .metric_name    = "L1D_Cache_Fill_BW",
-},
-{
-       .name   = NULL,
-}
-};
-
 struct value {
        const char      *event;
        u64              val;
@@ -138,6 +72,7 @@ static int __compute_metric(const char *name, struct value *vals,
        struct rblist metric_events = {
                .nr_entries = 0,
        };
+       const struct pmu_event *pme_test;
        struct perf_cpu_map *cpus;
        struct runtime_stat st;
        struct evlist *evlist;
@@ -161,6 +96,7 @@ static int __compute_metric(const char *name, struct value *vals,
        runtime_stat__init(&st);
 
        /* Parse the metric into metric_events list. */
+       pme_test = find_core_events_table("testarch", "testcpu");
        err = metricgroup__parse_groups_test(evlist, pme_test, name,
                                             false, false,
                                             &metric_events);