diff options
author | Kan Liang <kan.liang@intel.com> | 2014-10-07 11:08:52 -0400 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2014-10-15 15:10:24 -0400 |
commit | ffe59788e69b548bd62cc9a053253a8af2cdda1d (patch) | |
tree | 7437b7e30a9b75ba558384cad2bc04d0d8d5426e /tools | |
parent | ba32a4511c65e41958384d2f7a046a6ec6e151e5 (diff) |
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>
Diffstat (limited to 'tools')
-rw-r--r-- | tools/perf/tests/parse-events.c | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/tools/perf/tests/parse-events.c b/tools/perf/tests/parse-events.c index 5941927a4b7f..7f2f51f93619 100644 --- a/tools/perf/tests/parse-events.c +++ b/tools/perf/tests/parse-events.c | |||
@@ -457,6 +457,36 @@ static int test__checkevent_pmu_events(struct perf_evlist *evlist) | |||
457 | return 0; | 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 | static int test__checkterms_simple(struct list_head *terms) | 490 | static int test__checkterms_simple(struct list_head *terms) |
461 | { | 491 | { |
462 | struct parse_events_term *term; | 492 | struct parse_events_term *term; |
@@ -1554,6 +1584,12 @@ static int test_pmu_events(void) | |||
1554 | e.check = test__checkevent_pmu_events; | 1584 | e.check = test__checkevent_pmu_events; |
1555 | 1585 | ||
1556 | ret = test_event(&e); | 1586 | ret = test_event(&e); |
1587 | if (ret) | ||
1588 | break; | ||
1589 | snprintf(name, MAX_NAME, "%s:u,cpu/event=%s/u", ent->d_name, ent->d_name); | ||
1590 | e.name = name; | ||
1591 | e.check = test__checkevent_pmu_events_mix; | ||
1592 | ret = test_event(&e); | ||
1557 | #undef MAX_NAME | 1593 | #undef MAX_NAME |
1558 | } | 1594 | } |
1559 | 1595 | ||