Back to home page

OSCL-LXR

 
 

    


0001 # failed system call counts
0002 # (c) 2010, Tom Zanussi <tzanussi@gmail.com>
0003 # Licensed under the terms of the GNU GPL License version 2
0004 #
0005 # Displays system-wide failed system call totals
0006 # If a [comm] arg is specified, only syscalls called by [comm] are displayed.
0007 
0008 use lib "$ENV{'PERF_EXEC_PATH'}/scripts/perl/Perf-Trace-Util/lib";
0009 use lib "./Perf-Trace-Util/lib";
0010 use Perf::Trace::Core;
0011 use Perf::Trace::Context;
0012 use Perf::Trace::Util;
0013 
0014 my $for_comm = shift;
0015 
0016 my %failed_syscalls;
0017 
0018 sub raw_syscalls::sys_exit
0019 {
0020     my ($event_name, $context, $common_cpu, $common_secs, $common_nsecs,
0021         $common_pid, $common_comm, $common_callchain,
0022         $id, $ret) = @_;
0023 
0024     if ($ret < 0) {
0025         $failed_syscalls{$common_comm}++;
0026     }
0027 }
0028 
0029 sub syscalls::sys_exit
0030 {
0031     raw_syscalls::sys_exit(@_)
0032 }
0033 
0034 sub trace_end
0035 {
0036     printf("\nfailed syscalls by comm:\n\n");
0037 
0038     printf("%-20s  %10s\n", "comm", "# errors");
0039     printf("%-20s  %6s  %10s\n", "--------------------", "----------");
0040 
0041     foreach my $comm (sort {$failed_syscalls{$b} <=> $failed_syscalls{$a}}
0042               keys %failed_syscalls) {
0043     next if ($for_comm && $comm ne $for_comm);
0044 
0045     printf("%-20s  %10s\n", $comm, $failed_syscalls{$comm});
0046     }
0047 }