1e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#! /usr/bin/python 2e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng# -*- python -*- 3e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng# -*- coding: utf-8 -*- 4e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng# twatch - Experimental use of the perf python interface 5e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng# Copyright (C) 2011 Arnaldo Carvalho de Melo <acme@redhat.com> 6e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng# 7e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng# This application is free software; you can redistribute it and/or 8e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng# modify it under the terms of the GNU General Public License 9e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng# as published by the Free Software Foundation; version 2. 10e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng# 11e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng# This application is distributed in the hope that it will be useful, 12e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng# but WITHOUT ANY WARRANTY; without even the implied warranty of 13e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng# General Public License for more details. 15e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 16e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengimport perf 17e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 18e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengdef main(): 19e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng cpus = perf.cpu_map() 20e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng threads = perf.thread_map() 21e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng evsel = perf.evsel(task = 1, comm = 1, mmap = 0, 22e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng wakeup_events = 1, sample_period = 1, 23e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng sample_id_all = 1, 24e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng sample_type = perf.SAMPLE_PERIOD | perf.SAMPLE_TID | perf.SAMPLE_CPU | perf.SAMPLE_TID) 25e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng evsel.open(cpus = cpus, threads = threads); 26e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng evlist = perf.evlist(cpus, threads) 27e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng evlist.add(evsel) 28e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng evlist.mmap() 29e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng while True: 30e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng evlist.poll(timeout = -1) 31e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng for cpu in cpus: 32e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng event = evlist.read_on_cpu(cpu) 33e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng if not event: 34e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng continue 35e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng print "cpu: %2d, pid: %4d, tid: %4d" % (event.sample_cpu, 36e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng event.sample_pid, 37e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng event.sample_tid), 38e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng print event 39e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng 40e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengif __name__ == '__main__': 41e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng main() 42