Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

perf tests: Add some pmu core functionality tests

Test behavior of PMU names and comparisons wrt suffixes using Intel
uncore_cha, marvell mrvl_ddr_pmu and S390's cpum_cf as examples.

Signed-off-by: Ian Rogers <irogers@google.com>
Acked-by: Namhyung Kim <namhyung@kernel.org>
Cc: Ravi Bangoria <ravi.bangoria@amd.com>
Cc: James Clark <james.clark@arm.com>
Cc: Robin Murphy <robin.murphy@arm.com>
Cc: Stephane Eranian <eranian@google.com>
Cc: Will Deacon <will@kernel.org>
Cc: Thomas Richter <tmricht@linux.ibm.com>
Cc: Bharat Bhushan <bbhushan2@marvell.com>
Cc: Bhaskara Budiredla <bbudiredla@marvell.com>
Cc: Tuan Phan <tuanphan@os.amperecomputing.com>
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Link: https://lore.kernel.org/r/20240515060114.3268149-3-irogers@google.com

authored by

Ian Rogers and committed by
Namhyung Kim
678be1ca 3241d46f

+99
+99
tools/perf/tests/pmu.c
··· 3 3 #include "evsel.h" 4 4 #include "parse-events.h" 5 5 #include "pmu.h" 6 + #include "pmus.h" 6 7 #include "tests.h" 7 8 #include "debug.h" 8 9 #include "fncache.h" ··· 341 340 return ret; 342 341 } 343 342 343 + static const char * const uncore_chas[] = { 344 + "uncore_cha_0", 345 + "uncore_cha_1", 346 + "uncore_cha_2", 347 + "uncore_cha_3", 348 + "uncore_cha_4", 349 + "uncore_cha_5", 350 + "uncore_cha_6", 351 + "uncore_cha_7", 352 + "uncore_cha_8", 353 + "uncore_cha_9", 354 + "uncore_cha_10", 355 + "uncore_cha_11", 356 + "uncore_cha_12", 357 + "uncore_cha_13", 358 + "uncore_cha_14", 359 + "uncore_cha_15", 360 + "uncore_cha_16", 361 + "uncore_cha_17", 362 + "uncore_cha_18", 363 + "uncore_cha_19", 364 + "uncore_cha_20", 365 + "uncore_cha_21", 366 + "uncore_cha_22", 367 + "uncore_cha_23", 368 + "uncore_cha_24", 369 + "uncore_cha_25", 370 + "uncore_cha_26", 371 + "uncore_cha_27", 372 + "uncore_cha_28", 373 + "uncore_cha_29", 374 + "uncore_cha_30", 375 + "uncore_cha_31", 376 + }; 377 + 378 + static const char * const mrvl_ddrs[] = { 379 + "mrvl_ddr_pmu_87e1b0000000", 380 + "mrvl_ddr_pmu_87e1b1000000", 381 + "mrvl_ddr_pmu_87e1b2000000", 382 + "mrvl_ddr_pmu_87e1b3000000", 383 + "mrvl_ddr_pmu_87e1b4000000", 384 + "mrvl_ddr_pmu_87e1b5000000", 385 + "mrvl_ddr_pmu_87e1b6000000", 386 + "mrvl_ddr_pmu_87e1b7000000", 387 + "mrvl_ddr_pmu_87e1b8000000", 388 + "mrvl_ddr_pmu_87e1b9000000", 389 + "mrvl_ddr_pmu_87e1ba000000", 390 + "mrvl_ddr_pmu_87e1bb000000", 391 + "mrvl_ddr_pmu_87e1bc000000", 392 + "mrvl_ddr_pmu_87e1bd000000", 393 + "mrvl_ddr_pmu_87e1be000000", 394 + "mrvl_ddr_pmu_87e1bf000000", 395 + }; 396 + 397 + static int test__name_len(struct test_suite *test __maybe_unused, int subtest __maybe_unused) 398 + { 399 + TEST_ASSERT_VAL("cpu", pmu_name_len_no_suffix("cpu") == strlen("cpu")); 400 + TEST_ASSERT_VAL("i915", pmu_name_len_no_suffix("i915") == strlen("i915")); 401 + TEST_ASSERT_VAL("cpum_cf", pmu_name_len_no_suffix("cpum_cf") == strlen("cpum_cf")); 402 + for (size_t i = 0; i < ARRAY_SIZE(uncore_chas); i++) { 403 + TEST_ASSERT_VAL("Strips uncore_cha suffix", 404 + pmu_name_len_no_suffix(uncore_chas[i]) == 405 + strlen("uncore_cha")); 406 + } 407 + for (size_t i = 0; i < ARRAY_SIZE(mrvl_ddrs); i++) { 408 + TEST_ASSERT_VAL("Strips mrvl_ddr_pmu suffix", 409 + pmu_name_len_no_suffix(mrvl_ddrs[i]) == 410 + strlen("mrvl_ddr_pmu")); 411 + } 412 + return TEST_OK; 413 + } 414 + 415 + static int test__name_cmp(struct test_suite *test __maybe_unused, int subtest __maybe_unused) 416 + { 417 + TEST_ASSERT_EQUAL("cpu", pmu_name_cmp("cpu", "cpu"), 0); 418 + TEST_ASSERT_EQUAL("i915", pmu_name_cmp("i915", "i915"), 0); 419 + TEST_ASSERT_EQUAL("cpum_cf", pmu_name_cmp("cpum_cf", "cpum_cf"), 0); 420 + TEST_ASSERT_VAL("i915", pmu_name_cmp("cpu", "i915") < 0); 421 + TEST_ASSERT_VAL("i915", pmu_name_cmp("i915", "cpu") > 0); 422 + TEST_ASSERT_VAL("cpum_cf", pmu_name_cmp("cpum_cf", "cpum_ce") > 0); 423 + TEST_ASSERT_VAL("cpum_cf", pmu_name_cmp("cpum_cf", "cpum_d0") < 0); 424 + for (size_t i = 1; i < ARRAY_SIZE(uncore_chas); i++) { 425 + TEST_ASSERT_VAL("uncore_cha suffixes ordered lt", 426 + pmu_name_cmp(uncore_chas[i-1], uncore_chas[i]) < 0); 427 + TEST_ASSERT_VAL("uncore_cha suffixes ordered gt", 428 + pmu_name_cmp(uncore_chas[i], uncore_chas[i-1]) > 0); 429 + } 430 + for (size_t i = 1; i < ARRAY_SIZE(mrvl_ddrs); i++) { 431 + TEST_ASSERT_VAL("mrvl_ddr_pmu suffixes ordered lt", 432 + pmu_name_cmp(mrvl_ddrs[i-1], mrvl_ddrs[i]) < 0); 433 + TEST_ASSERT_VAL("mrvl_ddr_pmu suffixes ordered gt", 434 + pmu_name_cmp(mrvl_ddrs[i], mrvl_ddrs[i-1]) > 0); 435 + } 436 + return TEST_OK; 437 + } 438 + 344 439 static struct test_case tests__pmu[] = { 345 440 TEST_CASE("Parsing with PMU format directory", pmu_format), 346 441 TEST_CASE("Parsing with PMU event", pmu_events), 347 442 TEST_CASE("PMU event names", pmu_event_names), 443 + TEST_CASE("PMU name combining", name_len), 444 + TEST_CASE("PMU name comparison", name_cmp), 348 445 { .name = NULL, } 349 446 }; 350 447