162306a36Sopenharmony_ci# failed system call counts 262306a36Sopenharmony_ci# (c) 2010, Tom Zanussi <tzanussi@gmail.com> 362306a36Sopenharmony_ci# Licensed under the terms of the GNU GPL License version 2 462306a36Sopenharmony_ci# 562306a36Sopenharmony_ci# Displays system-wide failed system call totals 662306a36Sopenharmony_ci# If a [comm] arg is specified, only syscalls called by [comm] are displayed. 762306a36Sopenharmony_ci 862306a36Sopenharmony_ciuse lib "$ENV{'PERF_EXEC_PATH'}/scripts/perl/Perf-Trace-Util/lib"; 962306a36Sopenharmony_ciuse lib "./Perf-Trace-Util/lib"; 1062306a36Sopenharmony_ciuse Perf::Trace::Core; 1162306a36Sopenharmony_ciuse Perf::Trace::Context; 1262306a36Sopenharmony_ciuse Perf::Trace::Util; 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_cimy $for_comm = shift; 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_cimy %failed_syscalls; 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_cisub raw_syscalls::sys_exit 1962306a36Sopenharmony_ci{ 2062306a36Sopenharmony_ci my ($event_name, $context, $common_cpu, $common_secs, $common_nsecs, 2162306a36Sopenharmony_ci $common_pid, $common_comm, $common_callchain, 2262306a36Sopenharmony_ci $id, $ret) = @_; 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_ci if ($ret < 0) { 2562306a36Sopenharmony_ci $failed_syscalls{$common_comm}++; 2662306a36Sopenharmony_ci } 2762306a36Sopenharmony_ci} 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_cisub syscalls::sys_exit 3062306a36Sopenharmony_ci{ 3162306a36Sopenharmony_ci raw_syscalls::sys_exit(@_) 3262306a36Sopenharmony_ci} 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_cisub trace_end 3562306a36Sopenharmony_ci{ 3662306a36Sopenharmony_ci printf("\nfailed syscalls by comm:\n\n"); 3762306a36Sopenharmony_ci 3862306a36Sopenharmony_ci printf("%-20s %10s\n", "comm", "# errors"); 3962306a36Sopenharmony_ci printf("%-20s %6s %10s\n", "--------------------", "----------"); 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_ci foreach my $comm (sort {$failed_syscalls{$b} <=> $failed_syscalls{$a}} 4262306a36Sopenharmony_ci keys %failed_syscalls) { 4362306a36Sopenharmony_ci next if ($for_comm && $comm ne $for_comm); 4462306a36Sopenharmony_ci 4562306a36Sopenharmony_ci printf("%-20s %10s\n", $comm, $failed_syscalls{$comm}); 4662306a36Sopenharmony_ci } 4762306a36Sopenharmony_ci} 48