1c25ce589SFinn Behrens#! /usr/bin/env python 2b2441318SGreg Kroah-Hartman# SPDX-License-Identifier: GPL-2.0 39881d7dfSJiri Olsa# -*- python -*- 49881d7dfSJiri Olsa# -*- coding: utf-8 -*- 59881d7dfSJiri Olsa 69881d7dfSJiri Olsaimport perf 79881d7dfSJiri Olsa 8*a570da21SArnaldo Carvalho de Melodef change_proctitle(): 9*a570da21SArnaldo Carvalho de Melo try: 10*a570da21SArnaldo Carvalho de Melo import setproctitle 11*a570da21SArnaldo Carvalho de Melo setproctitle.setproctitle("tracepoint.py") 12*a570da21SArnaldo Carvalho de Melo except: 13*a570da21SArnaldo Carvalho de Melo print("Install the setproctitle python package to help with top and friends") 14*a570da21SArnaldo Carvalho de Melo 159881d7dfSJiri Olsadef main(): 16*a570da21SArnaldo Carvalho de Melo change_proctitle() 179881d7dfSJiri Olsa cpus = perf.cpu_map() 189881d7dfSJiri Olsa threads = perf.thread_map(-1) 19f7cffbabSIan Rogers evlist = perf.parse_events("sched:sched_switch", cpus, threads) 20f7cffbabSIan Rogers # Disable tracking of mmaps and similar that are unnecessary. 21f7cffbabSIan Rogers for ev in evlist: 22f7cffbabSIan Rogers ev.tracking = False 23f7cffbabSIan Rogers # Configure evsels with default record options. 24f7cffbabSIan Rogers evlist.config() 25f7cffbabSIan Rogers # Simplify the sample_type and read_format of evsels 26f7cffbabSIan Rogers for ev in evlist: 27f7cffbabSIan Rogers ev.sample_type = ev.sample_type & ~perf.SAMPLE_IP 28f7cffbabSIan Rogers ev.read_format = 0 299881d7dfSJiri Olsa 309881d7dfSJiri Olsa evlist.open() 319881d7dfSJiri Olsa evlist.mmap() 32f7cffbabSIan Rogers evlist.enable(); 339881d7dfSJiri Olsa 349881d7dfSJiri Olsa while True: 359881d7dfSJiri Olsa evlist.poll(timeout = -1) 369881d7dfSJiri Olsa for cpu in cpus: 379881d7dfSJiri Olsa event = evlist.read_on_cpu(cpu) 389881d7dfSJiri Olsa if not event: 399881d7dfSJiri Olsa continue 409881d7dfSJiri Olsa 419881d7dfSJiri Olsa if not isinstance(event, perf.sample_event): 429881d7dfSJiri Olsa continue 439881d7dfSJiri Olsa 447e2022afSTanu M 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" % ( 459881d7dfSJiri Olsa event.sample_time, 469881d7dfSJiri Olsa event.prev_comm, 479881d7dfSJiri Olsa event.prev_pid, 489881d7dfSJiri Olsa event.prev_prio, 499881d7dfSJiri Olsa event.prev_state, 509881d7dfSJiri Olsa event.next_comm, 519881d7dfSJiri Olsa event.next_pid, 527e2022afSTanu M event.next_prio)) 539881d7dfSJiri Olsa 549881d7dfSJiri Olsaif __name__ == '__main__': 559881d7dfSJiri Olsa main() 56