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