brintos

brintos / linux-shallow public Read only

0
0
Text · 1.6 KiB · 8adb95f Raw
66 lines · python
1# system call counts2# (c) 2010, Tom Zanussi <tzanussi@gmail.com>3# Licensed under the terms of the GNU GPL License version 24#5# Displays system-wide system call totals, broken down by syscall.6# If a [comm] arg is specified, only syscalls called by [comm] are displayed.7 8from __future__ import print_function9 10import os11import sys12 13sys.path.append(os.environ['PERF_EXEC_PATH'] + \14	'/scripts/python/Perf-Trace-Util/lib/Perf/Trace')15 16from perf_trace_context import *17from Core import *18from Util import syscall_name19 20usage = "perf script -s syscall-counts.py [comm]\n";21 22for_comm = None23 24if len(sys.argv) > 2:25	sys.exit(usage)26 27if len(sys.argv) > 1:28	for_comm = sys.argv[1]29 30syscalls = autodict()31 32def trace_begin():33	print("Press control+C to stop and show the summary")34 35def trace_end():36	print_syscall_totals()37 38def raw_syscalls__sys_enter(event_name, context, common_cpu,39		common_secs, common_nsecs, common_pid, common_comm,40		common_callchain, id, args):41	if for_comm is not None:42		if common_comm != for_comm:43			return44	try:45		syscalls[id] += 146	except TypeError:47		syscalls[id] = 148 49def syscalls__sys_enter(event_name, context, common_cpu,50		common_secs, common_nsecs, common_pid, common_comm, id, args):51	raw_syscalls__sys_enter(**locals())52 53def print_syscall_totals():54	if for_comm is not None:55		print("\nsyscall events for %s:\n" % (for_comm))56	else:57		print("\nsyscall events:\n")58 59	print("%-40s  %10s" % ("event", "count"))60	print("%-40s  %10s" % ("----------------------------------------",61				"-----------"))62 63	for id, val in sorted(syscalls.items(),64			key = lambda kv: (kv[1], kv[0]), reverse = True):65		print("%-40s  %10d" % (syscall_name(id), val))66