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

check-perf-trace.py (2461B)


      1# perf script event handlers, generated by perf script -g python
      2# (c) 2010, Tom Zanussi <tzanussi@gmail.com>
      3# Licensed under the terms of the GNU GPL License version 2
      4#
      5# This script tests basic functionality such as flag and symbol
      6# strings, common_xxx() calls back into perf, begin, end, unhandled
      7# events, etc.  Basically, if this script runs successfully and
      8# displays expected results, Python scripting support should be ok.
      9
     10from __future__ import print_function
     11
     12import os
     13import sys
     14
     15sys.path.append(os.environ['PERF_EXEC_PATH'] + \
     16	'/scripts/python/Perf-Trace-Util/lib/Perf/Trace')
     17
     18from Core import *
     19from perf_trace_context import *
     20
     21unhandled = autodict()
     22
     23def trace_begin():
     24	print("trace_begin")
     25	pass
     26
     27def trace_end():
     28	print_unhandled()
     29
     30def irq__softirq_entry(event_name, context, common_cpu,
     31		       common_secs, common_nsecs, common_pid, common_comm,
     32		       common_callchain, vec):
     33	print_header(event_name, common_cpu, common_secs, common_nsecs,
     34		common_pid, common_comm)
     35
     36	print_uncommon(context)
     37
     38	print("vec=%s" % (symbol_str("irq__softirq_entry", "vec", vec)))
     39
     40def kmem__kmalloc(event_name, context, common_cpu,
     41		  common_secs, common_nsecs, common_pid, common_comm,
     42		  common_callchain, call_site, ptr, bytes_req, bytes_alloc,
     43		  gfp_flags):
     44	print_header(event_name, common_cpu, common_secs, common_nsecs,
     45		common_pid, common_comm)
     46
     47	print_uncommon(context)
     48
     49	print("call_site=%u, ptr=%u, bytes_req=%u, "
     50		"bytes_alloc=%u, gfp_flags=%s" %
     51		(call_site, ptr, bytes_req, bytes_alloc,
     52		flag_str("kmem__kmalloc", "gfp_flags", gfp_flags)))
     53
     54def trace_unhandled(event_name, context, event_fields_dict):
     55	try:
     56		unhandled[event_name] += 1
     57	except TypeError:
     58		unhandled[event_name] = 1
     59
     60def print_header(event_name, cpu, secs, nsecs, pid, comm):
     61	print("%-20s %5u %05u.%09u %8u %-20s " %
     62		(event_name, cpu, secs, nsecs, pid, comm),
     63		end=' ')
     64
     65# print trace fields not included in handler args
     66def print_uncommon(context):
     67	print("common_preempt_count=%d, common_flags=%s, "
     68		"common_lock_depth=%d, " %
     69		(common_pc(context), trace_flag_str(common_flags(context)),
     70		common_lock_depth(context)))
     71
     72def print_unhandled():
     73	keys = unhandled.keys()
     74	if not keys:
     75		return
     76
     77	print("\nunhandled events:\n")
     78
     79	print("%-40s  %10s" % ("event", "count"))
     80	print("%-40s  %10s" % ("----------------------------------------",
     81				"-----------"))
     82
     83	for event_name in keys:
     84		print("%-40s  %10d\n" % (event_name, unhandled[event_name]))