Home | History | Annotate | Download | only in perl
      1 # failed system call counts
      2 # (c) 2010, Tom Zanussi <tzanussi (at] 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 $for_comm = shift;
     15 
     16 my %failed_syscalls;
     17 
     18 sub raw_syscalls::sys_exit
     19 {
     20 	my ($event_name, $context, $common_cpu, $common_secs, $common_nsecs,
     21 	    $common_pid, $common_comm,
     22 	    $id, $ret) = @_;
     23 
     24 	if ($ret < 0) {
     25 	    $failed_syscalls{$common_comm}++;
     26 	}
     27 }
     28 
     29 sub trace_end
     30 {
     31     printf("\nfailed syscalls by comm:\n\n");
     32 
     33     printf("%-20s  %10s\n", "comm", "# errors");
     34     printf("%-20s  %6s  %10s\n", "--------------------", "----------");
     35 
     36     foreach my $comm (sort {$failed_syscalls{$b} <=> $failed_syscalls{$a}}
     37 		      keys %failed_syscalls) {
     38 	next if ($for_comm && $comm ne $for_comm);
     39 
     40 	printf("%-20s  %10s\n", $comm, $failed_syscalls{$comm});
     41     }
     42 }
     43