xref: /linux-6.15/tools/perf/python/tracepoint.py (revision a570da21)
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