14d161f03STom Zanussi# system call counts 24d161f03STom Zanussi# (c) 2010, Tom Zanussi <[email protected]> 34d161f03STom Zanussi# Licensed under the terms of the GNU GPL License version 2 44d161f03STom Zanussi# 54d161f03STom Zanussi# Displays system-wide system call totals, broken down by syscall. 64d161f03STom Zanussi# If a [comm] arg is specified, only syscalls called by [comm] are displayed. 74d161f03STom Zanussi 84d161f03STom Zanussiimport os 94d161f03STom Zanussiimport sys 104d161f03STom Zanussi 114d161f03STom Zanussisys.path.append(os.environ['PERF_EXEC_PATH'] + \ 124d161f03STom Zanussi '/scripts/python/Perf-Trace-Util/lib/Perf/Trace') 134d161f03STom Zanussi 144d161f03STom Zanussifrom perf_trace_context import * 154d161f03STom Zanussifrom Core import * 16*6545aaa5SArnaldo Carvalho de Melofrom Util import syscall_name 174d161f03STom Zanussi 184d161f03STom Zanussiusage = "perf trace -s syscall-counts.py [comm]\n"; 194d161f03STom Zanussi 204d161f03STom Zanussifor_comm = None 214d161f03STom Zanussi 224d161f03STom Zanussiif len(sys.argv) > 2: 234d161f03STom Zanussi sys.exit(usage) 244d161f03STom Zanussi 254d161f03STom Zanussiif len(sys.argv) > 1: 264d161f03STom Zanussi for_comm = sys.argv[1] 274d161f03STom Zanussi 284d161f03STom Zanussisyscalls = autodict() 294d161f03STom Zanussi 304d161f03STom Zanussidef trace_begin(): 31*6545aaa5SArnaldo Carvalho de Melo print "Press control+C to stop and show the summary" 324d161f03STom Zanussi 334d161f03STom Zanussidef trace_end(): 344d161f03STom Zanussi print_syscall_totals() 354d161f03STom Zanussi 364d161f03STom Zanussidef raw_syscalls__sys_enter(event_name, context, common_cpu, 374d161f03STom Zanussi common_secs, common_nsecs, common_pid, common_comm, 384d161f03STom Zanussi id, args): 394d161f03STom Zanussi if for_comm is not None: 404d161f03STom Zanussi if common_comm != for_comm: 414d161f03STom Zanussi return 424d161f03STom Zanussi try: 434d161f03STom Zanussi syscalls[id] += 1 444d161f03STom Zanussi except TypeError: 454d161f03STom Zanussi syscalls[id] = 1 464d161f03STom Zanussi 474d161f03STom Zanussidef print_syscall_totals(): 484d161f03STom Zanussi if for_comm is not None: 494d161f03STom Zanussi print "\nsyscall events for %s:\n\n" % (for_comm), 504d161f03STom Zanussi else: 514d161f03STom Zanussi print "\nsyscall events:\n\n", 524d161f03STom Zanussi 534d161f03STom Zanussi print "%-40s %10s\n" % ("event", "count"), 544d161f03STom Zanussi print "%-40s %10s\n" % ("----------------------------------------", \ 554d161f03STom Zanussi "-----------"), 564d161f03STom Zanussi 574d161f03STom Zanussi for id, val in sorted(syscalls.iteritems(), key = lambda(k, v): (v, k), \ 584d161f03STom Zanussi reverse = True): 59*6545aaa5SArnaldo Carvalho de Melo print "%-40s %10d\n" % (syscall_name(id), val), 60