perf test: Ignore .scale and other special files
PATCH 1/1 perf test: Ignore .scale and other special files
From: Andi Kleen <[email protected]>
perf test tries to parse all entries in /sys/devices/cpu/events/. Ignore the special entries like '.scale', which cannot be directly parsed as an event. This patch assumes all files containing a '.' are special and can be ignored.
--- tools/perf/tests/parse-events.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
tools/perf/tests/parse-events.c +2 -2
@@ -1783,8 +1783,8 @@ static int test_pmu_events(void)struct evlist_test e;char name[MAX_NAME ]; -if (!strcmp (ent->d_name,"." ) || - !strcmp (ent->d_name,".." )) +/* Names containing . are special and cannot be used directly */ +if (strchr (ent->d_name,'.' ))continue ;snprintf (name,MAX_NAME ,"cpu/event=%s/u" , ent->d_name);
Signature · 1 line
2.5.5
Arnaldo Carvalho de Melo
maintainerEm Mon, Jun 06, 2016 at 07:36:06AM -0700, Andi Kleen escreveu:
tools/perf/tests/parse-events.c static int test_pmu_events(void) · line 1785
Quoted 12 lines
perf test tries to parse all entries in
/sys/devices/cpu/events/. Ignore the special entries like '.scale', which cannot be directly parsed as an event. This patch assumes all files containing a '.' are special and can be ignored.+++
b/tools/perf/tests/parse-events.ctools/perf/tests/parse-events.c +2
-2@@ -1783,8 +1783,8 @@ static int test_pmu_events(void) -if (!strcmp (ent->d_name,"." ) || - !strcmp (ent->d_name,".." )) +/* Names containing . are special and cannot be used directly */ +if (strchr (ent->d_name,'.' ))continue ;
Ok, this is a more generic fix than the one I used here (adding: || strends(ent->d_name, ".scale"), I'll use yours, but this gets us to the following error:
[root@jouet ~]# perf test -v 5 2>&1 | tail
running test 49 'r1234/name=rawpmu/'
running test 50 '4:0x6530160/name=numpmu/'
running test 51 'L1-dcache-misses/name=cachepmu/'
running test 0 'cpu/config=10,config1,config2=3,period=1000/u'
running test 1 'cpu/config=1,name=krava/u,cpu/config=2/u'
running test 2 'cpu/config=1,call-graph=fp,time,period=100000/,cpu/config=2,call-graph=no,time=0,period=2000/' failed to parse event 'topdown-total-slots:u,cpu/event=topdown-total-slots/u', err 1
test child finished with 1
---- end ----
parse events tests: FAILED!
[root@jouet ~]# cat /sys/devices/cpu/events/topdown-total-slots event=0x3c,umask=0x0,any=1[root@jouet ~]#
[root@jouet ~]#
[root@jouet ~]# cat /sys/devices/cpu/events/bus-cycles
event=0x3c,umask=0x01
[root@jouet ~]#
I.e seems to be bickering about a missing newline in the sysfs entry, will check the parser...
- Arnaldo
Arnaldo Carvalho de Melo
maintainerEm Mon, Jun 06, 2016 at 11:51:48AM -0300, Arnaldo Carvalho de Melo escreveu:
Quoted 20 lines
But this gets us to the following error:
[root@jouet ~]# perf test -v 5 2>&1 | tail
running test 49 'r1234/name=rawpmu/'
running test 50 '4:0x6530160/name=numpmu/'
running test 51 'L1-dcache-misses/name=cachepmu/'
running test 0 'cpu/config=10,config1,config2=3,period=1000/u'
running test 1 'cpu/config=1,name=krava/u,cpu/config=2/u'
running test 2 'cpu/config=1,call-graph=fp,time,period=100000/,cpu/config=2,call-graph=no,time=0,period=2000/' failed to parse event 'topdown-total-slots:u,cpu/event=topdown-total-slots/u', err 1
test child finished with 1
---- end ----
parse events tests: FAILED!
[root@jouet ~]# cat/sys/devices/cpu/events/topdown-total-slotsevent=0x3c,umask=0x0,any=1[root@jouet ~]#
[root@jouet ~]#
[root@jouet ~]# cat/sys/devices/cpu/events/bus-cycles
event=0x3c,umask=0x01
[root@jouet ~]#
Quoted 1 line
I.e seems to be bickering about a missing newline in the sysfs entry, will check the parser...
Maybe something else, as there are other files there without the newline and the code introducing the topdown events doesn't look to be problematic in this regard...
- Arnaldo
Arnaldo Carvalho de Melo
maintainerEm Mon, Jun 06, 2016 at 11:54:58AM -0300, Arnaldo Carvalho de Melo escreveu:
Quoted 21 lines
Em Mon, Jun 06, 2016 at 11:51:48AM -0300, Arnaldo Carvalho de Melo escreveu:
Quoted 20 lines
But this gets us to the following error:
[root@jouet ~]# perf test -v 5 2>&1 | tail
running test 49 'r1234/name=rawpmu/'
running test 50 '4:0x6530160/name=numpmu/'
running test 51 'L1-dcache-misses/name=cachepmu/'
running test 0 'cpu/config=10,config1,config2=3,period=1000/u'
running test 1 'cpu/config=1,name=krava/u,cpu/config=2/u'
running test 2 'cpu/config=1,call-graph=fp,time,period=100000/,cpu/config=2,call-graph=no,time=0,period=2000/' failed to parse event 'topdown-total-slots:u,cpu/event=topdown-total-slots/u', err 1
test child finished with 1
---- end ----
parse events tests: FAILED!
[root@jouet ~]# cat/sys/devices/cpu/events/topdown-total-slotsevent=0x3c,umask=0x0,any=1[root@jouet ~]#
[root@jouet ~]#
[root@jouet ~]# cat/sys/devices/cpu/events/bus-cycles
event=0x3c,umask=0x01
[root@jouet ~]#
Quoted 5 lines
Quoted 1 line
I.e seems to be bickering about a missing newline in the sysfs entry, will check the parser...
Maybe something else, as there are other files there without the newline and the code introducing the topdown events doesn't look to be problematic in this regard...
[root@jouet ~]# perf stat -e cpu/topdown-total-slots/ usleep 1
Performance counter stats for 'usleep 1':
1,756,310 cpu/topdown-total-slots/
0.000797426 seconds time elapsed[root@jouet ~]# perf stat -e cpu/topdown-total-slots/u usleep 1
Performance counter stats for 'usleep 1':
606,770 cpu/topdown-total-slots/u
0.000728467 seconds time elapsed[root@jouet ~]# perf stat -e cpu/event=topdown-total-slots/u usleep 1
Performance counter stats for 'usleep 1':
639,170 cpu/event=topdown-total-slots/u
0.000797547 seconds time elapsed[root@jouet ~]#
Both work, i.e. unrestricted wrt kernel/user, user only (/u suffix), like in the test, it is just when we try:
[root@jouet ~]# perf stat -e topdown-total-slots:u,cpu/event=topdown-total-slots/u usleep 1 event syntax error: 'topdown-total-slots:u,cpu/event=topdown-total-slots/u'
\___ parser error
Run 'perf list' for a list of valid events
Usage: perf stat [<options>] [<command>]
-e, --event <event> event selector. use 'perf list' to list available events
[root@jouet ~]#
that it fails, Jiri, probably something obvious to you? :-)
- Arnaldo
Quoted 11 lines
[root@jouet ~]# perf stat -e topdown-total-slots:u,cpu/event=topdown-total-slots/u usleep 1 event syntax error: 'topdown-total-slots:u,cpu/event=topdown-total-slots/u'
\___ parser error
Run 'perf list' for a list of valid eventsUsage: perf stat [<options>] [<command>]
-e, --event <event> event selector. use 'perf list' to list available events
[root@jouet ~]#that it fails, Jiri, probably something obvious to you? :-)
Works for me here
./perf stat -e topdown-total-slots:u,cpu/event=topdown-total-slots/u sleep 1
Performance counter stats for 'sleep 1':
515,204 topdown-total-slots:u
514,712 cpu/event=topdown-total-slots/u
1.001438114 seconds time elapsedDid you perhaps miss this hunk?
tools/perf/util/parse-events.l +1 -2
@@ -259,6 +259,7 @@ cycles-ct { return str(yyscanner, PE_KERNEL_PMU_EVENT); } cycles-t { return str(yyscanner, PE_KERNEL_PMU_EVENT); } mem-loads { return str(yyscanner, PE_KERNEL_PMU_EVENT); } mem-stores { return str(yyscanner, PE_KERNEL_PMU_EVENT); } +topdown-[a-z-]+ { return str(yyscanner, PE_KERN -Andi --
[email protected] -- Speaking for myself only
Arnaldo Carvalho de Melo
maintainerEm Mon, Jun 06, 2016 at 09:31:16AM -0700, Andi Kleen escreveu:
Quoted 10 lines
Quoted 5 lines
[root@jouet ~]# perf stat -e topdown-total-slots:u,cpu/event=topdown-total-slots/u usleep 1 event syntax error: 'topdown-total-slots:u,cpu/event=topdown-total-slots/u'
\___ parser errorthat it fails, Jiri, probably something obvious to you? :-)
Works for me here
./perf stat -e topdown-total-slots:u,cpu/event=topdown-total-slots/u sleep 1
Quoted 8 lines
Performance counter stats for 'sleep 1':
515,204 topdown-total-slots:u 514,712 cpu/event=topdown-total-slots/u 1.001438114 seconds time elapsedDid you perhaps miss this hunk?
Yeah, the build process seems to be buggy here, not noticing that change it seems not to have regenerated the .c files from that .l.
After I removed the build dir and rebuilt everything, it works now, doing the docker-based lots-of-distros build now.
- Arnaldo
Quoted 11 lines
tools/perf/util/parse-events.l +1
-2@@ -259,6 +259,7 @@ cycles-ct { return str(yyscanner, PE_KERNEL_PMU_EVENT); } cycles-t { return str(yyscanner, PE_KERNEL_PMU_EVENT); } mem-loads { return str(yyscanner, PE_KERNEL_PMU_EVENT); } mem-stores { return str(yyscanner, PE_KERNEL_PMU_EVENT); } +topdown-[a-z-]+ { return str(yyscanner, PE_KERN -Andi --[email protected] -- Speaking for myself only
tip-bot for Andi Kleen
merge botperf test: Ignore .scale and other special files
Commit-ID: 17a2634bcb88e52bd637fdaa47d7ff0bddb0188f Gitweb: http://git.kernel.org/tip/17a2634bcb88e52bd637fdaa47d7ff0bddb0188f Author: Andi Kleen <[email protected]> AuthorDate: Mon, 6 Jun 2016 07:36:06 -0700 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Mon, 6 Jun 2016 12:11:14 -0300
perf test: Ignore .scale and other special files
'perf test' tries to parse all entries in /sys/devices/cpu/events/. Ignore the special entries like '.scale', which cannot be directly parsed as an event. This patch assumes all files containing a '.' are special and can be ignored.
--- tools/perf/tests/parse-events.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
tools/perf/tests/parse-events.c +2 -2
@@ -1783,8 +1783,8 @@ static int test_pmu_events(void)struct evlist_test e;char name[MAX_NAME ]; -if (!strcmp (ent->d_name,"." ) || - !strcmp (ent->d_name,".." )) +/* Names containing . are special and cannot be used directly */ +if (strchr (ent->d_name,'.' ))continue ;snprintf (name,MAX_NAME ,"cpu/event=%s/u" , ent->d_name);