Skip to contentSkip to conversation

perf stat: Fail softly on unsupported events

tip:perf/stat tip-bot for Ingo Molnar 2 participants 4 messages Apr 29, 2011 perf events

lore
Share & tools
lore
#0 lore raw
Commit-ID:  370faf1dd0461ad811852c8abbbcd3d73b1e4fc4
Gitweb:     http://git.kernel.org/tip/370faf1dd0461ad811852c8abbbcd3d73b1e4fc4
Author:     Ingo Molnar <[email protected]>
AuthorDate: Fri, 29 Apr 2011 16:11:03 +0200
Committer:  Ingo Molnar <[email protected]>
CommitDate: Fri, 29 Apr 2011 16:22:33 +0200

perf stat: Fail softly on unsupported events

David Ahern reported this perf stat failure:

Quoted 5 lines
# /tmp/build-perf/perf stat -- sleep 1
  Error: stalled-cycles-frontend event is not supported.
  Fatal: Not all events could be opened.

This is a Dell R410 with an E5620 processor.

Fail in a softer fashion on unknown/unsupported events.

---
 tools/perf/builtin-stat.c |    4 +---
 1 files changed, 1 insertions(+), 3 deletions(-)
tools/perf/builtin-stat.c +1 -3
index 9e596ab..c8b535b 100644
@@ -377,7 +377,7 @@ static int run_perf_stat(int argc __used, const char **argv)
 
 	list_for_each_entry(counter, &evsel_list->entries, node) {
 		if (create_perf_stat_counter(counter) < 0) {
-			if (errno == EINVAL || errno == ENOSYS)
+			if (errno == EINVAL || errno == ENOSYS || errno == ENOENT)
 				continue;
 
 			if (errno == EPERM || errno == EACCES) {
@@ -385,8 +385,6 @@ static int run_perf_stat(int argc __used, const char **argv)
 				      "\t Consider tweaking"
 				      " /proc/sys/kernel/perf_event_paranoid or running as root.",
 				      system_wide ? "system-wide " : "");
-			} else if (errno == ENOENT) {
-				error("%s event is not supported. ", event_name(counter));
 			} else {
 				error("open_counter returned with %d (%s). "
 				      "/bin/dmesg may provide additional information.\n",
#1 lore raw
Quoted 43 lines · tip-bot for Ingo Molnar
Commit-ID:  370faf1dd0461ad811852c8abbbcd3d73b1e4fc4
Gitweb:     http://git.kernel.org/tip/370faf1dd0461ad811852c8abbbcd3d73b1e4fc4
Author:     Ingo Molnar <[email protected]>
AuthorDate: Fri, 29 Apr 2011 16:11:03 +0200
Committer:  Ingo Molnar <[email protected]>
CommitDate: Fri, 29 Apr 2011 16:22:33 +0200

perf stat: Fail softly on unsupported events

David Ahern reported this perf stat failure:

Quoted 5 lines
# /tmp/build-perf/perf stat -- sleep 1
  Error: stalled-cycles-frontend event is not supported.
  Fatal: Not all events could be opened.

This is a Dell R410 with an E5620 processor.

Fail in a softer fashion on unknown/unsupported events.

---
 tools/perf/builtin-stat.c |    4 +---
 1 files changed, 1 insertions(+), 3 deletions(-)
tools/perf/builtin-stat.c +1 -1
index 9e596ab..c8b535b 100644
@@ -377,7 +377,7 @@ static int run_perf_stat(int argc __used, const char **argv)
 
 	list_for_each_entry(counter, &evsel_list->entries, node) {
 		if (create_perf_stat_counter(counter) < 0) {
-			if (errno == EINVAL || errno == ENOSYS)
+			if (errno == EINVAL || errno == ENOSYS || errno == ENOENT)
 				continue;
 
 			if (errno == EPERM || errno == EACCES) {

tools/perf/builtin-stat.c static int run_perf_stat(int argc __used, const char **argv) · line 389

Quoted 5 lines
tools/perf/builtin-stat.c +0 -2
@@ -385,8 +385,6 @@ static int run_perf_stat(int argc __used, const char **argv)
 				      "\t Consider tweaking"
 				      " /proc/sys/kernel/perf_event_paranoid or running as root.",
 				      system_wide ? "system-wide " : "");
-			} else if (errno == ENOENT) {
-				error("%s event is not supported. ", event_name(counter));

This silently ignores events -- including ones that a user requested. I think a better option is a continue here.

/tmp/build-perf/perf stat -- sleep 1
Error: stalled-cycles-frontend event is not supported.
Error: stalled-cycles-backend event is not supported.

Quoted 3 lines
tools/perf/builtin-stat.c +0 -0
 			} else {
 				error("open_counter returned with %d (%s). "
 				      "/bin/dmesg may provide additional information.\n",
#2 lore raw
Quoted 55 lines · David Ahern
Quoted 43 lines · tip-bot for Ingo Molnar
Commit-ID:  370faf1dd0461ad811852c8abbbcd3d73b1e4fc4
Gitweb:     http://git.kernel.org/tip/370faf1dd0461ad811852c8abbbcd3d73b1e4fc4
Author:     Ingo Molnar <[email protected]>
AuthorDate: Fri, 29 Apr 2011 16:11:03 +0200
Committer:  Ingo Molnar <[email protected]>
CommitDate: Fri, 29 Apr 2011 16:22:33 +0200

perf stat: Fail softly on unsupported events

David Ahern reported this perf stat failure:

Quoted 5 lines
# /tmp/build-perf/perf stat -- sleep 1
  Error: stalled-cycles-frontend event is not supported.
  Fatal: Not all events could be opened.

This is a Dell R410 with an E5620 processor.

Fail in a softer fashion on unknown/unsupported events.

---
 tools/perf/builtin-stat.c |    4 +---
 1 files changed, 1 insertions(+), 3 deletions(-)
tools/perf/builtin-stat.c +1 -1
index 9e596ab..c8b535b 100644
@@ -377,7 +377,7 @@ static int run_perf_stat(int argc __used, const char **argv)
 
 	list_for_each_entry(counter, &evsel_list->entries, node) {
 		if (create_perf_stat_counter(counter) < 0) {
-			if (errno == EINVAL || errno == ENOSYS)
+			if (errno == EINVAL || errno == ENOSYS || errno == ENOENT)
 				continue;
 
 			if (errno == EPERM || errno == EACCES) {

tools/perf/builtin-stat.c static int run_perf_stat(int argc __used, const char **argv) · line 389

Quoted 5 lines
tools/perf/builtin-stat.c +0 -2
@@ -385,8 +385,6 @@ static int run_perf_stat(int argc __used, const char **argv)
 				      "\t Consider tweaking"
 				      " /proc/sys/kernel/perf_event_paranoid or running as root.",
 				      system_wide ? "system-wide " : "");
-			} else if (errno == ENOENT) {
-				error("%s event is not supported. ", event_name(counter));

This silently ignores events -- including ones that a user requested. I think a better option is a continue here.

Quoted 3 lines

/tmp/build-perf/perf stat -- sleep 1
Error: stalled-cycles-frontend event is not supported.
Error: stalled-cycles-backend event is not supported.

Ok. Got time to send a patch for that, which prints whichever message you find the most intuitive? Perhaps word it as:

Info: stalled-cycles-frontend event is not supported by the kernel

to not yell 'error!' at users all the time?

Thanks,

Ingo

#3 lore raw
Quoted 62 lines · Ingo Molnar
Quoted 55 lines · David Ahern
Quoted 43 lines · tip-bot for Ingo Molnar
Commit-ID:  370faf1dd0461ad811852c8abbbcd3d73b1e4fc4
Gitweb:     http://git.kernel.org/tip/370faf1dd0461ad811852c8abbbcd3d73b1e4fc4
Author:     Ingo Molnar <[email protected]>
AuthorDate: Fri, 29 Apr 2011 16:11:03 +0200
Committer:  Ingo Molnar <[email protected]>
CommitDate: Fri, 29 Apr 2011 16:22:33 +0200

perf stat: Fail softly on unsupported events

David Ahern reported this perf stat failure:

Quoted 5 lines
# /tmp/build-perf/perf stat -- sleep 1
  Error: stalled-cycles-frontend event is not supported.
  Fatal: Not all events could be opened.

This is a Dell R410 with an E5620 processor.

Fail in a softer fashion on unknown/unsupported events.

---
 tools/perf/builtin-stat.c |    4 +---
 1 files changed, 1 insertions(+), 3 deletions(-)
tools/perf/builtin-stat.c +1 -1
index 9e596ab..c8b535b 100644
@@ -377,7 +377,7 @@ static int run_perf_stat(int argc __used, const char **argv)
 
 	list_for_each_entry(counter, &evsel_list->entries, node) {
 		if (create_perf_stat_counter(counter) < 0) {
-			if (errno == EINVAL || errno == ENOSYS)
+			if (errno == EINVAL || errno == ENOSYS || errno == ENOENT)
 				continue;
 
 			if (errno == EPERM || errno == EACCES) {

tools/perf/builtin-stat.c static int run_perf_stat(int argc __used, const char **argv) · line 389

Quoted 5 lines
tools/perf/builtin-stat.c +0 -2
@@ -385,8 +385,6 @@ static int run_perf_stat(int argc __used, const char **argv)
 				      "\t Consider tweaking"
 				      " /proc/sys/kernel/perf_event_paranoid or running as root.",
 				      system_wide ? "system-wide " : "");
-			} else if (errno == ENOENT) {
-				error("%s event is not supported. ", event_name(counter));

This silently ignores events -- including ones that a user requested. I think a better option is a continue here.

Quoted 3 lines

/tmp/build-perf/perf stat -- sleep 1
Error: stalled-cycles-frontend event is not supported.
Error: stalled-cycles-backend event is not supported.

Quoted 6 lines

Ok. Got time to send a patch for that, which prints whichever message you find the most intuitive? Perhaps word it as:

Info: stalled-cycles-frontend event is not supported by the kernel

to not yell 'error!' at users all the time?

Yes, Error is the wrong prefix, unless the user asked for the event. It's also not as simple as a continue; the fd array contains 0 so the command blocks trying to read from fd 0. e.g.:

tools/perf/builtin-stat.c +1 -1
index 2492a0e..bb1c4dc 100644
@@ -318,7 +318,7 @@ static int read_counter(struct perf_evsel *counter)
 static int run_perf_stat(int argc __used, const char **argv)
 {
    unsigned long long t0, t1;
-   struct perf_evsel *counter;
+   struct perf_evsel *counter, *n;
    int status = 0;
    int child_ready_pipe[2], go_pipe[2];
    const bool forks = (argc > 0);
@@ -375,7 +375,7 @@ static int run_perf_stat(int argc __used, const char

**argv)

        close(child_ready_pipe[0]);
    }

- list_for_each_entry(counter, &evsel_list->entries, node) {

+   list_for_each_entry_safe(counter, n, &evsel_list->entries, node) {
        if (create_perf_stat_counter(counter) < 0) {
            if (errno == EINVAL || errno == ENOSYS)
                continue;
@@ -387,6 +387,8 @@ static int run_perf_stat(int argc __used, const char
**argv)
                      system_wide ? "system-wide " : "");
            } else if (errno == ENOENT) {
                error("%s event is not supported. ", event_name(counter));

+ list_del(&counter->node);
+ continue;
} else {
error("open_counter returned with %d (%s). "
"/bin/dmesg may provide additional information.\n",

That set the xyarray to -1.

David

Quoted 4 lines

Thanks,

Ingo