0001
0002
0003
0004
0005
0006 import perf
0007
0008 class tracepoint(perf.evsel):
0009 def __init__(self, sys, name):
0010 config = perf.tracepoint(sys, name)
0011 perf.evsel.__init__(self,
0012 type = perf.TYPE_TRACEPOINT,
0013 config = config,
0014 freq = 0, sample_period = 1, wakeup_events = 1,
0015 sample_type = perf.SAMPLE_PERIOD | perf.SAMPLE_TID | perf.SAMPLE_CPU | perf.SAMPLE_RAW | perf.SAMPLE_TIME)
0016
0017 def main():
0018 tp = tracepoint("sched", "sched_switch")
0019 cpus = perf.cpu_map()
0020 threads = perf.thread_map(-1)
0021
0022 evlist = perf.evlist(cpus, threads)
0023 evlist.add(tp)
0024 evlist.open()
0025 evlist.mmap()
0026
0027 while True:
0028 evlist.poll(timeout = -1)
0029 for cpu in cpus:
0030 event = evlist.read_on_cpu(cpu)
0031 if not event:
0032 continue
0033
0034 if not isinstance(event, perf.sample_event):
0035 continue
0036
0037 print("time %u prev_comm=%s prev_pid=%d prev_prio=%d prev_state=0x%x ==> next_comm=%s next_pid=%d next_prio=%d" % (
0038 event.sample_time,
0039 event.prev_comm,
0040 event.prev_pid,
0041 event.prev_prio,
0042 event.prev_state,
0043 event.next_comm,
0044 event.next_pid,
0045 event.next_prio))
0046
0047 if __name__ == '__main__':
0048 main()