Path: blob/master/tools/perf/scripts/python/failed-syscalls-by-pid.py
10823 views
# failed system call counts, by pid1# (c) 2010, Tom Zanussi <[email protected]>2# Licensed under the terms of the GNU GPL License version 23#4# Displays system-wide failed system call totals, broken down by pid.5# If a [comm] arg is specified, only syscalls called by [comm] are displayed.67import os8import sys910sys.path.append(os.environ['PERF_EXEC_PATH'] + \11'/scripts/python/Perf-Trace-Util/lib/Perf/Trace')1213from perf_trace_context import *14from Core import *15from Util import *1617usage = "perf script -s syscall-counts-by-pid.py [comm|pid]\n";1819for_comm = None20for_pid = None2122if len(sys.argv) > 2:23sys.exit(usage)2425if len(sys.argv) > 1:26try:27for_pid = int(sys.argv[1])28except:29for_comm = sys.argv[1]3031syscalls = autodict()3233def trace_begin():34print "Press control+C to stop and show the summary"3536def trace_end():37print_error_totals()3839def raw_syscalls__sys_exit(event_name, context, common_cpu,40common_secs, common_nsecs, common_pid, common_comm,41id, ret):42if (for_comm and common_comm != for_comm) or \43(for_pid and common_pid != for_pid ):44return4546if ret < 0:47try:48syscalls[common_comm][common_pid][id][ret] += 149except TypeError:50syscalls[common_comm][common_pid][id][ret] = 15152def print_error_totals():53if for_comm is not None:54print "\nsyscall errors for %s:\n\n" % (for_comm),55else:56print "\nsyscall errors:\n\n",5758print "%-30s %10s\n" % ("comm [pid]", "count"),59print "%-30s %10s\n" % ("------------------------------", \60"----------"),6162comm_keys = syscalls.keys()63for comm in comm_keys:64pid_keys = syscalls[comm].keys()65for pid in pid_keys:66print "\n%s [%d]\n" % (comm, pid),67id_keys = syscalls[comm][pid].keys()68for id in id_keys:69print " syscall: %-16s\n" % syscall_name(id),70ret_keys = syscalls[comm][pid][id].keys()71for ret, val in sorted(syscalls[comm][pid][id].iteritems(), key = lambda(k, v): (v, k), reverse = True):72print " err = %-20s %10d\n" % (strerror(ret), val),737475