| # perf trace event handlers, generated by perf trace -g python |
| # (c) 2010, Tom Zanussi <tzanussi@gmail.com> |
| # Licensed under the terms of the GNU GPL License version 2 |
| # |
| # This script tests basic functionality such as flag and symbol |
| # strings, common_xxx() calls back into perf, begin, end, unhandled |
| # events, etc. Basically, if this script runs successfully and |
| # displays expected results, Python scripting support should be ok. |
| |
| import os |
| import sys |
| |
| sys.path.append(os.environ['PERF_EXEC_PATH'] + \ |
| '/scripts/python/Perf-Trace-Util/lib/Perf/Trace') |
| |
| from Core import * |
| from perf_trace_context import * |
| |
| unhandled = autodict() |
| |
| def trace_begin(): |
| print "trace_begin" |
| pass |
| |
| def trace_end(): |
| print_unhandled() |
| |
| def irq__softirq_entry(event_name, context, common_cpu, |
| common_secs, common_nsecs, common_pid, common_comm, |
| vec): |
| print_header(event_name, common_cpu, common_secs, common_nsecs, |
| common_pid, common_comm) |
| |
| print_uncommon(context) |
| |
| print "vec=%s\n" % \ |
| (symbol_str("irq__softirq_entry", "vec", vec)), |
| |
| def kmem__kmalloc(event_name, context, common_cpu, |
| common_secs, common_nsecs, common_pid, common_comm, |
| call_site, ptr, bytes_req, bytes_alloc, |
| gfp_flags): |
| print_header(event_name, common_cpu, common_secs, common_nsecs, |
| common_pid, common_comm) |
| |
| print_uncommon(context) |
| |
| print "call_site=%u, ptr=%u, bytes_req=%u, " \ |
| "bytes_alloc=%u, gfp_flags=%s\n" % \ |
| (call_site, ptr, bytes_req, bytes_alloc, |
| |
| flag_str("kmem__kmalloc", "gfp_flags", gfp_flags)), |
| |
| def trace_unhandled(event_name, context, common_cpu, common_secs, common_nsecs, |
| common_pid, common_comm): |
| try: |
| unhandled[event_name] += 1 |
| except TypeError: |
| unhandled[event_name] = 1 |
| |
| def print_header(event_name, cpu, secs, nsecs, pid, comm): |
| print "%-20s %5u %05u.%09u %8u %-20s " % \ |
| (event_name, cpu, secs, nsecs, pid, comm), |
| |
| # print trace fields not included in handler args |
| def print_uncommon(context): |
| print "common_preempt_count=%d, common_flags=%s, common_lock_depth=%d, " \ |
| % (common_pc(context), trace_flag_str(common_flags(context)), \ |
| common_lock_depth(context)) |
| |
| def print_unhandled(): |
| keys = unhandled.keys() |
| if not keys: |
| return |
| |
| print "\nunhandled events:\n\n", |
| |
| print "%-40s %10s\n" % ("event", "count"), |
| print "%-40s %10s\n" % ("----------------------------------------", \ |
| "-----------"), |
| |
| for event_name in keys: |
| print "%-40s %10d\n" % (event_name, unhandled[event_name]) |