__init__.py revision 11788:342c0eaab188
112941Sandreas.sandberg@arm.com# Copyright (c) 2007 The Regents of The University of Michigan
29520SAndreas.Sandberg@ARM.com# Copyright (c) 2010 The Hewlett-Packard Development Company
39520SAndreas.Sandberg@ARM.com# All rights reserved.
49520SAndreas.Sandberg@ARM.com#
59520SAndreas.Sandberg@ARM.com# Redistribution and use in source and binary forms, with or without
69520SAndreas.Sandberg@ARM.com# modification, are permitted provided that the following conditions are
79520SAndreas.Sandberg@ARM.com# met: redistributions of source code must retain the above copyright
89520SAndreas.Sandberg@ARM.com# notice, this list of conditions and the following disclaimer;
99520SAndreas.Sandberg@ARM.com# redistributions in binary form must reproduce the above copyright
109520SAndreas.Sandberg@ARM.com# notice, this list of conditions and the following disclaimer in the
119520SAndreas.Sandberg@ARM.com# documentation and/or other materials provided with the distribution;
129520SAndreas.Sandberg@ARM.com# neither the name of the copyright holders nor the names of its
139520SAndreas.Sandberg@ARM.com# contributors may be used to endorse or promote products derived from
149520SAndreas.Sandberg@ARM.com# this software without specific prior written permission.
159520SAndreas.Sandberg@ARM.com#
169520SAndreas.Sandberg@ARM.com# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
179520SAndreas.Sandberg@ARM.com# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
189520SAndreas.Sandberg@ARM.com# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
199520SAndreas.Sandberg@ARM.com# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
209520SAndreas.Sandberg@ARM.com# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
219520SAndreas.Sandberg@ARM.com# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
229520SAndreas.Sandberg@ARM.com# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
239520SAndreas.Sandberg@ARM.com# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
249520SAndreas.Sandberg@ARM.com# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
259520SAndreas.Sandberg@ARM.com# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
269520SAndreas.Sandberg@ARM.com# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
279520SAndreas.Sandberg@ARM.com#
289520SAndreas.Sandberg@ARM.com# Authors: Nathan Binkert
299520SAndreas.Sandberg@ARM.com
309520SAndreas.Sandberg@ARM.comimport m5
319520SAndreas.Sandberg@ARM.com
329520SAndreas.Sandberg@ARM.comfrom m5 import internal
339520SAndreas.Sandberg@ARM.comfrom m5.objects import Root
349520SAndreas.Sandberg@ARM.comfrom m5.util import attrdict, fatal
359520SAndreas.Sandberg@ARM.com
369520SAndreas.Sandberg@ARM.com# Stat exports
379520SAndreas.Sandberg@ARM.comfrom m5.internal.stats import schedStatEvent as schedEvent
3812564Sgabeblack@google.comfrom m5.internal.stats import periodicStatDump
3912564Sgabeblack@google.com
4012095Sandreas.sandberg@arm.comoutputList = []
419520SAndreas.Sandberg@ARM.comdef initText(filename, desc=True):
429520SAndreas.Sandberg@ARM.com    output = internal.stats.initText(filename, desc)
439520SAndreas.Sandberg@ARM.com    outputList.append(output)
4411995Sgabeblack@google.com
459520SAndreas.Sandberg@ARM.comdef initSimStats():
469520SAndreas.Sandberg@ARM.com    internal.stats.initSimStats()
479520SAndreas.Sandberg@ARM.com    internal.stats.registerPythonStatsHandlers()
489520SAndreas.Sandberg@ARM.com
499520SAndreas.Sandberg@ARM.comnames = []
509520SAndreas.Sandberg@ARM.comstats_dict = {}
519520SAndreas.Sandberg@ARM.comstats_list = []
529520SAndreas.Sandberg@ARM.comdef enable():
539520SAndreas.Sandberg@ARM.com    '''Enable the statistics package.  Before the statistics package is
549520SAndreas.Sandberg@ARM.com    enabled, all statistics must be created and initialized and once
559520SAndreas.Sandberg@ARM.com    the package is enabled, no more statistics can be created.'''
569520SAndreas.Sandberg@ARM.com
579520SAndreas.Sandberg@ARM.com    global stats_list
589520SAndreas.Sandberg@ARM.com    stats_list = list(internal.stats.statsList())
5911688Sandreas.hansson@arm.com
609520SAndreas.Sandberg@ARM.com    for stat in stats_list:
619520SAndreas.Sandberg@ARM.com        if not stat.check() or not stat.baseCheck():
6212941Sandreas.sandberg@arm.com            fatal("statistic '%s' (%d) was not properly initialized " \
6312941Sandreas.sandberg@arm.com                  "by a regStats() function\n", stat.name, stat.id)
6412941Sandreas.sandberg@arm.com
6512941Sandreas.sandberg@arm.com        if not (stat.flags & flags.display):
6612941Sandreas.sandberg@arm.com            stat.name = "__Stat%06d" % stat.id
6712941Sandreas.sandberg@arm.com
6812941Sandreas.sandberg@arm.com    def less(stat1, stat2):
6912941Sandreas.sandberg@arm.com        v1 = stat1.name.split('.')
7012941Sandreas.sandberg@arm.com        v2 = stat2.name.split('.')
7112941Sandreas.sandberg@arm.com        return v1 < v2
7213012Sandreas.sandberg@arm.com
7312941Sandreas.sandberg@arm.com    stats_list.sort(less)
749520SAndreas.Sandberg@ARM.com    for stat in stats_list:
759520SAndreas.Sandberg@ARM.com        stats_dict[stat.name] = stat
769520SAndreas.Sandberg@ARM.com        stat.enable()
779520SAndreas.Sandberg@ARM.com
7811995Sgabeblack@google.com    internal.stats.enable();
799520SAndreas.Sandberg@ARM.com
809520SAndreas.Sandberg@ARM.comdef prepare():
8112564Sgabeblack@google.com    '''Prepare all stats for data access.  This must be done before
829520SAndreas.Sandberg@ARM.com    dumping and serialization.'''
839520SAndreas.Sandberg@ARM.com
849520SAndreas.Sandberg@ARM.com    for stat in stats_list:
859520SAndreas.Sandberg@ARM.com        stat.prepare()
869520SAndreas.Sandberg@ARM.com
8712564Sgabeblack@google.comlastDump = 0
889520SAndreas.Sandberg@ARM.comdef dump():
899520SAndreas.Sandberg@ARM.com    '''Dump all statistics data to the registered outputs'''
9012564Sgabeblack@google.com
919520SAndreas.Sandberg@ARM.com    curTick = m5.curTick()
929520SAndreas.Sandberg@ARM.com
939520SAndreas.Sandberg@ARM.com    global lastDump
949520SAndreas.Sandberg@ARM.com    assert lastDump <= curTick
959520SAndreas.Sandberg@ARM.com    if lastDump == curTick:
969520SAndreas.Sandberg@ARM.com        return
9712564Sgabeblack@google.com    lastDump = curTick
989520SAndreas.Sandberg@ARM.com
999520SAndreas.Sandberg@ARM.com    internal.stats.processDumpQueue()
1009520SAndreas.Sandberg@ARM.com
10111995Sgabeblack@google.com    prepare()
1029520SAndreas.Sandberg@ARM.com
10311251Sradhika.jagtap@ARM.com    for output in outputList:
10411251Sradhika.jagtap@ARM.com        if output.valid():
10511251Sradhika.jagtap@ARM.com            output.begin()
10611251Sradhika.jagtap@ARM.com            for stat in stats_list:
10711251Sradhika.jagtap@ARM.com                stat.visit(output)
10811251Sradhika.jagtap@ARM.com            output.end()
10911251Sradhika.jagtap@ARM.com
11011251Sradhika.jagtap@ARM.comdef reset():
11111251Sradhika.jagtap@ARM.com    '''Reset all statistics to the base state'''
11211251Sradhika.jagtap@ARM.com
11311251Sradhika.jagtap@ARM.com    # call reset stats on all SimObjects
11411251Sradhika.jagtap@ARM.com    root = Root.getInstance()
11511251Sradhika.jagtap@ARM.com    if root:
11611251Sradhika.jagtap@ARM.com        for obj in root.descendants(): obj.resetStats()
11711251Sradhika.jagtap@ARM.com
11811251Sradhika.jagtap@ARM.com    # call any other registered stats reset callbacks
11911251Sradhika.jagtap@ARM.com    for stat in stats_list:
12011251Sradhika.jagtap@ARM.com        stat.reset()
12111251Sradhika.jagtap@ARM.com
12211251Sradhika.jagtap@ARM.com    internal.stats.processResetQueue()
12311251Sradhika.jagtap@ARM.com
12411251Sradhika.jagtap@ARM.comflags = attrdict({
12511251Sradhika.jagtap@ARM.com    'none'    : 0x0000,
12611251Sradhika.jagtap@ARM.com    'init'    : 0x0001,
1279520SAndreas.Sandberg@ARM.com    'display' : 0x0002,
1289520SAndreas.Sandberg@ARM.com    'total'   : 0x0010,
1299520SAndreas.Sandberg@ARM.com    'pdf'     : 0x0020,
13012098Sandreas.sandberg@arm.com    'cdf'     : 0x0040,
13112152Sandreas.sandberg@arm.com    'dist'    : 0x0080,
13212152Sandreas.sandberg@arm.com    'nozero'  : 0x0100,
13312152Sandreas.sandberg@arm.com    'nonan'   : 0x0200,
13412152Sandreas.sandberg@arm.com})
13512152Sandreas.sandberg@arm.com