cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

syscall-counts.py (1673B)


      1# system call counts
      2# (c) 2010, Tom Zanussi <tzanussi@gmail.com>
      3# Licensed under the terms of the GNU GPL License version 2
      4#
      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_function
      9
     10import os
     11import sys
     12
     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_name
     19
     20usage = "perf script -s syscall-counts.py [comm]\n";
     21
     22for_comm = None
     23
     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			return
     44	try:
     45		syscalls[id] += 1
     46	except TypeError:
     47		syscalls[id] = 1
     48
     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))