1*4882a593Smuzhiyun# failed system call counts 2*4882a593Smuzhiyun# (c) 2010, Tom Zanussi <tzanussi@gmail.com> 3*4882a593Smuzhiyun# Licensed under the terms of the GNU GPL License version 2 4*4882a593Smuzhiyun# 5*4882a593Smuzhiyun# Displays system-wide failed system call totals 6*4882a593Smuzhiyun# If a [comm] arg is specified, only syscalls called by [comm] are displayed. 7*4882a593Smuzhiyun 8*4882a593Smuzhiyunuse lib "$ENV{'PERF_EXEC_PATH'}/scripts/perl/Perf-Trace-Util/lib"; 9*4882a593Smuzhiyunuse lib "./Perf-Trace-Util/lib"; 10*4882a593Smuzhiyunuse Perf::Trace::Core; 11*4882a593Smuzhiyunuse Perf::Trace::Context; 12*4882a593Smuzhiyunuse Perf::Trace::Util; 13*4882a593Smuzhiyun 14*4882a593Smuzhiyunmy $for_comm = shift; 15*4882a593Smuzhiyun 16*4882a593Smuzhiyunmy %failed_syscalls; 17*4882a593Smuzhiyun 18*4882a593Smuzhiyunsub raw_syscalls::sys_exit 19*4882a593Smuzhiyun{ 20*4882a593Smuzhiyun my ($event_name, $context, $common_cpu, $common_secs, $common_nsecs, 21*4882a593Smuzhiyun $common_pid, $common_comm, $common_callchain, 22*4882a593Smuzhiyun $id, $ret) = @_; 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun if ($ret < 0) { 25*4882a593Smuzhiyun $failed_syscalls{$common_comm}++; 26*4882a593Smuzhiyun } 27*4882a593Smuzhiyun} 28*4882a593Smuzhiyun 29*4882a593Smuzhiyunsub syscalls::sys_exit 30*4882a593Smuzhiyun{ 31*4882a593Smuzhiyun raw_syscalls::sys_exit(@_) 32*4882a593Smuzhiyun} 33*4882a593Smuzhiyun 34*4882a593Smuzhiyunsub trace_end 35*4882a593Smuzhiyun{ 36*4882a593Smuzhiyun printf("\nfailed syscalls by comm:\n\n"); 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun printf("%-20s %10s\n", "comm", "# errors"); 39*4882a593Smuzhiyun printf("%-20s %6s %10s\n", "--------------------", "----------"); 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun foreach my $comm (sort {$failed_syscalls{$b} <=> $failed_syscalls{$a}} 42*4882a593Smuzhiyun keys %failed_syscalls) { 43*4882a593Smuzhiyun next if ($for_comm && $comm ne $for_comm); 44*4882a593Smuzhiyun 45*4882a593Smuzhiyun printf("%-20s %10s\n", $comm, $failed_syscalls{$comm}); 46*4882a593Smuzhiyun } 47*4882a593Smuzhiyun} 48