* [PATCH v2 0/3] Fix usage of trace events with '-' in trace system name. @ 2014-04-25 15:34 Alexander Yarygin 2014-04-25 15:34 ` [PATCH 1/3] perf tools: parse tracepooints with '-' in " Alexander Yarygin ` (2 more replies) 0 siblings, 3 replies; 5+ messages in thread From: Alexander Yarygin @ 2014-04-25 15:34 UTC (permalink / raw) To: Jiri Olsa, Arnaldo Carvalho de Melo Cc: Peter Zijlstra, Paul Mackerras, Ingo Molnar, Paolo Bonzini, KVM, linux-s390, Christian Borntraeger, Cornelia Huck, linux-kernel, Alexander Yarygin This path series allows perf tool to work with trace events, which have '-' in trace system name (i.e. kvm-s390:*). v2 changes: - added s390 specific test to perf/tests/parse-events.c - use array with a constant length in the parse rule - rephrased description of patch 1/3 Patch 2/3 makes possible to add arch specific tests to perf/tests/parse-events.c. Alexander Yarygin (3): perf tools: parse tracepooints with '-' in system name perf-test: add numeric identifier to evlist_test perf-test: Add a test of kvm-390: trace event tools/perf/tests/parse-events.c | 142 ++++++++++++++++++++++++++------------- tools/perf/util/parse-events.y | 12 ++++ 2 files changed, 109 insertions(+), 45 deletions(-) -- 1.7.9.5 ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 1/3] perf tools: parse tracepooints with '-' in system name 2014-04-25 15:34 [PATCH v2 0/3] Fix usage of trace events with '-' in trace system name Alexander Yarygin @ 2014-04-25 15:34 ` Alexander Yarygin 2014-04-28 7:27 ` Christian Borntraeger 2014-04-25 15:34 ` [PATCH 2/3] perf-test: add numeric identifier to evlist_test Alexander Yarygin 2014-04-25 15:34 ` [PATCH 3/3] perf-test: Add a test of kvm-390: trace event Alexander Yarygin 2 siblings, 1 reply; 5+ messages in thread From: Alexander Yarygin @ 2014-04-25 15:34 UTC (permalink / raw) To: Jiri Olsa, Arnaldo Carvalho de Melo Cc: Peter Zijlstra, Paul Mackerras, Ingo Molnar, Paolo Bonzini, KVM, linux-s390, Christian Borntraeger, Cornelia Huck, linux-kernel, Alexander Yarygin Trace events potentially can have a '-' in their trace system name, e.g. kvm on s390 defines kvm-s390:* tracepoints. tools/perf could not parse them, because there was no rule for this: $ sudo ./perf top -e "kvm-s390:*" invalid or unsupported event: 'kvm-s390:*' This patch adds an extra rule to event_legacy_tracepoint which handles those cases. Without the patch, perf will not accept such tracepoints in the -e option. Signed-off-by: Alexander Yarygin <yarygin@linux.vnet.ibm.com> --- tools/perf/util/parse-events.y | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/tools/perf/util/parse-events.y b/tools/perf/util/parse-events.y index 4eb67ec..ac9db9f 100644 --- a/tools/perf/util/parse-events.y +++ b/tools/perf/util/parse-events.y @@ -299,6 +299,18 @@ PE_PREFIX_MEM PE_VALUE sep_dc } event_legacy_tracepoint: +PE_NAME '-' PE_NAME ':' PE_NAME +{ + struct parse_events_evlist *data = _data; + struct list_head *list; + char sys_name[128]; + snprintf(&sys_name, 128, "%s-%s", $1, $3); + + ALLOC_LIST(list); + ABORT_ON(parse_events_add_tracepoint(list, &data->idx, &sys_name, $5)); + $$ = list; +} +| PE_NAME ':' PE_NAME { struct parse_events_evlist *data = _data; -- 1.7.9.5 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 1/3] perf tools: parse tracepooints with '-' in system name 2014-04-25 15:34 ` [PATCH 1/3] perf tools: parse tracepooints with '-' in " Alexander Yarygin @ 2014-04-28 7:27 ` Christian Borntraeger 0 siblings, 0 replies; 5+ messages in thread From: Christian Borntraeger @ 2014-04-28 7:27 UTC (permalink / raw) To: Jiri Olsa Cc: Alexander Yarygin, Arnaldo Carvalho de Melo, Peter Zijlstra, Paul Mackerras, Ingo Molnar, Paolo Bonzini, KVM, linux-s390, Cornelia Huck, linux-kernel On 25/04/14 17:34, Alexander Yarygin wrote: > Trace events potentially can have a '-' in their trace system name, > e.g. kvm on s390 defines kvm-s390:* tracepoints. > tools/perf could not parse them, because there was no rule for this: > $ sudo ./perf top -e "kvm-s390:*" > invalid or unsupported event: 'kvm-s390:*' > > This patch adds an extra rule to event_legacy_tracepoint which handles > those cases. Without the patch, perf will not accept such tracepoints in > the -e option. > > Signed-off-by: Alexander Yarygin <yarygin@linux.vnet.ibm.com> Tested-by: Christian Borntraeger <borntraeger@de.ibm.com> Acked-by: Christian Borntraeger <borntraeger@de.ibm.com> Jiri, please review and handle via your tree if ok. I gave the other two patches also a quick test on my s390 box. Seems to work fine. > --- > tools/perf/util/parse-events.y | 12 ++++++++++++ > 1 file changed, 12 insertions(+) > > diff --git a/tools/perf/util/parse-events.y b/tools/perf/util/parse-events.y > index 4eb67ec..ac9db9f 100644 > --- a/tools/perf/util/parse-events.y > +++ b/tools/perf/util/parse-events.y > @@ -299,6 +299,18 @@ PE_PREFIX_MEM PE_VALUE sep_dc > } > > event_legacy_tracepoint: > +PE_NAME '-' PE_NAME ':' PE_NAME > +{ > + struct parse_events_evlist *data = _data; > + struct list_head *list; > + char sys_name[128]; > + snprintf(&sys_name, 128, "%s-%s", $1, $3); > + > + ALLOC_LIST(list); > + ABORT_ON(parse_events_add_tracepoint(list, &data->idx, &sys_name, $5)); > + $$ = list; > +} > +| > PE_NAME ':' PE_NAME > { > struct parse_events_evlist *data = _data; > ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 2/3] perf-test: add numeric identifier to evlist_test 2014-04-25 15:34 [PATCH v2 0/3] Fix usage of trace events with '-' in trace system name Alexander Yarygin 2014-04-25 15:34 ` [PATCH 1/3] perf tools: parse tracepooints with '-' in " Alexander Yarygin @ 2014-04-25 15:34 ` Alexander Yarygin 2014-04-25 15:34 ` [PATCH 3/3] perf-test: Add a test of kvm-390: trace event Alexander Yarygin 2 siblings, 0 replies; 5+ messages in thread From: Alexander Yarygin @ 2014-04-25 15:34 UTC (permalink / raw) To: Jiri Olsa, Arnaldo Carvalho de Melo Cc: Peter Zijlstra, Paul Mackerras, Ingo Molnar, Paolo Bonzini, KVM, linux-s390, Christian Borntraeger, Cornelia Huck, linux-kernel, Alexander Yarygin In tests/parse-events.c test cases are declared in evlist_test[] arrays. Elements of arrays are initialized in following pattern: [i] = { .name = ..., .check = ..., }, When perf-test is running with '-v' option, 'i' variable will be printed for every existing test. However, we can't add any arch specific tests inside #ifdefs, because it will create collision between the element number inside #ifdef and the next one outside. This patch adds 'id' field in evlist_test, uses it as a test identifier and removes explicit numbering of array elements. This helps to number tests with gaps. Signed-off-by: Alexander Yarygin <yarygin@linux.vnet.ibm.com> --- tools/perf/tests/parse-events.c | 135 ++++++++++++++++++++++++++------------- 1 file changed, 90 insertions(+), 45 deletions(-) diff --git a/tools/perf/tests/parse-events.c b/tools/perf/tests/parse-events.c index 8605ff5..81dbd5a 100644 --- a/tools/perf/tests/parse-events.c +++ b/tools/perf/tests/parse-events.c @@ -1174,188 +1174,233 @@ static int test__all_tracepoints(struct perf_evlist *evlist) struct evlist_test { const char *name; __u32 type; + const int id; int (*check)(struct perf_evlist *evlist); }; static struct evlist_test test__events[] = { - [0] = { + { .name = "syscalls:sys_enter_open", .check = test__checkevent_tracepoint, + .id = 0, }, - [1] = { + { .name = "syscalls:*", .check = test__checkevent_tracepoint_multi, + .id = 1, }, - [2] = { + { .name = "r1a", .check = test__checkevent_raw, + .id = 2, }, - [3] = { + { .name = "1:1", .check = test__checkevent_numeric, + .id = 3, }, - [4] = { + { .name = "instructions", .check = test__checkevent_symbolic_name, + .id = 4, }, - [5] = { + { .name = "cycles/period=100000,config2/", .check = test__checkevent_symbolic_name_config, + .id = 5, }, - [6] = { + { .name = "faults", .check = test__checkevent_symbolic_alias, + .id = 6, }, - [7] = { + { .name = "L1-dcache-load-miss", .check = test__checkevent_genhw, + .id = 7, }, - [8] = { + { .name = "mem:0", .check = test__checkevent_breakpoint, + .id = 8, }, - [9] = { + { .name = "mem:0:x", .check = test__checkevent_breakpoint_x, + .id = 9, }, - [10] = { + { .name = "mem:0:r", .check = test__checkevent_breakpoint_r, + .id = 10, }, - [11] = { + { .name = "mem:0:w", .check = test__checkevent_breakpoint_w, + .id = 11, }, - [12] = { + { .name = "syscalls:sys_enter_open:k", .check = test__checkevent_tracepoint_modifier, + .id = 12, }, - [13] = { + { .name = "syscalls:*:u", .check = test__checkevent_tracepoint_multi_modifier, + .id = 13, }, - [14] = { + { .name = "r1a:kp", .check = test__checkevent_raw_modifier, + .id = 14, }, - [15] = { + { .name = "1:1:hp", .check = test__checkevent_numeric_modifier, + .id = 15, }, - [16] = { + { .name = "instructions:h", .check = test__checkevent_symbolic_name_modifier, + .id = 16, }, - [17] = { + { .name = "faults:u", .check = test__checkevent_symbolic_alias_modifier, + .id = 17, }, - [18] = { + { .name = "L1-dcache-load-miss:kp", .check = test__checkevent_genhw_modifier, + .id = 18, }, - [19] = { + { .name = "mem:0:u", .check = test__checkevent_breakpoint_modifier, + .id = 19, }, - [20] = { + { .name = "mem:0:x:k", .check = test__checkevent_breakpoint_x_modifier, + .id = 20, }, - [21] = { + { .name = "mem:0:r:hp", .check = test__checkevent_breakpoint_r_modifier, + .id = 21, }, - [22] = { + { .name = "mem:0:w:up", .check = test__checkevent_breakpoint_w_modifier, + .id = 22, }, - [23] = { + { .name = "r1,syscalls:sys_enter_open:k,1:1:hp", .check = test__checkevent_list, + .id = 23, }, - [24] = { + { .name = "instructions:G", .check = test__checkevent_exclude_host_modifier, + .id = 24, }, - [25] = { + { .name = "instructions:H", .check = test__checkevent_exclude_guest_modifier, + .id = 25, }, - [26] = { + { .name = "mem:0:rw", .check = test__checkevent_breakpoint_rw, + .id = 26, }, - [27] = { + { .name = "mem:0:rw:kp", .check = test__checkevent_breakpoint_rw_modifier, + .id = 27, }, - [28] = { + { .name = "{instructions:k,cycles:upp}", .check = test__group1, + .id = 28, }, - [29] = { + { .name = "{faults:k,cache-references}:u,cycles:k", .check = test__group2, + .id = 29, }, - [30] = { + { .name = "group1{syscalls:sys_enter_open:H,cycles:kppp},group2{cycles,1:3}:G,instructions:u", .check = test__group3, + .id = 30, }, - [31] = { + { .name = "{cycles:u,instructions:kp}:p", .check = test__group4, + .id = 31, }, - [32] = { + { .name = "{cycles,instructions}:G,{cycles:G,instructions:G},cycles", .check = test__group5, + .id = 32, }, - [33] = { + { .name = "*:*", .check = test__all_tracepoints, + .id = 33, }, - [34] = { + { .name = "{cycles,cache-misses:G}:H", .check = test__group_gh1, + .id = 34, }, - [35] = { + { .name = "{cycles,cache-misses:H}:G", .check = test__group_gh2, + .id = 35, }, - [36] = { + { .name = "{cycles:G,cache-misses:H}:u", .check = test__group_gh3, + .id = 36, }, - [37] = { + { .name = "{cycles:G,cache-misses:H}:uG", .check = test__group_gh4, + .id = 37, }, - [38] = { + { .name = "{cycles,cache-misses,branch-misses}:S", .check = test__leader_sample1, + .id = 38, }, - [39] = { + { .name = "{instructions,branch-misses}:Su", .check = test__leader_sample2, + .id = 39, }, - [40] = { + { .name = "instructions:uDp", .check = test__checkevent_pinned_modifier, + .id = 40, }, - [41] = { + { .name = "{cycles,cache-misses,branch-misses}:D", .check = test__pinned_group, + .id = 41, }, }; static struct evlist_test test__events_pmu[] = { - [0] = { + { .name = "cpu/config=10,config1,config2=3,period=1000/u", .check = test__checkevent_pmu, + .id = 0, }, - [1] = { + { .name = "cpu/config=1,name=krava/u,cpu/config=2/u", .check = test__checkevent_pmu_name, + .id = 1, }, }; @@ -1402,7 +1447,7 @@ static int test_events(struct evlist_test *events, unsigned cnt) for (i = 0; i < cnt; i++) { struct evlist_test *e = &events[i]; - pr_debug("running test %d '%s'\n", i, e->name); + pr_debug("running test %d '%s'\n", e->id, e->name); ret1 = test_event(e); if (ret1) ret2 = ret1; -- 1.7.9.5 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 3/3] perf-test: Add a test of kvm-390: trace event 2014-04-25 15:34 [PATCH v2 0/3] Fix usage of trace events with '-' in trace system name Alexander Yarygin 2014-04-25 15:34 ` [PATCH 1/3] perf tools: parse tracepooints with '-' in " Alexander Yarygin 2014-04-25 15:34 ` [PATCH 2/3] perf-test: add numeric identifier to evlist_test Alexander Yarygin @ 2014-04-25 15:34 ` Alexander Yarygin 2 siblings, 0 replies; 5+ messages in thread From: Alexander Yarygin @ 2014-04-25 15:34 UTC (permalink / raw) To: Jiri Olsa, Arnaldo Carvalho de Melo Cc: Peter Zijlstra, Paul Mackerras, Ingo Molnar, Paolo Bonzini, KVM, linux-s390, Christian Borntraeger, Cornelia Huck, linux-kernel, Alexander Yarygin Add a s390 specific test of a hardcoded trace event with '-' in the name. Signed-off-by: Alexander Yarygin <yarygin@linux.vnet.ibm.com> --- tools/perf/tests/parse-events.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tools/perf/tests/parse-events.c b/tools/perf/tests/parse-events.c index 81dbd5a..deba669 100644 --- a/tools/perf/tests/parse-events.c +++ b/tools/perf/tests/parse-events.c @@ -1389,6 +1389,13 @@ static struct evlist_test test__events[] = { .check = test__pinned_group, .id = 41, }, +#if defined(__s390x__) + { + .name = "kvm-s390:kvm_s390_create_vm", + .check = test__checkevent_tracepoint, + .id = 100, + }, +#endif }; static struct evlist_test test__events_pmu[] = { -- 1.7.9.5 ^ permalink raw reply related [flat|nested] 5+ messages in thread
end of thread, other threads:[~2014-04-28 7:27 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2014-04-25 15:34 [PATCH v2 0/3] Fix usage of trace events with '-' in trace system name Alexander Yarygin 2014-04-25 15:34 ` [PATCH 1/3] perf tools: parse tracepooints with '-' in " Alexander Yarygin 2014-04-28 7:27 ` Christian Borntraeger 2014-04-25 15:34 ` [PATCH 2/3] perf-test: add numeric identifier to evlist_test Alexander Yarygin 2014-04-25 15:34 ` [PATCH 3/3] perf-test: Add a test of kvm-390: trace event Alexander Yarygin
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).