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