lkml.org 
[lkml]   [2022]   [Jul]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    Subject[PATCH v3 12/17] perf pmu-events: Move test events/metrics to json
    From
    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>
    ---
    .../arch/test/test_soc/cpu/metrics.json | 64 +++++++++++++++++
    tools/perf/pmu-events/empty-pmu-events.c | 64 +++++++++++++++++
    tools/perf/tests/expand-cgroup.c | 17 +----
    tools/perf/tests/parse-metric.c | 68 +------------------
    4 files changed, 132 insertions(+), 81 deletions(-)
    create mode 100644 tools/perf/pmu-events/arch/test/test_soc/cpu/metrics.json

    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
    index 000000000000..42d9b5242fd7
    --- /dev/null
    +++ b/tools/perf/pmu-events/arch/test/test_soc/cpu/metrics.json
    @@ -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"
    + }
    +]
    diff --git a/tools/perf/pmu-events/empty-pmu-events.c b/tools/perf/pmu-events/empty-pmu-events.c
    index 8ef75aff996c..028f44efe48d 100644
    --- a/tools/perf/pmu-events/empty-pmu-events.c
    +++ b/tools/perf/pmu-events/empty-pmu-events.c
    @@ -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,
    diff --git a/tools/perf/tests/expand-cgroup.c b/tools/perf/tests/expand-cgroup.c
    index 411fc578e5a4..e79ee8621a90 100644
    --- a/tools/perf/tests/expand-cgroup.c
    +++ b/tools/perf/tests/expand-cgroup.c
    @@ -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) {
    diff --git a/tools/perf/tests/parse-metric.c b/tools/perf/tests/parse-metric.c
    index 7aebde7c37ec..30c7091857b8 100644
    --- a/tools/perf/tests/parse-metric.c
    +++ b/tools/perf/tests/parse-metric.c
    @@ -13,72 +13,6 @@
    #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);
    --
    2.37.1.455.g008518b4e5-goog
    \
     
     \ /
      Last update: 2022-07-29 09:45    [W:4.386 / U:0.136 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site