Messages in this thread Patch in this message | | | Date | Tue, 9 Apr 2024 18:13:13 -0700 | Subject | [PATCH v2 2/2] perf tests: Add a pmus core functionality test suite | From | Ian Rogers <> |
| |
Test behavior of PMU names and comparisons wrt suffixes using Intel uncore_cha and marvell mrvl_ddr_pmu as examples.
Signed-off-by: Ian Rogers <irogers@google.com> --- tools/perf/tests/Build | 1 + tools/perf/tests/builtin-test.c | 1 + tools/perf/tests/pmus.c | 108 ++++++++++++++++++++++++++++++++ tools/perf/tests/tests.h | 2 + 4 files changed, 112 insertions(+) create mode 100644 tools/perf/tests/pmus.c
diff --git a/tools/perf/tests/Build b/tools/perf/tests/Build index c7f9d9676095..a7bab6e9300f 100644 --- a/tools/perf/tests/Build +++ b/tools/perf/tests/Build @@ -14,6 +14,7 @@ perf-y += perf-record.o perf-y += evsel-roundtrip-name.o perf-$(CONFIG_LIBTRACEEVENT) += evsel-tp-sched.o perf-y += fdarray.o +perf-y += pmus.o perf-y += pmu.o perf-y += pmu-events.o perf-y += hists_common.o diff --git a/tools/perf/tests/builtin-test.c b/tools/perf/tests/builtin-test.c index d13ee7683d9d..c90f270a469a 100644 --- a/tools/perf/tests/builtin-test.c +++ b/tools/perf/tests/builtin-test.c @@ -68,6 +68,7 @@ static struct test_suite *generic_tests[] = { &suite__parse_events, &suite__expr, &suite__PERF_RECORD, + &suite__pmus, &suite__pmu, &suite__pmu_events, &suite__dso_data, diff --git a/tools/perf/tests/pmus.c b/tools/perf/tests/pmus.c new file mode 100644 index 000000000000..6279c925e689 --- /dev/null +++ b/tools/perf/tests/pmus.c @@ -0,0 +1,108 @@ +// SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) +#include "pmus.h" +#include "tests.h" +#include <string.h> +#include <linux/kernel.h> + +static const char * const uncore_chas[] = { + "uncore_cha_0", + "uncore_cha_1", + "uncore_cha_2", + "uncore_cha_3", + "uncore_cha_4", + "uncore_cha_5", + "uncore_cha_6", + "uncore_cha_7", + "uncore_cha_8", + "uncore_cha_9", + "uncore_cha_10", + "uncore_cha_11", + "uncore_cha_12", + "uncore_cha_13", + "uncore_cha_14", + "uncore_cha_15", + "uncore_cha_16", + "uncore_cha_17", + "uncore_cha_18", + "uncore_cha_19", + "uncore_cha_20", + "uncore_cha_21", + "uncore_cha_22", + "uncore_cha_23", + "uncore_cha_24", + "uncore_cha_25", + "uncore_cha_26", + "uncore_cha_27", + "uncore_cha_28", + "uncore_cha_29", + "uncore_cha_30", + "uncore_cha_31", +}; + +static const char * const mrvl_ddrs[] = { + "mrvl_ddr_pmu_87e1b0000000", + "mrvl_ddr_pmu_87e1b1000000", + "mrvl_ddr_pmu_87e1b2000000", + "mrvl_ddr_pmu_87e1b3000000", + "mrvl_ddr_pmu_87e1b4000000", + "mrvl_ddr_pmu_87e1b5000000", + "mrvl_ddr_pmu_87e1b6000000", + "mrvl_ddr_pmu_87e1b7000000", + "mrvl_ddr_pmu_87e1b8000000", + "mrvl_ddr_pmu_87e1b9000000", + "mrvl_ddr_pmu_87e1ba000000", + "mrvl_ddr_pmu_87e1bb000000", + "mrvl_ddr_pmu_87e1bc000000", + "mrvl_ddr_pmu_87e1bd000000", + "mrvl_ddr_pmu_87e1be000000", + "mrvl_ddr_pmu_87e1bf000000", +}; + +static int test__name_len(struct test_suite *test __maybe_unused, int subtest __maybe_unused) +{ + TEST_ASSERT_EQUAL("cpu", pmu_name_len_no_suffix("cpu"), (int)strlen("cpu")); + TEST_ASSERT_EQUAL("i915", pmu_name_len_no_suffix("i915"), (int)strlen("i915")); + for (size_t i = 0; i < ARRAY_SIZE(uncore_chas); i++) { + TEST_ASSERT_EQUAL("Strips uncore_cha suffix", + pmu_name_len_no_suffix(uncore_chas[i]), + (int)strlen("uncore_cha")); + } + for (size_t i = 0; i < ARRAY_SIZE(mrvl_ddrs); i++) { + TEST_ASSERT_EQUAL("Strips mrvl_ddr_pmu suffix", + pmu_name_len_no_suffix(mrvl_ddrs[i]), + (int)strlen("mrvl_ddr_pmu")); + } + return TEST_OK; +} + +static int test__name_cmp(struct test_suite *test __maybe_unused, int subtest __maybe_unused) +{ + TEST_ASSERT_EQUAL("cpu", pmu_name_cmp("cpu", "cpu"), 0); + TEST_ASSERT_EQUAL("i915", pmu_name_cmp("i915", "i915"), 0); + TEST_ASSERT_VAL("i915", pmu_name_cmp("cpu", "i915") < 0); + TEST_ASSERT_VAL("i915", pmu_name_cmp("i915", "cpu") > 0); + for (size_t i = 1; i < ARRAY_SIZE(uncore_chas); i++) { + TEST_ASSERT_VAL("uncore_cha suffixes ordered lt", + pmu_name_cmp(uncore_chas[i-1], uncore_chas[i]) < 0); + TEST_ASSERT_VAL("uncore_cha suffixes ordered gt", + pmu_name_cmp(uncore_chas[i], uncore_chas[i-1]) > 0); + } + for (size_t i = 1; i < ARRAY_SIZE(mrvl_ddrs); i++) { + TEST_ASSERT_VAL("mrvl_ddr_pmu suffixes ordered lt", + pmu_name_cmp(mrvl_ddrs[i-1], mrvl_ddrs[i]) < 0); + TEST_ASSERT_VAL("mrvl_ddr_pmu suffixes ordered gt", + pmu_name_cmp(mrvl_ddrs[i], mrvl_ddrs[i-1]) > 0); + } + return TEST_OK; +} + +static struct test_case tests__pmus[] = { + TEST_CASE("PMU name combining", name_len), + TEST_CASE("PMU name comparison", name_cmp), + { .name = NULL, } +}; + +struct test_suite suite__pmus = { + .desc = "PMUs test", + .test_cases = tests__pmus, +}; diff --git a/tools/perf/tests/tests.h b/tools/perf/tests/tests.h index 3aa7701ee0e9..03278f0f7698 100644 --- a/tools/perf/tests/tests.h +++ b/tools/perf/tests/tests.h @@ -3,6 +3,7 @@ #define TESTS_H #include <stdbool.h> +#include <debug.h> enum { TEST_OK = 0, @@ -81,6 +82,7 @@ DECLARE_SUITE(PERF_RECORD); DECLARE_SUITE(perf_evsel__roundtrip_name_test); DECLARE_SUITE(perf_evsel__tp_sched_test); DECLARE_SUITE(syscall_openat_tp_fields); +DECLARE_SUITE(pmus); DECLARE_SUITE(pmu); DECLARE_SUITE(pmu_events); DECLARE_SUITE(attr); -- 2.44.0.478.gd926399ef9-goog
| |