113540Sandrea.mondelli@ucf.edu#! /usr/bin/env python2.7 21758Ssaidi@eecs.umich.edu 31758Ssaidi@eecs.umich.edu# Copyright (c) 2005 The Regents of The University of Michigan 41758Ssaidi@eecs.umich.edu# All rights reserved. 51758Ssaidi@eecs.umich.edu# 61758Ssaidi@eecs.umich.edu# Redistribution and use in source and binary forms, with or without 71758Ssaidi@eecs.umich.edu# modification, are permitted provided that the following conditions are 81758Ssaidi@eecs.umich.edu# met: redistributions of source code must retain the above copyright 91758Ssaidi@eecs.umich.edu# notice, this list of conditions and the following disclaimer; 101758Ssaidi@eecs.umich.edu# redistributions in binary form must reproduce the above copyright 111758Ssaidi@eecs.umich.edu# notice, this list of conditions and the following disclaimer in the 121758Ssaidi@eecs.umich.edu# documentation and/or other materials provided with the distribution; 131758Ssaidi@eecs.umich.edu# neither the name of the copyright holders nor the names of its 141758Ssaidi@eecs.umich.edu# contributors may be used to endorse or promote products derived from 151758Ssaidi@eecs.umich.edu# this software without specific prior written permission. 161758Ssaidi@eecs.umich.edu# 171758Ssaidi@eecs.umich.edu# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 181758Ssaidi@eecs.umich.edu# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 191758Ssaidi@eecs.umich.edu# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 201758Ssaidi@eecs.umich.edu# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 211758Ssaidi@eecs.umich.edu# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 221758Ssaidi@eecs.umich.edu# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 231758Ssaidi@eecs.umich.edu# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 241758Ssaidi@eecs.umich.edu# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 251758Ssaidi@eecs.umich.edu# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 261758Ssaidi@eecs.umich.edu# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 271758Ssaidi@eecs.umich.edu# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 282665Ssaidi@eecs.umich.edu# 292665Ssaidi@eecs.umich.edu# Authors: Ali Saidi 302665Ssaidi@eecs.umich.edu# Nathan Binkert 311758Ssaidi@eecs.umich.edu 321772Sbinkertn@umich.edu# Parse sampled function profile output (quick hack). 331772Sbinkertn@umich.edu 341596Ssaidi@eecs.umich.eduimport sys 351596Ssaidi@eecs.umich.eduimport re 361596Ssaidi@eecs.umich.eduimport getopt 371596Ssaidi@eecs.umich.edufrom categories import * 381596Ssaidi@eecs.umich.edu 391596Ssaidi@eecs.umich.edudef category(app,sym): 401596Ssaidi@eecs.umich.edu if re.search("vmlinux-2.6", app): 411596Ssaidi@eecs.umich.edu name = sym 421596Ssaidi@eecs.umich.edu else: 431596Ssaidi@eecs.umich.edu name = app 441596Ssaidi@eecs.umich.edu 451596Ssaidi@eecs.umich.edu if categories.has_key(name): 461596Ssaidi@eecs.umich.edu return categories[name] 471596Ssaidi@eecs.umich.edu for regexp, cat in categories_re: 481596Ssaidi@eecs.umich.edu if regexp.match(name): 491596Ssaidi@eecs.umich.edu return cat 501596Ssaidi@eecs.umich.edu print "no match for symbol %s" % name 511596Ssaidi@eecs.umich.edu return 'other' 521596Ssaidi@eecs.umich.edu 531596Ssaidi@eecs.umich.edutry: 541596Ssaidi@eecs.umich.edu (opts, files) = getopt.getopt(sys.argv[1:], 'i') 551596Ssaidi@eecs.umich.eduexcept getopt.GetoptError: 561596Ssaidi@eecs.umich.edu print "usage", sys.argv[0], "[-i] <files>" 571596Ssaidi@eecs.umich.edu sys.exit(2) 581596Ssaidi@eecs.umich.edu 591596Ssaidi@eecs.umich.edushowidle = True 601596Ssaidi@eecs.umich.edu 611596Ssaidi@eecs.umich.edufor o,v in opts: 621596Ssaidi@eecs.umich.edu if o == "-i": 631596Ssaidi@eecs.umich.edu showidle = False 641596Ssaidi@eecs.umich.eduprint files 651596Ssaidi@eecs.umich.eduf = open(files.pop()) 661596Ssaidi@eecs.umich.edutotal = 0 671596Ssaidi@eecs.umich.eduprof = {} 681596Ssaidi@eecs.umich.edulinenum = 0 691596Ssaidi@eecs.umich.edufor line in f.readlines(): 701596Ssaidi@eecs.umich.edu line = re.sub("\(no symbols\)", "nosym", line) 711596Ssaidi@eecs.umich.edu line = re.sub("anonymous.*", "nosym", line) 721596Ssaidi@eecs.umich.edu linenum += 1 731596Ssaidi@eecs.umich.edu if linenum < 4: 741596Ssaidi@eecs.umich.edu continue 751596Ssaidi@eecs.umich.edu (count, percent, app, sym) = line.split() 761596Ssaidi@eecs.umich.edu #total += int(count) 771596Ssaidi@eecs.umich.edu cat = category(app,sym) 781596Ssaidi@eecs.umich.edu if cat != 'idle' or showidle: 791596Ssaidi@eecs.umich.edu total += int(count) 801596Ssaidi@eecs.umich.edu prof[cat] = prof.get(cat,0) + int(count) 811596Ssaidi@eecs.umich.edu 821596Ssaidi@eecs.umich.educats = ['other', 'user', 'copy', 'bufmgt', 'stack', 'driver', 'interrupt', 'alignment' ] 831596Ssaidi@eecs.umich.edu 841596Ssaidi@eecs.umich.eduif showidle: 851596Ssaidi@eecs.umich.edu cats.insert(0,'idle') 861596Ssaidi@eecs.umich.edu 871596Ssaidi@eecs.umich.edu#syms = [(i[1], i[0]) for i in prof.items()] 881596Ssaidi@eecs.umich.edu#syms.sort() 891596Ssaidi@eecs.umich.edu#for i in range(len(syms)): 901596Ssaidi@eecs.umich.edu# print "%s -- %5.1f%% " % (prof[i][1], 100 * float(prof[i][0])/float(total)) 911596Ssaidi@eecs.umich.edu 921596Ssaidi@eecs.umich.edufor d in cats: 931596Ssaidi@eecs.umich.edu if prof.has_key(d): 941596Ssaidi@eecs.umich.edu print "%s -- %5.1f%% " % (d, 100 * float(prof[d])/float(total)) 951596Ssaidi@eecs.umich.edu 96