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