diff options
Diffstat (limited to 'tools/perf/scripts/perl/failed-syscalls.pl')
| -rw-r--r-- | tools/perf/scripts/perl/failed-syscalls.pl | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/tools/perf/scripts/perl/failed-syscalls.pl b/tools/perf/scripts/perl/failed-syscalls.pl new file mode 100644 index 000000000000..c18e7e27a84b --- /dev/null +++ b/tools/perf/scripts/perl/failed-syscalls.pl | |||
| @@ -0,0 +1,38 @@ | |||
| 1 | # failed system call counts | ||
| 2 | # (c) 2010, Tom Zanussi <tzanussi@gmail.com> | ||
| 3 | # Licensed under the terms of the GNU GPL License version 2 | ||
| 4 | # | ||
| 5 | # Displays system-wide failed system call totals | ||
| 6 | # If a [comm] arg is specified, only syscalls called by [comm] are displayed. | ||
| 7 | |||
| 8 | use lib "$ENV{'PERF_EXEC_PATH'}/scripts/perl/Perf-Trace-Util/lib"; | ||
| 9 | use lib "./Perf-Trace-Util/lib"; | ||
| 10 | use Perf::Trace::Core; | ||
| 11 | use Perf::Trace::Context; | ||
| 12 | use Perf::Trace::Util; | ||
| 13 | |||
| 14 | my %failed_syscalls; | ||
| 15 | |||
| 16 | sub raw_syscalls::sys_exit | ||
| 17 | { | ||
| 18 | my ($event_name, $context, $common_cpu, $common_secs, $common_nsecs, | ||
| 19 | $common_pid, $common_comm, | ||
| 20 | $id, $ret) = @_; | ||
| 21 | |||
| 22 | if ($ret < 0) { | ||
| 23 | $failed_syscalls{$common_comm}++; | ||
| 24 | } | ||
| 25 | } | ||
| 26 | |||
| 27 | sub trace_end | ||
| 28 | { | ||
| 29 | printf("\nfailed syscalls by comm:\n\n"); | ||
| 30 | |||
| 31 | printf("%-20s %10s\n", "comm", "# errors"); | ||
| 32 | printf("%-20s %6s %10s\n", "--------------------", "----------"); | ||
| 33 | |||
| 34 | foreach my $comm (sort {$failed_syscalls{$b} <=> $failed_syscalls{$a}} | ||
| 35 | keys %failed_syscalls) { | ||
| 36 | printf("%-20s %10s\n", $comm, $failed_syscalls{$comm}); | ||
| 37 | } | ||
| 38 | } | ||
