oprofile-top.py revision 2665:a124942bacb8
111308Santhony.gutierrez@amd.com#! /usr/bin/env python 211308Santhony.gutierrez@amd.com 311308Santhony.gutierrez@amd.com# Copyright (c) 2005 The Regents of The University of Michigan 411308Santhony.gutierrez@amd.com# All rights reserved. 511308Santhony.gutierrez@amd.com# 611308Santhony.gutierrez@amd.com# Redistribution and use in source and binary forms, with or without 711308Santhony.gutierrez@amd.com# modification, are permitted provided that the following conditions are 811308Santhony.gutierrez@amd.com# met: redistributions of source code must retain the above copyright 911308Santhony.gutierrez@amd.com# notice, this list of conditions and the following disclaimer; 1011308Santhony.gutierrez@amd.com# redistributions in binary form must reproduce the above copyright 1111308Santhony.gutierrez@amd.com# notice, this list of conditions and the following disclaimer in the 1211308Santhony.gutierrez@amd.com# documentation and/or other materials provided with the distribution; 1311308Santhony.gutierrez@amd.com# neither the name of the copyright holders nor the names of its 1411308Santhony.gutierrez@amd.com# contributors may be used to endorse or promote products derived from 1511308Santhony.gutierrez@amd.com# this software without specific prior written permission. 1611308Santhony.gutierrez@amd.com# 1711308Santhony.gutierrez@amd.com# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1811308Santhony.gutierrez@amd.com# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1911308Santhony.gutierrez@amd.com# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 2011308Santhony.gutierrez@amd.com# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2111308Santhony.gutierrez@amd.com# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2211308Santhony.gutierrez@amd.com# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2311308Santhony.gutierrez@amd.com# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2411308Santhony.gutierrez@amd.com# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2511308Santhony.gutierrez@amd.com# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2611308Santhony.gutierrez@amd.com# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2711308Santhony.gutierrez@amd.com# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2811308Santhony.gutierrez@amd.com# 2911308Santhony.gutierrez@amd.com# Authors: Ali Saidi 3011308Santhony.gutierrez@amd.com# Nathan Binkert 3111308Santhony.gutierrez@amd.com 3211308Santhony.gutierrez@amd.com# Parse sampled function profile output (quick hack). 3311308Santhony.gutierrez@amd.com 3411308Santhony.gutierrez@amd.comimport sys 3511308Santhony.gutierrez@amd.comimport re 3611308Santhony.gutierrez@amd.comimport getopt 3711308Santhony.gutierrez@amd.comfrom categories import * 3812563Sgabeblack@google.com 3912563Sgabeblack@google.comdef category(app,sym): 4011308Santhony.gutierrez@amd.com if re.search("vmlinux-2.6", app): 4111308Santhony.gutierrez@amd.com name = sym 4211308Santhony.gutierrez@amd.com else: 4311308Santhony.gutierrez@amd.com name = app 4411308Santhony.gutierrez@amd.com 4512563Sgabeblack@google.com if categories.has_key(name): 4611308Santhony.gutierrez@amd.com return categories[name] 4711308Santhony.gutierrez@amd.com for regexp, cat in categories_re: 4811308Santhony.gutierrez@amd.com if regexp.match(name): 4911308Santhony.gutierrez@amd.com return cat 5011308Santhony.gutierrez@amd.com print "no match for symbol %s" % name 5111308Santhony.gutierrez@amd.com return 'other' 5211308Santhony.gutierrez@amd.com 5311308Santhony.gutierrez@amd.comtry: 5411308Santhony.gutierrez@amd.com (opts, files) = getopt.getopt(sys.argv[1:], 'i') 5511308Santhony.gutierrez@amd.comexcept getopt.GetoptError: 5611308Santhony.gutierrez@amd.com print "usage", sys.argv[0], "[-i] <files>" 5711308Santhony.gutierrez@amd.com sys.exit(2) 5811308Santhony.gutierrez@amd.com 5911308Santhony.gutierrez@amd.comshowidle = True 6011308Santhony.gutierrez@amd.com 6111308Santhony.gutierrez@amd.comfor o,v in opts: 6211308Santhony.gutierrez@amd.com if o == "-i": 6311308Santhony.gutierrez@amd.com showidle = False 6411308Santhony.gutierrez@amd.comprint files 6511308Santhony.gutierrez@amd.comf = open(files.pop()) 6611308Santhony.gutierrez@amd.comtotal = 0 6711308Santhony.gutierrez@amd.comprof = {} 6811308Santhony.gutierrez@amd.comlinenum = 0 6911308Santhony.gutierrez@amd.comfor line in f.readlines(): 7011308Santhony.gutierrez@amd.com line = re.sub("\(no symbols\)", "nosym", line) 7111308Santhony.gutierrez@amd.com line = re.sub("anonymous.*", "nosym", line) 7211308Santhony.gutierrez@amd.com linenum += 1 7311308Santhony.gutierrez@amd.com if linenum < 4: 7411308Santhony.gutierrez@amd.com continue 7511308Santhony.gutierrez@amd.com (count, percent, app, sym) = line.split() 7611308Santhony.gutierrez@amd.com #total += int(count) 7711308Santhony.gutierrez@amd.com cat = category(app,sym) 7811308Santhony.gutierrez@amd.com if cat != 'idle' or showidle: 7911308Santhony.gutierrez@amd.com total += int(count) 8011308Santhony.gutierrez@amd.com prof[cat] = prof.get(cat,0) + int(count) 8111308Santhony.gutierrez@amd.com 8211308Santhony.gutierrez@amd.comcats = ['other', 'user', 'copy', 'bufmgt', 'stack', 'driver', 'interrupt', 'alignment' ] 8311308Santhony.gutierrez@amd.com 8411308Santhony.gutierrez@amd.comif showidle: 8511308Santhony.gutierrez@amd.com cats.insert(0,'idle') 8611308Santhony.gutierrez@amd.com 8711308Santhony.gutierrez@amd.com#syms = [(i[1], i[0]) for i in prof.items()] 8811308Santhony.gutierrez@amd.com#syms.sort() 8911308Santhony.gutierrez@amd.com#for i in range(len(syms)): 9011308Santhony.gutierrez@amd.com# print "%s -- %5.1f%% " % (prof[i][1], 100 * float(prof[i][0])/float(total)) 9111308Santhony.gutierrez@amd.com 9211308Santhony.gutierrez@amd.comfor d in cats: 9311308Santhony.gutierrez@amd.com if prof.has_key(d): 9411308Santhony.gutierrez@amd.com print "%s -- %5.1f%% " % (d, 100 * float(prof[d])/float(total)) 9511308Santhony.gutierrez@amd.com 9611308Santhony.gutierrez@amd.com