# system call counts# (c) 2010, Tom Zanussi <tzanussi@gmail.com># Licensed under the terms of the GNU GPL License version 2## Displays system-wide system call totals, broken down by syscall.# If a [comm] arg is specified, only syscalls called by [comm] are displayed.import os
import sys
sys.path.append(os.environ['PERF_EXEC_PATH'] + \
'/scripts/python/Perf-Trace-Util/lib/Perf/Trace')from perf_trace_context import*from Core import*from Util import syscall_name
usage ="perf script -s syscall-counts.py [comm]\n";
for_comm =Noneiflen(sys.argv) >2:
sys.exit(usage)iflen(sys.argv) >1:
for_comm = sys.argv[1]
syscalls =autodict()deftrace_begin():print"Press control+C to stop and show the summary"deftrace_end():print_syscall_totals()defraw_syscalls__sys_enter(event_name, context, common_cpu,
common_secs, common_nsecs, common_pid, common_comm,id, args):if for_comm is not None:if common_comm != for_comm:returntry:
syscalls[id] +=1exceptTypeError:
syscalls[id] =1defprint_syscall_totals():if for_comm is not None:print"\nsyscall events for%s:\n\n"% (for_comm),else:print"\nsyscall events:\n\n",print"%-40s %10s\n"% ("event","count"),print"%-40s %10s\n"% ("----------------------------------------", \
"-----------"),forid, val insorted(syscalls.iteritems(), key =lambda(k, v): (v, k), \
reverse =True):print"%-40s %10d\n"% (syscall_name(id), val),