perf pmu-events: Move test events/metrics to JSON
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>
This commit is contained in:
parent
64234c141b
commit
7ae5c03a27
|
@ -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"
|
||||
}
|
||||
]
|
|
@ -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,
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue