1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
| # perf script event handlers, generated by perf script -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,
| common_callchain, 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,
| common_callchain, 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, event_fields_dict):
| 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])
|
|