Lines Matching +full:ddr +full:- +full:pmu
1 // SPDX-License-Identifier: GPL-2.0
3 #include "parse-events.h"
4 #include "pmu.h"
11 #include "../pmu-events/pmu-events.h"
15 #include "util/parse-events.h"
20 /* used for matching against events from generated pmu-events.c */
34 /* PMU which we should match against */
39 struct perf_pmu pmu; member
80 .desc = "Memory cluster signals to block micro-op dispatch for any reason",
84 .alias_long_desc = "Memory cluster signals to block micro-op dispatch for any reason",
127 .pmu = "hisi_sccl,ddrc",
138 ….desc = "A cross-core snoop resulted from L3 Eviction which misses in some processor core. Unit: u…
140 .long_desc = "A cross-core snoop resulted from L3 Eviction which misses in some processor core",
141 .pmu = "uncore_cbox",
144 ….alias_long_desc = "A cross-core snoop resulted from L3 Eviction which misses in some processor co…
150 .name = "event-hyphen",
155 .pmu = "uncore_cbox",
164 .name = "event-two-hyph",
169 .pmu = "uncore_cbox",
183 .pmu = "hisi_sccl,l3c",
197 .pmu = "uncore_imc_free_running",
211 .pmu = "uncore_imc",
233 .desc = "ddr write-cycles event. Unit: uncore_sys_ddr_pmu ",
235 .pmu = "uncore_sys_ddr_pmu",
239 .alias_long_desc = "ddr write-cycles event. Unit: uncore_sys_ddr_pmu ",
247 .desc = "ccn read-cycles event. Unit: uncore_sys_ccn_pmu ",
249 .pmu = "uncore_sys_ccn_pmu",
253 .alias_long_desc = "ccn read-cycles event. Unit: uncore_sys_ccn_pmu ",
279 if (!is_same(e1->name, e2->name)) { in compare_pmu_events()
281 e1->name, e1->name, e2->name); in compare_pmu_events()
282 return -1; in compare_pmu_events()
285 if (!is_same(e1->compat, e2->compat)) { in compare_pmu_events()
287 e1->name, e1->compat, e2->compat); in compare_pmu_events()
288 return -1; in compare_pmu_events()
291 if (!is_same(e1->event, e2->event)) { in compare_pmu_events()
293 e1->name, e1->event, e2->event); in compare_pmu_events()
294 return -1; in compare_pmu_events()
297 if (!is_same(e1->desc, e2->desc)) { in compare_pmu_events()
299 e1->name, e1->desc, e2->desc); in compare_pmu_events()
300 return -1; in compare_pmu_events()
303 if (!is_same(e1->topic, e2->topic)) { in compare_pmu_events()
305 e1->name, e1->topic, e2->topic); in compare_pmu_events()
306 return -1; in compare_pmu_events()
309 if (!is_same(e1->long_desc, e2->long_desc)) { in compare_pmu_events()
311 e1->name, e1->long_desc, e2->long_desc); in compare_pmu_events()
312 return -1; in compare_pmu_events()
315 if (!is_same(e1->pmu, e2->pmu)) { in compare_pmu_events()
316 pr_debug2("testing event e1 %s: mismatched pmu string, %s vs %s\n", in compare_pmu_events()
317 e1->name, e1->pmu, e2->pmu); in compare_pmu_events()
318 return -1; in compare_pmu_events()
321 if (!is_same(e1->unit, e2->unit)) { in compare_pmu_events()
323 e1->name, e1->unit, e2->unit); in compare_pmu_events()
324 return -1; in compare_pmu_events()
327 if (!is_same(e1->perpkg, e2->perpkg)) { in compare_pmu_events()
329 e1->name, e1->perpkg, e2->perpkg); in compare_pmu_events()
330 return -1; in compare_pmu_events()
333 if (!is_same(e1->aggr_mode, e2->aggr_mode)) { in compare_pmu_events()
335 e1->name, e1->aggr_mode, e2->aggr_mode); in compare_pmu_events()
336 return -1; in compare_pmu_events()
339 if (!is_same(e1->metric_expr, e2->metric_expr)) { in compare_pmu_events()
341 e1->name, e1->metric_expr, e2->metric_expr); in compare_pmu_events()
342 return -1; in compare_pmu_events()
345 if (!is_same(e1->metric_name, e2->metric_name)) { in compare_pmu_events()
347 e1->name, e1->metric_name, e2->metric_name); in compare_pmu_events()
348 return -1; in compare_pmu_events()
351 if (!is_same(e1->metric_group, e2->metric_group)) { in compare_pmu_events()
353 e1->name, e1->metric_group, e2->metric_group); in compare_pmu_events()
354 return -1; in compare_pmu_events()
357 if (!is_same(e1->deprecated, e2->deprecated)) { in compare_pmu_events()
359 e1->name, e1->deprecated, e2->deprecated); in compare_pmu_events()
360 return -1; in compare_pmu_events()
363 if (!is_same(e1->metric_constraint, e2->metric_constraint)) { in compare_pmu_events()
365 e1->name, e1->metric_constraint, e2->metric_constraint); in compare_pmu_events()
366 return -1; in compare_pmu_events()
376 struct pmu_event const *event = &test_event->event; in compare_alias_to_test_event()
379 if (!is_same(alias->name, event->name)) { in compare_alias_to_test_event()
380 pr_debug("testing aliases PMU %s: mismatched name, %s vs %s\n", in compare_alias_to_test_event()
381 pmu_name, alias->name, event->name); in compare_alias_to_test_event()
382 return -1; in compare_alias_to_test_event()
385 if (!is_same(alias->desc, event->desc)) { in compare_alias_to_test_event()
386 pr_debug("testing aliases PMU %s: mismatched desc, %s vs %s\n", in compare_alias_to_test_event()
387 pmu_name, alias->desc, event->desc); in compare_alias_to_test_event()
388 return -1; in compare_alias_to_test_event()
391 if (!is_same(alias->long_desc, test_event->alias_long_desc)) { in compare_alias_to_test_event()
392 pr_debug("testing aliases PMU %s: mismatched long_desc, %s vs %s\n", in compare_alias_to_test_event()
393 pmu_name, alias->long_desc, in compare_alias_to_test_event()
394 test_event->alias_long_desc); in compare_alias_to_test_event()
395 return -1; in compare_alias_to_test_event()
398 if (!is_same(alias->topic, event->topic)) { in compare_alias_to_test_event()
399 pr_debug("testing aliases PMU %s: mismatched topic, %s vs %s\n", in compare_alias_to_test_event()
400 pmu_name, alias->topic, event->topic); in compare_alias_to_test_event()
401 return -1; in compare_alias_to_test_event()
404 if (!is_same(alias->str, test_event->alias_str)) { in compare_alias_to_test_event()
405 pr_debug("testing aliases PMU %s: mismatched str, %s vs %s\n", in compare_alias_to_test_event()
406 pmu_name, alias->str, test_event->alias_str); in compare_alias_to_test_event()
407 return -1; in compare_alias_to_test_event()
410 if (!is_same(alias->long_desc, test_event->alias_long_desc)) { in compare_alias_to_test_event()
411 pr_debug("testing aliases PMU %s: mismatched long desc, %s vs %s\n", in compare_alias_to_test_event()
412 pmu_name, alias->str, test_event->alias_long_desc); in compare_alias_to_test_event()
413 return -1; in compare_alias_to_test_event()
417 if (!is_same(alias->pmu_name, test_event->event.pmu)) { in compare_alias_to_test_event()
418 pr_debug("testing aliases PMU %s: mismatched pmu_name, %s vs %s\n", in compare_alias_to_test_event()
419 pmu_name, alias->pmu_name, test_event->event.pmu); in compare_alias_to_test_event()
420 return -1; in compare_alias_to_test_event()
434 if (!pe->name) in test__pmu_event_table_core_callback()
437 if (pe->pmu) in test__pmu_event_table_core_callback()
444 struct pmu_event const *event = &test_event->event; in test__pmu_event_table_core_callback()
446 if (strcmp(pe->name, event->name)) in test__pmu_event_table_core_callback()
452 return -1; in test__pmu_event_table_core_callback()
454 pr_debug("testing event table %s: pass\n", pe->name); in test__pmu_event_table_core_callback()
457 pr_err("testing event table: could not find event %s\n", pe->name); in test__pmu_event_table_core_callback()
458 return -1; in test__pmu_event_table_core_callback()
475 struct pmu_event const *event = &test_event->event; in test__pmu_event_table_sys_callback()
477 if (strcmp(pe->name, event->name)) in test__pmu_event_table_sys_callback()
485 pr_debug("testing sys event table %s: pass\n", pe->name); in test__pmu_event_table_sys_callback()
488 pr_debug("testing sys event table: could not find event %s\n", pe->name); in test__pmu_event_table_sys_callback()
494 /* Verify generated events from pmu-events.c are as expected */
505 ARRAY_SIZE(sys_events) - 3; in test__pmu_event_table()
508 return -1; in test__pmu_event_table()
534 if (!strcmp(test_event, alias->name)) in find_alias()
544 struct perf_pmu *pmu; in __test_core_pmu_event_aliases() local
551 return -1; in __test_core_pmu_event_aliases()
555 pmu = zalloc(sizeof(*pmu)); in __test_core_pmu_event_aliases()
556 if (!pmu) in __test_core_pmu_event_aliases()
557 return -1; in __test_core_pmu_event_aliases()
559 pmu->name = pmu_name; in __test_core_pmu_event_aliases()
561 pmu_add_cpu_aliases_table(&aliases, pmu, table); in __test_core_pmu_event_aliases()
565 struct pmu_event const *event = &test_event->event; in __test_core_pmu_event_aliases()
566 struct perf_pmu_alias *alias = find_alias(event->name, &aliases); in __test_core_pmu_event_aliases()
569 pr_debug("testing aliases core PMU %s: no alias, alias_table->name=%s\n", in __test_core_pmu_event_aliases()
570 pmu_name, event->name); in __test_core_pmu_event_aliases()
571 res = -1; in __test_core_pmu_event_aliases()
576 res = -1; in __test_core_pmu_event_aliases()
581 pr_debug2("testing aliases core PMU %s: matched event %s\n", in __test_core_pmu_event_aliases()
582 pmu_name, alias->name); in __test_core_pmu_event_aliases()
586 list_del(&a->list); in __test_core_pmu_event_aliases()
589 free(pmu); in __test_core_pmu_event_aliases()
597 struct perf_pmu *pmu = &test_pmu->pmu; in __test_uncore_pmu_event_aliases() local
598 const char *pmu_name = pmu->name; in __test_uncore_pmu_event_aliases()
606 return -1; in __test_uncore_pmu_event_aliases()
607 pmu_add_cpu_aliases_table(&aliases, pmu, events_table); in __test_uncore_pmu_event_aliases()
608 pmu_add_sys_aliases(&aliases, pmu); in __test_uncore_pmu_event_aliases()
615 for (table = &test_pmu->aliases[0]; *table; table++) in __test_uncore_pmu_event_aliases()
619 pr_debug("testing aliases uncore PMU %s: mismatch expected aliases (%d) vs found (%d)\n", in __test_uncore_pmu_event_aliases()
621 res = -1; in __test_uncore_pmu_event_aliases()
628 for (table = &test_pmu->aliases[0]; *table; table++) { in __test_uncore_pmu_event_aliases()
630 struct pmu_event const *event = &test_event->event; in __test_uncore_pmu_event_aliases()
632 if (!strcmp(event->name, alias->name)) { in __test_uncore_pmu_event_aliases()
644 pr_debug("testing aliases uncore PMU %s: could not match alias %s\n", in __test_uncore_pmu_event_aliases()
645 pmu_name, alias->name); in __test_uncore_pmu_event_aliases()
646 res = -1; in __test_uncore_pmu_event_aliases()
652 pr_debug("testing aliases uncore PMU %s: mismatch found aliases (%d) vs matched (%d)\n", in __test_uncore_pmu_event_aliases()
654 res = -1; in __test_uncore_pmu_event_aliases()
659 list_del(&a->list); in __test_uncore_pmu_event_aliases()
667 .pmu = {
676 .pmu = {
687 .pmu = {
696 .pmu = {
705 .pmu = {
714 .pmu = {
724 .pmu = {
739 struct perf_pmu *pmu = NULL; in test__aliases() local
742 while ((pmu = perf_pmu__scan(pmu)) != NULL) { in test__aliases()
745 if (!is_pmu_core(pmu->name)) in test__aliases()
748 if (list_empty(&pmu->format)) { in test__aliases()
749 pr_debug2("skipping testing core PMU %s\n", pmu->name); in test__aliases()
753 if (__test_core_pmu_event_aliases(pmu->name, &count)) { in test__aliases()
754 pr_debug("testing core PMU %s aliases: failed\n", pmu->name); in test__aliases()
755 return -1; in test__aliases()
759 pr_debug("testing core PMU %s aliases: no events to match\n", in test__aliases()
760 pmu->name); in test__aliases()
761 return -1; in test__aliases()
764 pr_debug("testing core PMU %s aliases: pass\n", pmu->name); in test__aliases()
801 return -ENOMEM; in check_parse_id()
805 return -ENOMEM; in check_parse_id()
812 * Every call to __parse_events will try to initialize the PMU in check_parse_id()
814 * PMU events to the test state so that we don't pick up in check_parse_id()
856 if (!pe->metric_expr) in test__parsing_callback()
859 pr_debug("Found metric '%s'\n", pe->metric_name); in test__parsing_callback()
868 return -ENOMEM; in test__parsing_callback()
873 return -ENOMEM; in test__parsing_callback()
876 perf_evlist__set_maps(&evlist->core, cpus, NULL); in test__parsing_callback()
879 err = metricgroup__parse_groups_test(evlist, table, pe->metric_name, in test__parsing_callback()
883 if (!strcmp(pe->metric_name, "M1") || !strcmp(pe->metric_name, "M2") || in test__parsing_callback()
884 !strcmp(pe->metric_name, "M3")) { in test__parsing_callback()
885 (*failures)--; in test__parsing_callback()
886 pr_debug("Expected broken metric %s skipping\n", pe->metric_name); in test__parsing_callback()
903 if (!strcmp(evsel->name, "duration_time")) in test__parsing_callback()
913 list_for_each_entry (mexp, &me->head, nd) { in test__parsing_callback()
914 if (strcmp(mexp->metric_name, pe->metric_name)) in test__parsing_callback()
918 (*failures)--; in test__parsing_callback()
923 pr_debug("Didn't find parsed metric %s", pe->metric_name); in test__parsing_callback()
927 pr_debug("Broken metric %s\n", pe->metric_name); in test__parsing_callback()
955 { "imx8_ddr0@read\\-cycles@ * 4 * 4", },
956 { "imx8_ddr0@axid\\-read\\,axi_mask\\=0xffff\\,axi_id\\=0x0000@ * 4", },
957 { "(cstate_pkg@c2\\-residency@ / msr@tsc@) * 100", },
958 { "(imx8_ddr0@read\\-cycles@ + imx8_ddr0@write\\-cycles@)", },
966 int ret = -1; in metric_parse_fake()
979 return -1; in metric_parse_fake()
988 hashmap__for_each_entry(ctx->ids, cur, bkt) in metric_parse_fake()
989 expr__add_id_val(ctx, strdup(cur->key), i++); in metric_parse_fake()
991 hashmap__for_each_entry(ctx->ids, cur, bkt) { in metric_parse_fake()
992 if (check_parse_fake(cur->key)) { in metric_parse_fake()
1005 hashmap__for_each_entry(ctx->ids, cur, bkt) in metric_parse_fake()
1006 expr__add_id_val(ctx, strdup(cur->key), i--); in metric_parse_fake()
1009 ret = -1; in metric_parse_fake()
1022 if (!pe->metric_expr) in test__parsing_fake_callback()
1025 return metric_parse_fake(pe->metric_expr); in test__parsing_fake_callback()
1052 TEST_CASE("PMU event table sanity", pmu_event_table),
1053 TEST_CASE("PMU event map aliases", aliases),
1054 TEST_CASE_REASON("Parsing of PMU event table metrics", parsing,
1056 TEST_CASE("Parsing of PMU event table metrics with fake PMUs", parsing_fake),
1061 .desc = "PMU events",