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 81d1b0dbbSTony Jonesfrom __future__ import print_function 91d1b0dbbSTony Jones 104d161f03STom Zanussiimport os 114d161f03STom Zanussiimport sys 124d161f03STom Zanussi 134d161f03STom Zanussisys.path.append(os.environ['PERF_EXEC_PATH'] + \ 144d161f03STom Zanussi '/scripts/python/Perf-Trace-Util/lib/Perf/Trace') 154d161f03STom Zanussi 164d161f03STom Zanussifrom perf_trace_context import * 174d161f03STom Zanussifrom Core import * 186545aaa5SArnaldo Carvalho de Melofrom Util import syscall_name 194d161f03STom Zanussi 20765532c8SArnaldo Carvalho de Melousage = "perf script -s syscall-counts.py [comm]\n"; 214d161f03STom Zanussi 224d161f03STom Zanussifor_comm = None 234d161f03STom Zanussi 244d161f03STom Zanussiif len(sys.argv) > 2: 254d161f03STom Zanussi sys.exit(usage) 264d161f03STom Zanussi 274d161f03STom Zanussiif len(sys.argv) > 1: 284d161f03STom Zanussi for_comm = sys.argv[1] 294d161f03STom Zanussi 304d161f03STom Zanussisyscalls = autodict() 314d161f03STom Zanussi 324d161f03STom Zanussidef trace_begin(): 331d1b0dbbSTony Jones print("Press control+C to stop and show the summary") 344d161f03STom Zanussi 354d161f03STom Zanussidef trace_end(): 364d161f03STom Zanussi print_syscall_totals() 374d161f03STom Zanussi 384d161f03STom Zanussidef raw_syscalls__sys_enter(event_name, context, common_cpu, 394d161f03STom Zanussi common_secs, common_nsecs, common_pid, common_comm, 400f5f5bcdSJoseph Schuchart common_callchain, id, args): 414d161f03STom Zanussi if for_comm is not None: 424d161f03STom Zanussi if common_comm != for_comm: 434d161f03STom Zanussi return 444d161f03STom Zanussi try: 454d161f03STom Zanussi syscalls[id] += 1 464d161f03STom Zanussi except TypeError: 474d161f03STom Zanussi syscalls[id] = 1 484d161f03STom Zanussi 4907100877SDaniel Bristot de Oliveiradef syscalls__sys_enter(event_name, context, common_cpu, 50*b504d7f6STony Jones common_secs, common_nsecs, common_pid, common_comm, id, args): 5107100877SDaniel Bristot de Oliveira raw_syscalls__sys_enter(**locals()) 5207100877SDaniel Bristot de Oliveira 534d161f03STom Zanussidef print_syscall_totals(): 544d161f03STom Zanussi if for_comm is not None: 551d1b0dbbSTony Jones print("\nsyscall events for %s:\n" % (for_comm)) 564d161f03STom Zanussi else: 571d1b0dbbSTony Jones print("\nsyscall events:\n") 584d161f03STom Zanussi 591d1b0dbbSTony Jones print("%-40s %10s" % ("event", "count")) 601d1b0dbbSTony Jones print("%-40s %10s" % ("----------------------------------------", 611d1b0dbbSTony Jones "-----------")) 624d161f03STom Zanussi 63*b504d7f6STony Jones for id, val in sorted(syscalls.items(), 64*b504d7f6STony Jones key = lambda kv: (kv[1], kv[0]), reverse = True): 651d1b0dbbSTony Jones print("%-40s %10d" % (syscall_name(id), val)) 66