Messages in this thread Patch in this message | | | From | Jiri Olsa <> | Subject | [PATCH 14/14] perf tests: Add parse metric test for frontend metric | Date | Mon, 25 May 2020 00:42:19 +0200 |
| |
Adding new metri test for frontend metric. It's stolen from x86 pmu events.
Signed-off-by: Jiri Olsa <jolsa@kernel.org> --- tools/perf/tests/parse-metric.c | 46 +++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+)
diff --git a/tools/perf/tests/parse-metric.c b/tools/perf/tests/parse-metric.c index 3005d27c5c48..38f20850bba3 100644 --- a/tools/perf/tests/parse-metric.c +++ b/tools/perf/tests/parse-metric.c @@ -15,6 +15,11 @@ static struct pmu_event pme_test[] = { .metric_expr = "inst_retired.any / cpu_clk_unhalted.thread", .metric_name = "IPC", }, +{ + .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", +}, }; static struct pmu_events_map map = { @@ -110,8 +115,49 @@ static int test_ipc(void) return 0; } +static int test_frontend(void) +{ + double ratio; + struct rblist metric_events = { 0 }; + struct evlist *evlist; + struct evsel *evsel; + struct value vals[] = { + { .event = "idq_uops_not_delivered.core", .val = 300 }, + { .event = "cpu_clk_unhalted.thread", .val = 200 }, + { .event = "cpu_clk_unhalted.one_thread_active", .val = 400 }, + { .event = "cpu_clk_unhalted.ref_xclk", .val = 600 }, + { 0 }, + }; + struct runtime_stat st; + int err; + + evlist = evlist__new(); + if (!evlist) + return -1; + + err = metricgroup__parse_groups_test(evlist, &map, + "Frontend_Bound_SMT", + false, false, + &metric_events); + + TEST_ASSERT_VAL("failed to parse metrics", err == 0); + + runtime_stat__init(&st); + load_runtime_stat(&st, evlist, vals); + + evsel = evlist__first(evlist); + ratio = compute_single(&metric_events, evsel, &st); + + TEST_ASSERT_VAL("Frontend_Bound_SMT failed, wrong ratio", ratio == 0.45); + + runtime_stat__exit(&st); + evlist__delete(evlist); + return 0; +} + int test__parse_metric(struct test *test __maybe_unused, int subtest __maybe_unused) { TEST_ASSERT_VAL("IPC failed", test_ipc() == 0); + TEST_ASSERT_VAL("frontend failed", test_frontend() == 0); return 0; } -- 2.25.4
| |