xref: /OK3568_Linux_fs/kernel/tools/perf/scripts/perl/failed-syscalls.pl (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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