1*4d161f03STom Zanussi# system call counts 2*4d161f03STom Zanussi# (c) 2010, Tom Zanussi <[email protected]> 3*4d161f03STom Zanussi# Licensed under the terms of the GNU GPL License version 2 4*4d161f03STom Zanussi# 5*4d161f03STom Zanussi# Displays system-wide system call totals, broken down by syscall. 6*4d161f03STom Zanussi# If a [comm] arg is specified, only syscalls called by [comm] are displayed. 7*4d161f03STom Zanussi 8*4d161f03STom Zanussiimport os 9*4d161f03STom Zanussiimport sys 10*4d161f03STom Zanussi 11*4d161f03STom Zanussisys.path.append(os.environ['PERF_EXEC_PATH'] + \ 12*4d161f03STom Zanussi '/scripts/python/Perf-Trace-Util/lib/Perf/Trace') 13*4d161f03STom Zanussi 14*4d161f03STom Zanussifrom perf_trace_context import * 15*4d161f03STom Zanussifrom Core import * 16*4d161f03STom Zanussi 17*4d161f03STom Zanussiusage = "perf trace -s syscall-counts.py [comm]\n"; 18*4d161f03STom Zanussi 19*4d161f03STom Zanussifor_comm = None 20*4d161f03STom Zanussi 21*4d161f03STom Zanussiif len(sys.argv) > 2: 22*4d161f03STom Zanussi sys.exit(usage) 23*4d161f03STom Zanussi 24*4d161f03STom Zanussiif len(sys.argv) > 1: 25*4d161f03STom Zanussi for_comm = sys.argv[1] 26*4d161f03STom Zanussi 27*4d161f03STom Zanussisyscalls = autodict() 28*4d161f03STom Zanussi 29*4d161f03STom Zanussidef trace_begin(): 30*4d161f03STom Zanussi pass 31*4d161f03STom Zanussi 32*4d161f03STom Zanussidef trace_end(): 33*4d161f03STom Zanussi print_syscall_totals() 34*4d161f03STom Zanussi 35*4d161f03STom Zanussidef raw_syscalls__sys_enter(event_name, context, common_cpu, 36*4d161f03STom Zanussi common_secs, common_nsecs, common_pid, common_comm, 37*4d161f03STom Zanussi id, args): 38*4d161f03STom Zanussi if for_comm is not None: 39*4d161f03STom Zanussi if common_comm != for_comm: 40*4d161f03STom Zanussi return 41*4d161f03STom Zanussi try: 42*4d161f03STom Zanussi syscalls[id] += 1 43*4d161f03STom Zanussi except TypeError: 44*4d161f03STom Zanussi syscalls[id] = 1 45*4d161f03STom Zanussi 46*4d161f03STom Zanussidef print_syscall_totals(): 47*4d161f03STom Zanussi if for_comm is not None: 48*4d161f03STom Zanussi print "\nsyscall events for %s:\n\n" % (for_comm), 49*4d161f03STom Zanussi else: 50*4d161f03STom Zanussi print "\nsyscall events:\n\n", 51*4d161f03STom Zanussi 52*4d161f03STom Zanussi print "%-40s %10s\n" % ("event", "count"), 53*4d161f03STom Zanussi print "%-40s %10s\n" % ("----------------------------------------", \ 54*4d161f03STom Zanussi "-----------"), 55*4d161f03STom Zanussi 56*4d161f03STom Zanussi for id, val in sorted(syscalls.iteritems(), key = lambda(k, v): (v, k), \ 57*4d161f03STom Zanussi reverse = True): 58*4d161f03STom Zanussi print "%-40d %10d\n" % (id, val), 59