Back to home page

OSCL-LXR

 
 

    


0001 #! /usr/bin/env python
0002 # SPDX-License-Identifier: GPL-2.0
0003 # -*- python -*-
0004 # -*- coding: utf-8 -*-
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()