diff options
author | Ali Saidi <saidi@eecs.umich.edu> | 2005-03-23 15:55:09 -0500 |
---|---|---|
committer | Ali Saidi <saidi@eecs.umich.edu> | 2005-03-23 15:55:09 -0500 |
commit | a8182f74df69ea0071597589d2d24ae92f555cf1 (patch) | |
tree | 29d61b95b2b8bde7affe3794f6e7e3f8034b2a92 /util/oprofile-top.py | |
parent | 903c984770f05efccd6487aa90e26957c28907d5 (diff) | |
download | gem5-a8182f74df69ea0071597589d2d24ae92f555cf1.tar.xz |
update profile code to use shared categories file
util/stats/stats.py:
add database command to help
--HG--
extra : convert_revision : 5d77e9d3e142f884d08d34b730c385c41c6bcafb
Diffstat (limited to 'util/oprofile-top.py')
-rwxr-xr-x | util/oprofile-top.py | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/util/oprofile-top.py b/util/oprofile-top.py new file mode 100755 index 000000000..5ada86c2f --- /dev/null +++ b/util/oprofile-top.py @@ -0,0 +1,63 @@ +#! /usr/bin/env python +import sys +import re +import getopt +from categories import * + +def category(app,sym): + if re.search("vmlinux-2.6", app): + name = sym + else: + name = app + + if categories.has_key(name): + return categories[name] + for regexp, cat in categories_re: + if regexp.match(name): + return cat + print "no match for symbol %s" % name + return 'other' + +try: + (opts, files) = getopt.getopt(sys.argv[1:], 'i') +except getopt.GetoptError: + print "usage", sys.argv[0], "[-i] <files>" + sys.exit(2) + +showidle = True + +for o,v in opts: + if o == "-i": + showidle = False +print files +f = open(files.pop()) +total = 0 +prof = {} +linenum = 0 +for line in f.readlines(): + line = re.sub("\(no symbols\)", "nosym", line) + line = re.sub("anonymous.*", "nosym", line) + linenum += 1 + if linenum < 4: + continue + (count, percent, app, sym) = line.split() + #total += int(count) + cat = category(app,sym) + if cat != 'idle' or showidle: + total += int(count) + prof[cat] = prof.get(cat,0) + int(count) + +cats = ['other', 'user', 'copy', 'bufmgt', 'stack', 'driver', 'interrupt', 'alignment' ] + +if showidle: + cats.insert(0,'idle') + +#syms = [(i[1], i[0]) for i in prof.items()] +#syms.sort() +#for i in range(len(syms)): +# print "%s -- %5.1f%% " % (prof[i][1], 100 * float(prof[i][0])/float(total)) + +for d in cats: + if prof.has_key(d): + print "%s -- %5.1f%% " % (d, 100 * float(prof[d])/float(total)) + |