summaryrefslogtreecommitdiff
path: root/util/oprofile-top.py
diff options
context:
space:
mode:
authorAli Saidi <saidi@eecs.umich.edu>2005-03-23 15:55:09 -0500
committerAli Saidi <saidi@eecs.umich.edu>2005-03-23 15:55:09 -0500
commita8182f74df69ea0071597589d2d24ae92f555cf1 (patch)
tree29d61b95b2b8bde7affe3794f6e7e3f8034b2a92 /util/oprofile-top.py
parent903c984770f05efccd6487aa90e26957c28907d5 (diff)
downloadgem5-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-xutil/oprofile-top.py63
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))
+