summaryrefslogtreecommitdiff
path: root/src/python/m5/stats
diff options
context:
space:
mode:
authorNathan Binkert <nate@binkert.org>2011-05-12 11:19:32 -0700
committerNathan Binkert <nate@binkert.org>2011-05-12 11:19:32 -0700
commit35b0c1d3910595875de67a34f6b993047470fd55 (patch)
treef38c0a5a48492f6294ade11776963dfb84a763c5 /src/python/m5/stats
parent9c4c1419a7d83e9bc39c94aa0a37dd1bbbecc38d (diff)
downloadgem5-35b0c1d3910595875de67a34f6b993047470fd55.tar.xz
stats: better expose statistics to python.
Build a python list and dict of all stats and expose flags properly. --HG-- rename : src/python/m5/stats.py => src/python/m5/stats/__init__.py
Diffstat (limited to 'src/python/m5/stats')
-rw-r--r--src/python/m5/stats/__init__.py110
1 files changed, 110 insertions, 0 deletions
diff --git a/src/python/m5/stats/__init__.py b/src/python/m5/stats/__init__.py
new file mode 100644
index 000000000..612dbdfb5
--- /dev/null
+++ b/src/python/m5/stats/__init__.py
@@ -0,0 +1,110 @@
+# Copyright (c) 2007 The Regents of The University of Michigan
+# Copyright (c) 2010 The Hewlett-Packard Development Company
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met: redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer;
+# redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution;
+# neither the name of the copyright holders nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# Authors: Nathan Binkert
+
+from m5 import internal
+from m5.internal.stats import schedStatEvent as schedEvent
+from m5.objects import Root
+from m5.util import attrdict
+
+def initText(filename, desc=True):
+ internal.stats.initText(filename, desc)
+
+def initMySQL(host, database, user='', passwd='', project='test', name='test',
+ sample='0'):
+ if not user:
+ import getpass
+ user = getpass.getuser()
+
+ internal.stats.initMySQL(host, database, user, passwd, project, name,
+ sample)
+
+def initSimStats():
+ internal.stats.initSimStats()
+
+names = []
+stats_dict = {}
+stats_list = []
+raw_stats_list = []
+def enable():
+ '''Enable the statistics package. Before the statistics package is
+ enabled, all statistics must be created and initialized and once
+ the package is enabled, no more statistics can be created.'''
+ __dynamic_cast = []
+ for k, v in internal.stats.__dict__.iteritems():
+ if k.startswith('dynamic_'):
+ __dynamic_cast.append(v)
+
+ for stat in internal.stats.statsList():
+ for cast in __dynamic_cast:
+ val = cast(stat)
+ if val is not None:
+ stats_list.append(val)
+ raw_stats_list.append(val)
+ break
+ else:
+ fatal("unknown stat type %s", stat)
+
+ def less(stat1, stat2):
+ v1 = stat1.name.split('.')
+ v2 = stat2.name.split('.')
+ return v1 < v2
+
+ stats_list.sort(less)
+ for stat in stats_list:
+ stats_dict[stat.name] = stat
+
+ internal.stats.enable()
+
+def dump():
+ # Currently prepare happens in the dump, but we should maybe move
+ # that out.
+
+ #internal.stats.prepare()
+ internal.stats.dump()
+
+def reset():
+ # call reset stats on all SimObjects
+ root = Root.getInstance()
+ if root:
+ for obj in root.descendants(): obj.resetStats()
+
+ # call any other registered stats reset callbacks
+ internal.stats.reset()
+
+flags = attrdict({
+ 'none' : 0x0000,
+ 'init' : 0x0001,
+ 'display' : 0x0002,
+ 'total' : 0x0010,
+ 'pdf' : 0x0020,
+ 'cdf' : 0x0040,
+ 'dist' : 0x0080,
+ 'nozero' : 0x0100,
+ 'nonan' : 0x0200,
+})