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