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