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

perf test: Add test case for pmu event new style format

Add test case in automated tests suite. It checks not only the two types
of pmu event stytle formats "pmu_event_name" and "cpu/pmu_event_name/",
but also the different formats mixtures which are more likely to trigger
parse issue.

The patch set including this one has been tested by the perf automated
test:

./perf test parse -v"

On haswell, ivybridge and Romley platform.

The patch set also has been tested on haswell by the following script.

Note: please make sure that your test system support TSX and
L1-dcache-loads events. Otherwise, you may want to change the events to
other pmu events.

[lk@localhost ~]$ cat perf_style_test.sh
# hardware events + kernel pmu event with different style
perf stat -x, -e cycles,mem-stores,tx-start sleep 2
perf stat -x, -e cpu-cycles,cycles-ct,cycles-t sleep 2
perf stat -x, -e cycles,cpu/cycles-ct/,cpu/cycles-t/ sleep 2
perf stat -x, -e instructions,cpu/tx-start/ sleep 2
perf stat -x, -e '{cycles,tx-start}' sleep 2
perf stat -x, -e '{cycles,cpu/tx-start/}' sleep 2

# HW Cache event + kernel pmu event with different style
perf stat -x, -e L1-dcache-loads,cpu/mem-stores/,tx-start sleep 2
perf stat -x, -e L1-dcache-loads,mem-stores,cpu/tx-start/ sleep 2
perf stat -x, -e '{L1-dcache-loads,mem-stores}' sleep 2
perf stat -x, -e '{L1-dcache-loads,cpu/tx-start/}' sleep 2

# Raw event + kernel pmu event with different style:
perf stat -x, -e cpu/event=0xc0,umask=0x00/,mem-loads,cpu/mem-stores/ sleep 2
perf stat -x, -e cpu/event=0xc0,umask=0x00/,tx-start,cpu/el-start/ sleep 2
perf stat -x, -e '{cpu/event=0xc0,umask=0x00/,tx-start}' sleep 2

Signed-off-by: Kan Liang <kan.liang@intel.com>
Acked-by: Jiri Olsa <jolsa@redhat.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Link: http://lkml.kernel.org/r/1412694532-23391-5-git-send-email-kan.liang@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

authored by

Kan Liang and committed by
Arnaldo Carvalho de Melo
ffe59788 ba32a451

+36
+36
tools/perf/tests/parse-events.c
··· 457 457 return 0; 458 458 } 459 459 460 + 461 + static int test__checkevent_pmu_events_mix(struct perf_evlist *evlist) 462 + { 463 + struct perf_evsel *evsel = perf_evlist__first(evlist); 464 + 465 + /* pmu-event:u */ 466 + TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries); 467 + TEST_ASSERT_VAL("wrong exclude_user", 468 + !evsel->attr.exclude_user); 469 + TEST_ASSERT_VAL("wrong exclude_kernel", 470 + evsel->attr.exclude_kernel); 471 + TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 472 + TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 473 + TEST_ASSERT_VAL("wrong pinned", !evsel->attr.pinned); 474 + 475 + /* cpu/pmu-event/u*/ 476 + evsel = perf_evsel__next(evsel); 477 + TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries); 478 + TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type); 479 + TEST_ASSERT_VAL("wrong exclude_user", 480 + !evsel->attr.exclude_user); 481 + TEST_ASSERT_VAL("wrong exclude_kernel", 482 + evsel->attr.exclude_kernel); 483 + TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 484 + TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 485 + TEST_ASSERT_VAL("wrong pinned", !evsel->attr.pinned); 486 + 487 + return 0; 488 + } 489 + 460 490 static int test__checkterms_simple(struct list_head *terms) 461 491 { 462 492 struct parse_events_term *term; ··· 1583 1553 e.name = name; 1584 1554 e.check = test__checkevent_pmu_events; 1585 1555 1556 + ret = test_event(&e); 1557 + if (ret) 1558 + break; 1559 + snprintf(name, MAX_NAME, "%s:u,cpu/event=%s/u", ent->d_name, ent->d_name); 1560 + e.name = name; 1561 + e.check = test__checkevent_pmu_events_mix; 1586 1562 ret = test_event(&e); 1587 1563 #undef MAX_NAME 1588 1564 }