Skip to contentSkip to conversation

perf test: Ignore .scale and other special files

PATCH In review Andi Kleen 4 participants 7 messages Jun 6, 2016 – Jun 8, 2016 perf events

lore
Share & tools
lore

Andi Kleen

author
#0 lore raw

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
index 7865f68dc0d8..b2a2c74136a5 100644
@@ -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
#1 lore raw

Em 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.c

tools/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

#2 lore raw

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-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 ~]#

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

#3 lore raw

Em 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-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 ~]#

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

#4 lore raw
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 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? :-)

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 elapsed

Did 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

#5 lore raw

Em 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 error

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

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 elapsed

Did 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

#6 lore raw
In reply to Andi Kleen
perf 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
index 7865f68..b2a2c74 100644
@@ -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);