perf stat: Fail softly on unsupported events
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
@@ -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",
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 +0200perf 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.
Reported-by David Ahern <[email protected]>Cc Peter Zijlstra <[email protected]>Cc Arnaldo Carvalho de Melo <[email protected]>Cc Frederic Weisbecker <[email protected]>Signed-off-by Ingo Molnar <[email protected]>--- tools/perf/builtin-stat.c | 4 +--- 1 files changed, 1 insertions(+), 3 deletions(-)tools/perf/builtin-stat.c +1
-1@@ -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",
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 +0200perf 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.
Reported-by David Ahern <[email protected]>Cc Peter Zijlstra <[email protected]>Cc Arnaldo Carvalho de Melo <[email protected]>Cc Frederic Weisbecker <[email protected]>Signed-off-by Ingo Molnar <[email protected]>--- tools/perf/builtin-stat.c | 4 +--- 1 files changed, 1 insertions(+), 3 deletions(-)tools/perf/builtin-stat.c +1
-1@@ -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/perfstat -- 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
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 +0200perf 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.
Reported-by David Ahern <[email protected]>Cc Peter Zijlstra <[email protected]>Cc Arnaldo Carvalho de Melo <[email protected]>Cc Frederic Weisbecker <[email protected]>Signed-off-by Ingo Molnar <[email protected]>--- tools/perf/builtin-stat.c | 4 +--- 1 files changed, 1 insertions(+), 3 deletions(-)tools/perf/builtin-stat.c +1
-1@@ -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/perfstat -- 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
@@ -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