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