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