oprofile-top.py revision 1596
11596Ssaidi@eecs.umich.edu#! /usr/bin/env python
21596Ssaidi@eecs.umich.eduimport sys
31596Ssaidi@eecs.umich.eduimport re
41596Ssaidi@eecs.umich.eduimport getopt
51596Ssaidi@eecs.umich.edufrom categories import *
61596Ssaidi@eecs.umich.edu
71596Ssaidi@eecs.umich.edudef category(app,sym):
81596Ssaidi@eecs.umich.edu    if re.search("vmlinux-2.6", app):
91596Ssaidi@eecs.umich.edu        name = sym
101596Ssaidi@eecs.umich.edu    else:
111596Ssaidi@eecs.umich.edu        name = app
121596Ssaidi@eecs.umich.edu
131596Ssaidi@eecs.umich.edu    if categories.has_key(name):
141596Ssaidi@eecs.umich.edu        return categories[name]
151596Ssaidi@eecs.umich.edu    for regexp, cat in categories_re:
161596Ssaidi@eecs.umich.edu        if regexp.match(name):
171596Ssaidi@eecs.umich.edu            return cat
181596Ssaidi@eecs.umich.edu    print "no match for symbol %s" % name
191596Ssaidi@eecs.umich.edu    return 'other'
201596Ssaidi@eecs.umich.edu
211596Ssaidi@eecs.umich.edutry:
221596Ssaidi@eecs.umich.edu   (opts, files) = getopt.getopt(sys.argv[1:], 'i')
231596Ssaidi@eecs.umich.eduexcept getopt.GetoptError:
241596Ssaidi@eecs.umich.edu        print "usage", sys.argv[0], "[-i] <files>"
251596Ssaidi@eecs.umich.edu        sys.exit(2)
261596Ssaidi@eecs.umich.edu
271596Ssaidi@eecs.umich.edushowidle = True
281596Ssaidi@eecs.umich.edu
291596Ssaidi@eecs.umich.edufor o,v in opts:
301596Ssaidi@eecs.umich.edu    if o == "-i":
311596Ssaidi@eecs.umich.edu        showidle = False
321596Ssaidi@eecs.umich.eduprint files
331596Ssaidi@eecs.umich.eduf = open(files.pop())
341596Ssaidi@eecs.umich.edutotal = 0
351596Ssaidi@eecs.umich.eduprof = {}
361596Ssaidi@eecs.umich.edulinenum  = 0
371596Ssaidi@eecs.umich.edufor line in f.readlines():
381596Ssaidi@eecs.umich.edu    line = re.sub("\(no symbols\)", "nosym", line)
391596Ssaidi@eecs.umich.edu    line = re.sub("anonymous.*", "nosym", line)
401596Ssaidi@eecs.umich.edu    linenum += 1
411596Ssaidi@eecs.umich.edu    if linenum < 4:
421596Ssaidi@eecs.umich.edu        continue
431596Ssaidi@eecs.umich.edu    (count, percent, app, sym) = line.split()
441596Ssaidi@eecs.umich.edu    #total += int(count)
451596Ssaidi@eecs.umich.edu    cat = category(app,sym)
461596Ssaidi@eecs.umich.edu    if cat != 'idle' or showidle:
471596Ssaidi@eecs.umich.edu      total += int(count)
481596Ssaidi@eecs.umich.edu      prof[cat] = prof.get(cat,0) + int(count)
491596Ssaidi@eecs.umich.edu
501596Ssaidi@eecs.umich.educats = ['other', 'user', 'copy', 'bufmgt', 'stack', 'driver', 'interrupt', 'alignment' ]
511596Ssaidi@eecs.umich.edu
521596Ssaidi@eecs.umich.eduif showidle:
531596Ssaidi@eecs.umich.edu   cats.insert(0,'idle')
541596Ssaidi@eecs.umich.edu
551596Ssaidi@eecs.umich.edu#syms = [(i[1], i[0]) for i in prof.items()]
561596Ssaidi@eecs.umich.edu#syms.sort()
571596Ssaidi@eecs.umich.edu#for i in range(len(syms)):
581596Ssaidi@eecs.umich.edu#    print "%s -- %5.1f%% " % (prof[i][1], 100 * float(prof[i][0])/float(total))
591596Ssaidi@eecs.umich.edu
601596Ssaidi@eecs.umich.edufor d in cats:
611596Ssaidi@eecs.umich.edu    if prof.has_key(d):
621596Ssaidi@eecs.umich.edu        print "%s -- %5.1f%% " % (d, 100 * float(prof[d])/float(total))
631596Ssaidi@eecs.umich.edu
64