Commit 7ae5c03a authored by Ian Rogers's avatar Ian Rogers Committed by Arnaldo Carvalho de Melo
Browse files

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: default avatarIan 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: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 64234c14
Loading
Loading
Loading
Loading
+64 −0
Original line number Original line Diff line number Diff line
[
  {
    "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"
  }
]
+64 −0
Original line number Original line Diff line number Diff line
@@ -105,6 +105,70 @@ static const struct pmu_event pme_test_soc_cpu[] = {
		.desc = "L2 BTB Correction",
		.desc = "L2 BTB Correction",
		.topic = "branch",
		.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,
		.name = 0,
		.event = 0,
		.event = 0,
+2 −15
Original line number Original line Diff line number Diff line
@@ -180,26 +180,13 @@ static int expand_metric_events(void)
	struct evlist *evlist;
	struct evlist *evlist;
	struct rblist metric_events;
	struct rblist metric_events;
	const char metric_str[] = "CPI";
	const char metric_str[] = "CPI";

	const struct pmu_event *pme_test;
	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,
		},
	};


	evlist = evlist__new();
	evlist = evlist__new();
	TEST_ASSERT_VAL("failed to get evlist", evlist);
	TEST_ASSERT_VAL("failed to get evlist", evlist);


	rblist__init(&metric_events);
	rblist__init(&metric_events);
	pme_test = find_core_events_table("testarch", "testcpu");
	ret = metricgroup__parse_groups_test(evlist, pme_test, metric_str,
	ret = metricgroup__parse_groups_test(evlist, pme_test, metric_str,
					     false, false, &metric_events);
					     false, false, &metric_events);
	if (ret < 0) {
	if (ret < 0) {
+2 −66
Original line number Original line Diff line number Diff line
@@ -13,72 +13,6 @@
#include "stat.h"
#include "stat.h"
#include "pmu.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 {
struct value {
	const char	*event;
	const char	*event;
	u64		 val;
	u64		 val;
@@ -138,6 +72,7 @@ static int __compute_metric(const char *name, struct value *vals,
	struct rblist metric_events = {
	struct rblist metric_events = {
		.nr_entries = 0,
		.nr_entries = 0,
	};
	};
	const struct pmu_event *pme_test;
	struct perf_cpu_map *cpus;
	struct perf_cpu_map *cpus;
	struct runtime_stat st;
	struct runtime_stat st;
	struct evlist *evlist;
	struct evlist *evlist;
@@ -161,6 +96,7 @@ static int __compute_metric(const char *name, struct value *vals,
	runtime_stat__init(&st);
	runtime_stat__init(&st);


	/* Parse the metric into metric_events list. */
	/* Parse the metric into metric_events list. */
	pme_test = find_core_events_table("testarch", "testcpu");
	err = metricgroup__parse_groups_test(evlist, pme_test, name,
	err = metricgroup__parse_groups_test(evlist, pme_test, name,
					     false, false,
					     false, false,
					     &metric_events);
					     &metric_events);