stats.py revision 1758
11049Sbinkertn@umich.edu#!/usr/bin/env python
21758Ssaidi@eecs.umich.edu
31758Ssaidi@eecs.umich.edu# Copyright (c) 2003-2004 The Regents of The University of Michigan
41758Ssaidi@eecs.umich.edu# All rights reserved.
51758Ssaidi@eecs.umich.edu#
61758Ssaidi@eecs.umich.edu# Redistribution and use in source and binary forms, with or without
71758Ssaidi@eecs.umich.edu# modification, are permitted provided that the following conditions are
81758Ssaidi@eecs.umich.edu# met: redistributions of source code must retain the above copyright
91758Ssaidi@eecs.umich.edu# notice, this list of conditions and the following disclaimer;
101758Ssaidi@eecs.umich.edu# redistributions in binary form must reproduce the above copyright
111758Ssaidi@eecs.umich.edu# notice, this list of conditions and the following disclaimer in the
121758Ssaidi@eecs.umich.edu# documentation and/or other materials provided with the distribution;
131758Ssaidi@eecs.umich.edu# neither the name of the copyright holders nor the names of its
141758Ssaidi@eecs.umich.edu# contributors may be used to endorse or promote products derived from
151758Ssaidi@eecs.umich.edu# this software without specific prior written permission.
161758Ssaidi@eecs.umich.edu#
171758Ssaidi@eecs.umich.edu# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
181758Ssaidi@eecs.umich.edu# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
191758Ssaidi@eecs.umich.edu# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
201758Ssaidi@eecs.umich.edu# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
211758Ssaidi@eecs.umich.edu# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
221758Ssaidi@eecs.umich.edu# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
231758Ssaidi@eecs.umich.edu# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
241758Ssaidi@eecs.umich.edu# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
251758Ssaidi@eecs.umich.edu# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
261758Ssaidi@eecs.umich.edu# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
271758Ssaidi@eecs.umich.edu# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
281758Ssaidi@eecs.umich.edu
291758Ssaidi@eecs.umich.edu#Permission is granted to use, copy, create derivative works and
301758Ssaidi@eecs.umich.edu#redistribute this software and such derivative works for any purpose,
311758Ssaidi@eecs.umich.edu#so long as the copyright notice above, this grant of permission, and
321758Ssaidi@eecs.umich.edu#the disclaimer below appear in all copies made; and so long as the
331758Ssaidi@eecs.umich.edu#name of The University of Michigan is not used in any advertising or
341758Ssaidi@eecs.umich.edu#publicity pertaining to the use or distribution of this software
351758Ssaidi@eecs.umich.edu#without specific, written prior authorization.
361758Ssaidi@eecs.umich.edu#
371758Ssaidi@eecs.umich.edu#THIS SOFTWARE IS PROVIDED AS IS, WITHOUT REPRESENTATION FROM THE
381758Ssaidi@eecs.umich.edu#UNIVERSITY OF MICHIGAN AS TO ITS FITNESS FOR ANY PURPOSE, AND WITHOUT
391758Ssaidi@eecs.umich.edu#WARRANTY BY THE UNIVERSITY OF MICHIGAN OF ANY KIND, EITHER EXPRESS OR
401758Ssaidi@eecs.umich.edu#IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF
411758Ssaidi@eecs.umich.edu#MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE REGENTS OF
421758Ssaidi@eecs.umich.edu#THE UNIVERSITY OF MICHIGAN SHALL NOT BE LIABLE FOR ANY DAMAGES,
431758Ssaidi@eecs.umich.edu#INCLUDING DIRECT, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
441758Ssaidi@eecs.umich.edu#DAMAGES, WITH RESPECT TO ANY CLAIM ARISING OUT OF OR IN CONNECTION
451758Ssaidi@eecs.umich.edu#WITH THE USE OF THE SOFTWARE, EVEN IF IT HAS BEEN OR IS HEREAFTER
461758Ssaidi@eecs.umich.edu#ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
471758Ssaidi@eecs.umich.edu
481049Sbinkertn@umich.edufrom __future__ import division
491318Ssaidi@eecs.umich.eduimport re, sys, math
501049Sbinkertn@umich.edu
511329Ssaidi@eecs.umich.edu
521049Sbinkertn@umich.edudef usage():
531049Sbinkertn@umich.edu    print '''\
541049Sbinkertn@umich.eduUsage: %s [-E] [-F] [-d <db> ] [-g <get> ] [-h <host>] [-p]
551331Ssaidi@eecs.umich.edu       [-s <system>] [-r <runs> ] [-T <samples>] [-u <username>]
561331Ssaidi@eecs.umich.edu       <command> [command args]
571331Ssaidi@eecs.umich.edu
581331Ssaidi@eecs.umich.edu       commands    extra parameters   description
591331Ssaidi@eecs.umich.edu       ----------- ------------------ ---------------------------------------
601331Ssaidi@eecs.umich.edu       bins        [regex]            List bins (only matching regex)
611331Ssaidi@eecs.umich.edu       formula     <formula>          Evaluated formula specified
621331Ssaidi@eecs.umich.edu       formulas    [regex]            List formulas (only matching regex)
631331Ssaidi@eecs.umich.edu       runs        none               List all runs in database
641331Ssaidi@eecs.umich.edu       samples     none               List samples present in database
651331Ssaidi@eecs.umich.edu       stability   <pairnum> <stats>  Calculated statistical info about stats
661331Ssaidi@eecs.umich.edu       stat        <regex>            Show stat data (only matching regex)
671331Ssaidi@eecs.umich.edu       stats       [regex]            List all stats (only matching regex)
681596Ssaidi@eecs.umich.edu
691596Ssaidi@eecs.umich.edu       database    <command>          Where command is drop, init, or clean
701596Ssaidi@eecs.umich.edu
711049Sbinkertn@umich.edu''' % sys.argv[0]
721049Sbinkertn@umich.edu    sys.exit(1)
731049Sbinkertn@umich.edu
741049Sbinkertn@umich.edudef getopts(list, flags):
751049Sbinkertn@umich.edu    import getopt
761049Sbinkertn@umich.edu    try:
771049Sbinkertn@umich.edu        opts, args = getopt.getopt(list, flags)
781049Sbinkertn@umich.edu    except getopt.GetoptError:
791049Sbinkertn@umich.edu        usage()
801049Sbinkertn@umich.edu
811049Sbinkertn@umich.edu    return opts, args
821049Sbinkertn@umich.edu
831049Sbinkertn@umich.edudef printval(name, value, invert = False):
841049Sbinkertn@umich.edu    if invert and value != 0.0:
851049Sbinkertn@umich.edu        value = 1 / value
861049Sbinkertn@umich.edu
871049Sbinkertn@umich.edu    if value == (1e300*1e300):
881049Sbinkertn@umich.edu        return
891049Sbinkertn@umich.edu
901049Sbinkertn@umich.edu    if printval.mode == 'G':
911049Sbinkertn@umich.edu        print '%s:    %g' % (name, value)
921049Sbinkertn@umich.edu    elif printval.mode != 'F' and value > 1e6:
931049Sbinkertn@umich.edu        print '%s:    %0.5e' % (name, value)
941049Sbinkertn@umich.edu    else:
951049Sbinkertn@umich.edu        print '%s:    %f' % (name, value)
961049Sbinkertn@umich.edu
971049Sbinkertn@umich.eduprintval.mode = 'G'
981049Sbinkertn@umich.edu
991049Sbinkertn@umich.edudef unique(list):
1001049Sbinkertn@umich.edu    set = {}
1011049Sbinkertn@umich.edu    map(set.__setitem__, list, [])
1021049Sbinkertn@umich.edu    return set.keys()
1031049Sbinkertn@umich.edu
1041621Sbinkertn@umich.edu#benchmarks = [ 'm', 's', 'snt', 'nb1', 'w1', 'w2', 'w3', 'w4', 'nm', 'ns', 'nw1', 'nw2', 'nw3' ]
1051621Sbinkertn@umich.edu
1061621Sbinkertn@umich.edudef graphdata(runs, options, tag, label, value):
1071307Sbinkertn@umich.edu    import info
1081307Sbinkertn@umich.edu
1091307Sbinkertn@umich.edu    bench_system = {
1101307Sbinkertn@umich.edu        'm' : 'client',
1111307Sbinkertn@umich.edu        's' : 'client',
1121307Sbinkertn@umich.edu        'snt' : 'client',
1131307Sbinkertn@umich.edu        'nb1' : 'server',
1141307Sbinkertn@umich.edu        'nb2' : 'server',
1151307Sbinkertn@umich.edu        'nt1' : 'server',
1161307Sbinkertn@umich.edu        'nt2' : 'server',
1171307Sbinkertn@umich.edu        'w1' : 'server',
1181307Sbinkertn@umich.edu        'w2' : 'server',
1191307Sbinkertn@umich.edu        'w3' : 'server',
1201307Sbinkertn@umich.edu        'w4' : 'server',
1211307Sbinkertn@umich.edu        'w1s' : 'server',
1221307Sbinkertn@umich.edu        'w2s' : 'server',
1231307Sbinkertn@umich.edu        'w3s' : 'server',
1241307Sbinkertn@umich.edu        'ns' : 'natbox',
1251307Sbinkertn@umich.edu        'nm' : 'natbox',
1261307Sbinkertn@umich.edu        'nw1' : 'natbox',
1271307Sbinkertn@umich.edu        'nw2' : 'natbox',
1281307Sbinkertn@umich.edu        'nw3' : 'natbox'
1291307Sbinkertn@umich.edu        }
1301307Sbinkertn@umich.edu
1311621Sbinkertn@umich.edu    system_configs = {
1321621Sbinkertn@umich.edu        's1' : 'Uni 4GHz',
1331621Sbinkertn@umich.edu        'm1' : 'Uni 6GHz',
1341621Sbinkertn@umich.edu        'f1' : 'Uni 8GHz',
1351621Sbinkertn@umich.edu        'q1' : 'Uni 10GHz',
1361621Sbinkertn@umich.edu        's2' : 'Dual 4GHz',
1371621Sbinkertn@umich.edu        'm2' : 'Dual 6GHz',
1381621Sbinkertn@umich.edu        's4' : 'Quad 4GHz',
1391621Sbinkertn@umich.edu        'm4' : 'Quad 6GHz' }
1401621Sbinkertn@umich.edu
1411621Sbinkertn@umich.edu    configs = ['ste', 'hte', 'htd', 'ocm', 'occ', 'ocp' ]
1421621Sbinkertn@umich.edu    benchmarks = [ 'm', 'snt', 'w2', 'nm', 'nw2' ]
1431621Sbinkertn@umich.edu    caches = [ '0', '2', '4' ]
1441621Sbinkertn@umich.edu
1451621Sbinkertn@umich.edu    names = []
1461307Sbinkertn@umich.edu    for bench in benchmarks:
1471307Sbinkertn@umich.edu        if bench_system[bench] != options.system:
1481307Sbinkertn@umich.edu            continue
1491307Sbinkertn@umich.edu
1501621Sbinkertn@umich.edu        for cache in caches:
1511621Sbinkertn@umich.edu            names.append([bench, cache])
1521307Sbinkertn@umich.edu
1531621Sbinkertn@umich.edu    for bench,cache in names:
1541621Sbinkertn@umich.edu        base = '%s.%s' % (bench, cache)
1551621Sbinkertn@umich.edu        fname = 'data/uni.%s.%s.dat' % (tag, base)
1561307Sbinkertn@umich.edu        f = open(fname, 'w')
1571307Sbinkertn@umich.edu        print >>f, '#set TITLE = '
1581307Sbinkertn@umich.edu        print >>f, '#set ylbl = %s' % label
1591307Sbinkertn@umich.edu        #print >>f, '#set sublabels = %s' % ' '.join(configs)
1601307Sbinkertn@umich.edu        print >>f, '#set sublabels = ste hte htd ocm occ ocs'
1611307Sbinkertn@umich.edu
1621621Sbinkertn@umich.edu        for speed in ('s1', 'm1', 'f1', 'q1'):
1631621Sbinkertn@umich.edu            label = system_configs[speed]
1641621Sbinkertn@umich.edu            print >>f, '"%s"' % label,
1651307Sbinkertn@umich.edu            for conf in configs:
1661621Sbinkertn@umich.edu                name = '%s.%s.%s.%s' % (conf, bench, cache, speed)
1671307Sbinkertn@umich.edu                run = info.source.allRunNames[name]
1681307Sbinkertn@umich.edu                info.display_run = run.run;
1691307Sbinkertn@umich.edu                val = float(value)
1701307Sbinkertn@umich.edu                if val == 1e300*1e300:
1711307Sbinkertn@umich.edu                    print >>f, 0.0,
1721307Sbinkertn@umich.edu                else:
1731307Sbinkertn@umich.edu                    print >>f, "%f" % val,
1741307Sbinkertn@umich.edu            print >>f
1751307Sbinkertn@umich.edu        f.close()
1761307Sbinkertn@umich.edu
1771269Sbinkertn@umich.edu    configs = ['ste', 'hte', 'htd', 'ocm', 'occ', 'ocp' ]
1781621Sbinkertn@umich.edu    benchmarks = [ 'w2']
1791621Sbinkertn@umich.edu    caches = [ '0', '2', '4' ]
1801049Sbinkertn@umich.edu
1811049Sbinkertn@umich.edu    names = []
1821049Sbinkertn@umich.edu    for bench in benchmarks:
1831269Sbinkertn@umich.edu        if bench_system[bench] != options.system:
1841269Sbinkertn@umich.edu            continue
1851269Sbinkertn@umich.edu
1861621Sbinkertn@umich.edu        for cache in caches:
1871621Sbinkertn@umich.edu            names.append([bench, cache])
1881049Sbinkertn@umich.edu
1891621Sbinkertn@umich.edu    for bench,cache in names:
1901621Sbinkertn@umich.edu        base = '%s.%s' % (bench, cache)
1911621Sbinkertn@umich.edu        fname = 'data/mp.%s.%s.dat' % (tag, base)
1921049Sbinkertn@umich.edu        f = open(fname, 'w')
1931307Sbinkertn@umich.edu        print >>f, '#set TITLE = '
1941049Sbinkertn@umich.edu        print >>f, '#set ylbl = %s' % label
1951307Sbinkertn@umich.edu        #print >>f, '#set sublabels = %s' % ' '.join(configs)
1961307Sbinkertn@umich.edu        print >>f, '#set sublabels = ste hte htd ocm occ ocs'
1971049Sbinkertn@umich.edu
1981621Sbinkertn@umich.edu        for speed in ('s2', 'm2', 's4', 'm4'):
1991621Sbinkertn@umich.edu            label = system_configs[speed]
2001621Sbinkertn@umich.edu            print >>f, '"%s"' % label,
2011049Sbinkertn@umich.edu            for conf in configs:
2021621Sbinkertn@umich.edu                name = '%s.%s.%s.%s' % (conf, bench, cache, speed)
2031049Sbinkertn@umich.edu                run = info.source.allRunNames[name]
2041049Sbinkertn@umich.edu                info.display_run = run.run;
2051049Sbinkertn@umich.edu                val = float(value)
2061049Sbinkertn@umich.edu                if val == 1e300*1e300:
2071049Sbinkertn@umich.edu                    print >>f, 0.0,
2081049Sbinkertn@umich.edu                else:
2091049Sbinkertn@umich.edu                    print >>f, "%f" % val,
2101049Sbinkertn@umich.edu            print >>f
2111049Sbinkertn@umich.edu        f.close()
2121049Sbinkertn@umich.edu
2131049Sbinkertn@umich.edudef printdata(runs, value, invert = False):
2141049Sbinkertn@umich.edu    import info
2151049Sbinkertn@umich.edu    for run in runs:
2161049Sbinkertn@umich.edu        info.display_run = run.run;
2171049Sbinkertn@umich.edu        val = float(value)
2181049Sbinkertn@umich.edu        printval(run.name, val)
2191049Sbinkertn@umich.edu
2201049Sbinkertn@umich.educlass CommandException(Exception):
2211049Sbinkertn@umich.edu    pass
2221049Sbinkertn@umich.edu
2231049Sbinkertn@umich.edudef commands(options, command, args):
2241049Sbinkertn@umich.edu    if command == 'database':
2251049Sbinkertn@umich.edu        if len(args) == 0: raise CommandException
2261049Sbinkertn@umich.edu
2271049Sbinkertn@umich.edu        import dbinit
2281049Sbinkertn@umich.edu        mydb = dbinit.MyDB(options)
2291049Sbinkertn@umich.edu
2301049Sbinkertn@umich.edu        if args[0] == 'drop':
2311049Sbinkertn@umich.edu            if len(args) > 2: raise CommandException
2321049Sbinkertn@umich.edu            mydb.admin()
2331049Sbinkertn@umich.edu            mydb.drop()
2341049Sbinkertn@umich.edu            if len(args) == 2 and args[1] == 'init':
2351049Sbinkertn@umich.edu                mydb.create()
2361049Sbinkertn@umich.edu                mydb.connect()
2371049Sbinkertn@umich.edu                mydb.populate()
2381049Sbinkertn@umich.edu            mydb.close()
2391049Sbinkertn@umich.edu            return
2401049Sbinkertn@umich.edu
2411049Sbinkertn@umich.edu        if args[0] == 'init':
2421049Sbinkertn@umich.edu            if len(args) > 1: raise CommandException
2431049Sbinkertn@umich.edu            mydb.admin()
2441049Sbinkertn@umich.edu            mydb.create()
2451049Sbinkertn@umich.edu            mydb.connect()
2461049Sbinkertn@umich.edu            mydb.populate()
2471049Sbinkertn@umich.edu            mydb.close()
2481049Sbinkertn@umich.edu            return
2491049Sbinkertn@umich.edu
2501049Sbinkertn@umich.edu        if args[0] == 'clean':
2511049Sbinkertn@umich.edu            if len(args) > 1: raise CommandException
2521049Sbinkertn@umich.edu            mydb.connect()
2531049Sbinkertn@umich.edu            mydb.clean()
2541049Sbinkertn@umich.edu            return
2551049Sbinkertn@umich.edu
2561049Sbinkertn@umich.edu        raise CommandException
2571049Sbinkertn@umich.edu
2581049Sbinkertn@umich.edu    import db, info
2591049Sbinkertn@umich.edu    info.source = db.Database()
2601049Sbinkertn@umich.edu    info.source.host = options.host
2611049Sbinkertn@umich.edu    info.source.db = options.db
2621049Sbinkertn@umich.edu    info.source.passwd = options.passwd
2631049Sbinkertn@umich.edu    info.source.user = options.user
2641049Sbinkertn@umich.edu    info.source.connect()
2651049Sbinkertn@umich.edu    info.source.update_dict(globals())
2661049Sbinkertn@umich.edu
2671049Sbinkertn@umich.edu    if type(options.get) is str:
2681049Sbinkertn@umich.edu        info.source.get = options.get
2691049Sbinkertn@umich.edu
2701049Sbinkertn@umich.edu    if options.runs is None:
2711049Sbinkertn@umich.edu        runs = info.source.allRuns
2721049Sbinkertn@umich.edu    else:
2731049Sbinkertn@umich.edu        rx = re.compile(options.runs)
2741049Sbinkertn@umich.edu        runs = []
2751049Sbinkertn@umich.edu        for run in info.source.allRuns:
2761049Sbinkertn@umich.edu            if rx.match(run.name):
2771049Sbinkertn@umich.edu                runs.append(run)
2781049Sbinkertn@umich.edu
2791049Sbinkertn@umich.edu    info.display_run = runs[0].run
2801049Sbinkertn@umich.edu
2811049Sbinkertn@umich.edu    if command == 'runs':
2821049Sbinkertn@umich.edu        user = None
2831049Sbinkertn@umich.edu        opts, args = getopts(args, '-u')
2841049Sbinkertn@umich.edu        if len(args):
2851049Sbinkertn@umich.edu            raise CommandException
2861049Sbinkertn@umich.edu        for o,a in opts:
2871049Sbinkertn@umich.edu            if o == '-u':
2881049Sbinkertn@umich.edu                user = a
2891049Sbinkertn@umich.edu        info.source.listRuns(user)
2901049Sbinkertn@umich.edu        return
2911049Sbinkertn@umich.edu
2921309Ssaidi@eecs.umich.edu    if command == 'stability':
2931331Ssaidi@eecs.umich.edu        if len(args) < 2:
2941331Ssaidi@eecs.umich.edu            raise CommandException
2951331Ssaidi@eecs.umich.edu
2961331Ssaidi@eecs.umich.edu        try:
2971331Ssaidi@eecs.umich.edu            merge = int(args[0])
2981331Ssaidi@eecs.umich.edu        except ValueError:
2991331Ssaidi@eecs.umich.edu            usage()
3001331Ssaidi@eecs.umich.edu        stats = info.source.getStat(args[1])
3011331Ssaidi@eecs.umich.edu        info.source.get = "sum"
3021331Ssaidi@eecs.umich.edu
3031309Ssaidi@eecs.umich.edu
3041309Ssaidi@eecs.umich.edu        #loop through all the stats selected
3051309Ssaidi@eecs.umich.edu        for stat in stats:
3061309Ssaidi@eecs.umich.edu
3071317Ssaidi@eecs.umich.edu            print "%s:" % stat.name
3081331Ssaidi@eecs.umich.edu            print "%-20s %12s %12s %4s %5s %5s %5s %10s" % \
3091329Ssaidi@eecs.umich.edu                  ("run name", "average", "stdev", ">10%", ">1SDV", ">2SDV", "SAMP", "CV")
3101331Ssaidi@eecs.umich.edu            print "%-20s %12s %12s %4s %5s %5s %5s %10s" % \
3111329Ssaidi@eecs.umich.edu                  ("--------------------", "------------",
3121331Ssaidi@eecs.umich.edu                   "------------", "----", "-----", "-----", "-----", "----------")
3131309Ssaidi@eecs.umich.edu            #loop through all the selected runs
3141309Ssaidi@eecs.umich.edu            for run in runs:
3151309Ssaidi@eecs.umich.edu                info.display_run = run.run;
3161309Ssaidi@eecs.umich.edu                runTicks = info.source.retTicks([ run ])
3171309Ssaidi@eecs.umich.edu                #throw away the first one, it's 0
3181309Ssaidi@eecs.umich.edu                runTicks.pop(0)
3191329Ssaidi@eecs.umich.edu                info.globalTicks = runTicks
3201331Ssaidi@eecs.umich.edu                avg = 0
3211317Ssaidi@eecs.umich.edu                stdev = 0
3221317Ssaidi@eecs.umich.edu                numoutsideavg  = 0
3231318Ssaidi@eecs.umich.edu                numoutside1std = 0
3241318Ssaidi@eecs.umich.edu                numoutside2std = 0
3251331Ssaidi@eecs.umich.edu                pairRunTicks = []
3261331Ssaidi@eecs.umich.edu                if float(stat) == 1e300*1e300:
3271331Ssaidi@eecs.umich.edu                    continue
3281331Ssaidi@eecs.umich.edu                for t in range(0, len(runTicks)-(merge-1), merge):
3291331Ssaidi@eecs.umich.edu                    tempPair = []
3301331Ssaidi@eecs.umich.edu                    for p in range(0,merge):
3311331Ssaidi@eecs.umich.edu                        tempPair.append(runTicks[t+p])
3321331Ssaidi@eecs.umich.edu                    pairRunTicks.append(tempPair)
3331309Ssaidi@eecs.umich.edu                #loop through all the various ticks for each run
3341331Ssaidi@eecs.umich.edu                for tick in pairRunTicks:
3351331Ssaidi@eecs.umich.edu                    info.globalTicks = tick
3361331Ssaidi@eecs.umich.edu                    avg += float(stat)
3371331Ssaidi@eecs.umich.edu                avg /= len(pairRunTicks)
3381331Ssaidi@eecs.umich.edu                for tick in pairRunTicks:
3391331Ssaidi@eecs.umich.edu                    info.globalTicks = tick
3401331Ssaidi@eecs.umich.edu                    val = float(stat)
3411331Ssaidi@eecs.umich.edu                    stdev += pow((val-avg),2)
3421331Ssaidi@eecs.umich.edu                stdev = math.sqrt(stdev / len(pairRunTicks))
3431331Ssaidi@eecs.umich.edu                for tick in pairRunTicks:
3441331Ssaidi@eecs.umich.edu                    info.globalTicks = tick
3451309Ssaidi@eecs.umich.edu                    val = float(stat)
3461309Ssaidi@eecs.umich.edu                    if (val < (avg * .9)) or (val > (avg * 1.1)):
3471317Ssaidi@eecs.umich.edu                        numoutsideavg += 1
3481317Ssaidi@eecs.umich.edu                    if (val < (avg - stdev)) or (val > (avg + stdev)):
3491318Ssaidi@eecs.umich.edu                        numoutside1std += 1
3501318Ssaidi@eecs.umich.edu                    if (val < (avg - (2*stdev))) or (val > (avg + (2*stdev))):
3511318Ssaidi@eecs.umich.edu                        numoutside2std += 1
3521331Ssaidi@eecs.umich.edu                if avg > 1000:
3531331Ssaidi@eecs.umich.edu                    print "%-20s %12s %12s %4s %5s %5s %5s %10s" % \
3541331Ssaidi@eecs.umich.edu                          (run.name, "%.1f" % avg, "%.1f" % stdev,
3551331Ssaidi@eecs.umich.edu                           "%d" % numoutsideavg, "%d" % numoutside1std,
3561331Ssaidi@eecs.umich.edu                           "%d" % numoutside2std, "%d" % len(pairRunTicks),
3571331Ssaidi@eecs.umich.edu                           "%.3f" % (stdev/avg*100))
3581331Ssaidi@eecs.umich.edu                elif avg > 100:
3591331Ssaidi@eecs.umich.edu                    print "%-20s %12s %12s %4s %5s %5s %5s %10s" % \
3601331Ssaidi@eecs.umich.edu                          (run.name, "%.1f" % avg, "%.1f" % stdev,
3611331Ssaidi@eecs.umich.edu                           "%d" % numoutsideavg, "%d" % numoutside1std,
3621331Ssaidi@eecs.umich.edu                           "%d" % numoutside2std, "%d" % len(pairRunTicks),
3631331Ssaidi@eecs.umich.edu                           "%.5f" % (stdev/avg*100))
3641331Ssaidi@eecs.umich.edu                else:
3651331Ssaidi@eecs.umich.edu                    print "%-20s %12s %12s %4s %5s %5s %5s %10s" % \
3661331Ssaidi@eecs.umich.edu                          (run.name, "%.5f" % avg, "%.5f" % stdev,
3671331Ssaidi@eecs.umich.edu                           "%d" % numoutsideavg, "%d" % numoutside1std,
3681331Ssaidi@eecs.umich.edu                           "%d" % numoutside2std, "%d" % len(pairRunTicks),
3691331Ssaidi@eecs.umich.edu                           "%.7f" % (stdev/avg*100))
3701309Ssaidi@eecs.umich.edu        return
3711309Ssaidi@eecs.umich.edu
3721049Sbinkertn@umich.edu    if command == 'stats':
3731049Sbinkertn@umich.edu        if len(args) == 0:
3741049Sbinkertn@umich.edu            info.source.listStats()
3751049Sbinkertn@umich.edu        elif len(args) == 1:
3761049Sbinkertn@umich.edu            info.source.listStats(args[0])
3771049Sbinkertn@umich.edu        else:
3781049Sbinkertn@umich.edu            raise CommandException
3791049Sbinkertn@umich.edu
3801049Sbinkertn@umich.edu        return
3811049Sbinkertn@umich.edu
3821049Sbinkertn@umich.edu    if command == 'stat':
3831049Sbinkertn@umich.edu        if len(args) != 1:
3841049Sbinkertn@umich.edu            raise CommandException
3851049Sbinkertn@umich.edu
3861049Sbinkertn@umich.edu        stats = info.source.getStat(args[0])
3871049Sbinkertn@umich.edu        for stat in stats:
3881076Sbinkertn@umich.edu            if options.graph:
3891269Sbinkertn@umich.edu                graphdata(runs, options, stat.name, stat.name, stat)
3901049Sbinkertn@umich.edu            else:
3911301Ssaidi@eecs.umich.edu                if options.ticks:
3921301Ssaidi@eecs.umich.edu                   print 'only displaying sample %s' % options.ticks
3931329Ssaidi@eecs.umich.edu                   info.globalTicks = [ int(x) for x in options.ticks.split() ]
3941301Ssaidi@eecs.umich.edu
3951165Sbinkertn@umich.edu                if options.binned:
3961165Sbinkertn@umich.edu                    print 'kernel ticks'
3971165Sbinkertn@umich.edu                    stat.bins = 'kernel'
3981165Sbinkertn@umich.edu                    printdata(runs, stat)
3991165Sbinkertn@umich.edu
4001165Sbinkertn@umich.edu                    print 'idle ticks'
4011165Sbinkertn@umich.edu                    stat.bins = 'idle'
4021165Sbinkertn@umich.edu                    printdata(runs, stat)
4031165Sbinkertn@umich.edu
4041165Sbinkertn@umich.edu                    print 'user ticks'
4051165Sbinkertn@umich.edu                    stat.bins = 'user'
4061165Sbinkertn@umich.edu                    printdata(runs, stat)
4071165Sbinkertn@umich.edu
4081165Sbinkertn@umich.edu                    print 'interrupt ticks'
4091301Ssaidi@eecs.umich.edu                    stat.bins = 'interrupt'
4101165Sbinkertn@umich.edu                    printdata(runs, stat)
4111165Sbinkertn@umich.edu
4121165Sbinkertn@umich.edu                    print 'total ticks'
4131165Sbinkertn@umich.edu
4141165Sbinkertn@umich.edu                stat.bins = None
4151049Sbinkertn@umich.edu                print stat.name
4161049Sbinkertn@umich.edu                printdata(runs, stat)
4171049Sbinkertn@umich.edu        return
4181049Sbinkertn@umich.edu
4191269Sbinkertn@umich.edu    if command == 'formula':
4201269Sbinkertn@umich.edu        if len(args) != 1:
4211269Sbinkertn@umich.edu            raise CommandException
4221269Sbinkertn@umich.edu
4231269Sbinkertn@umich.edu        stats = eval(args[0])
4241269Sbinkertn@umich.edu        for stat in stats:
4251269Sbinkertn@umich.edu            if options.graph:
4261269Sbinkertn@umich.edu                graphdata(runs, options, stat.name, stat.name, stat)
4271269Sbinkertn@umich.edu            else:
4281269Sbinkertn@umich.edu                if options.binned:
4291269Sbinkertn@umich.edu                    print 'kernel ticks'
4301269Sbinkertn@umich.edu                    stat.bins = 'kernel'
4311269Sbinkertn@umich.edu                    printdata(runs, stat)
4321269Sbinkertn@umich.edu
4331269Sbinkertn@umich.edu                    print 'idle ticks'
4341269Sbinkertn@umich.edu                    stat.bins = 'idle'
4351269Sbinkertn@umich.edu                    printdata(runs, stat)
4361269Sbinkertn@umich.edu
4371269Sbinkertn@umich.edu                    print 'user ticks'
4381269Sbinkertn@umich.edu                    stat.bins = 'user'
4391269Sbinkertn@umich.edu                    printdata(runs, stat)
4401269Sbinkertn@umich.edu
4411269Sbinkertn@umich.edu                    print 'interrupt ticks'
4421301Ssaidi@eecs.umich.edu                    stat.bins = 'interrupt'
4431269Sbinkertn@umich.edu                    printdata(runs, stat)
4441269Sbinkertn@umich.edu
4451269Sbinkertn@umich.edu                    print 'total ticks'
4461269Sbinkertn@umich.edu
4471269Sbinkertn@umich.edu                stat.bins = None
4481269Sbinkertn@umich.edu                print args[0]
4491269Sbinkertn@umich.edu                printdata(runs, stat)
4501269Sbinkertn@umich.edu        return
4511269Sbinkertn@umich.edu
4521049Sbinkertn@umich.edu    if command == 'bins':
4531049Sbinkertn@umich.edu        if len(args) == 0:
4541049Sbinkertn@umich.edu            info.source.listBins()
4551049Sbinkertn@umich.edu        elif len(args) == 1:
4561049Sbinkertn@umich.edu            info.source.listBins(args[0])
4571049Sbinkertn@umich.edu        else:
4581049Sbinkertn@umich.edu            raise CommandException
4591049Sbinkertn@umich.edu
4601049Sbinkertn@umich.edu        return
4611049Sbinkertn@umich.edu
4621049Sbinkertn@umich.edu    if command == 'formulas':
4631049Sbinkertn@umich.edu        if len(args) == 0:
4641049Sbinkertn@umich.edu            info.source.listFormulas()
4651049Sbinkertn@umich.edu        elif len(args) == 1:
4661049Sbinkertn@umich.edu            info.source.listFormulas(args[0])
4671049Sbinkertn@umich.edu        else:
4681049Sbinkertn@umich.edu            raise CommandException
4691049Sbinkertn@umich.edu
4701049Sbinkertn@umich.edu        return
4711049Sbinkertn@umich.edu
4721049Sbinkertn@umich.edu    if command == 'samples':
4731049Sbinkertn@umich.edu        if len(args):
4741049Sbinkertn@umich.edu            raise CommandException
4751049Sbinkertn@umich.edu
4761049Sbinkertn@umich.edu        info.source.listTicks(runs)
4771049Sbinkertn@umich.edu        return
4781049Sbinkertn@umich.edu
4791049Sbinkertn@umich.edu    if len(args):
4801049Sbinkertn@umich.edu        raise CommandException
4811049Sbinkertn@umich.edu
4821209Sbinkertn@umich.edu    system = info.source.__dict__[options.system]
4831209Sbinkertn@umich.edu
4841049Sbinkertn@umich.edu    if command == 'usertime':
4851049Sbinkertn@umich.edu        import copy
4861604Srdreslin@umich.edu        kernel = copy.copy(system.full0.numCycles)
4871049Sbinkertn@umich.edu        kernel.bins = 'kernel'
4881049Sbinkertn@umich.edu
4891604Srdreslin@umich.edu        user = copy.copy(system.full0.numCycles)
4901049Sbinkertn@umich.edu        user.bins = 'user'
4911049Sbinkertn@umich.edu
4921076Sbinkertn@umich.edu        if options.graph:
4931269Sbinkertn@umich.edu            graphdata(runs, options, 'usertime', 'User Fraction',
4941604Srdreslin@umich.edu                      user / system.full0.numCycles)
4951049Sbinkertn@umich.edu        else:
4961604Srdreslin@umich.edu            printdata(runs, user / system.full0.numCycles)
4971049Sbinkertn@umich.edu        return
4981049Sbinkertn@umich.edu
4991049Sbinkertn@umich.edu    if command == 'ticks':
5001076Sbinkertn@umich.edu        if options.binned:
5011049Sbinkertn@umich.edu            print 'kernel ticks'
5021604Srdreslin@umich.edu            system.full0.numCycles.bins = 'kernel'
5031604Srdreslin@umich.edu            printdata(runs, system.full0.numCycles)
5041049Sbinkertn@umich.edu
5051049Sbinkertn@umich.edu            print 'idle ticks'
5061604Srdreslin@umich.edu            system.full0.numCycles.bins = 'idle'
5071604Srdreslin@umich.edu            printdata(runs, system.full0.numCycles)
5081049Sbinkertn@umich.edu
5091049Sbinkertn@umich.edu            print 'user ticks'
5101604Srdreslin@umich.edu            system.full0.numCycles.bins = 'user'
5111604Srdreslin@umich.edu            printdata(runs, system.full0.numCycles)
5121049Sbinkertn@umich.edu
5131049Sbinkertn@umich.edu            print 'total ticks'
5141049Sbinkertn@umich.edu
5151604Srdreslin@umich.edu        system.full0.numCycles.bins = None
5161604Srdreslin@umich.edu        printdata(runs, system.full0.numCycles)
5171049Sbinkertn@umich.edu        return
5181049Sbinkertn@umich.edu
5191049Sbinkertn@umich.edu    if command == 'packets':
5201604Srdreslin@umich.edu        packets = system.tsunami.etherdev0.rxPackets
5211076Sbinkertn@umich.edu        if options.graph:
5221269Sbinkertn@umich.edu            graphdata(runs, options, 'packets', 'Packets', packets)
5231049Sbinkertn@umich.edu        else:
5241049Sbinkertn@umich.edu            printdata(runs, packets)
5251049Sbinkertn@umich.edu        return
5261049Sbinkertn@umich.edu
5271049Sbinkertn@umich.edu    if command == 'ppt' or command == 'tpp':
5281604Srdreslin@umich.edu        ppt = system.tsunami.etherdev0.rxPackets / sim_ticks
5291049Sbinkertn@umich.edu        printdata(runs, ppt, command == 'tpp')
5301049Sbinkertn@umich.edu        return
5311049Sbinkertn@umich.edu
5321049Sbinkertn@umich.edu    if command == 'pps':
5331604Srdreslin@umich.edu        pps = system.tsunami.etherdev0.rxPackets / sim_seconds
5341076Sbinkertn@umich.edu        if options.graph:
5351269Sbinkertn@umich.edu            graphdata(runs, options, 'pps', 'Packets/s', pps)
5361049Sbinkertn@umich.edu        else:
5371049Sbinkertn@umich.edu            printdata(runs, pps)
5381049Sbinkertn@umich.edu        return
5391049Sbinkertn@umich.edu
5401049Sbinkertn@umich.edu    if command == 'bpt' or command == 'tpb':
5411604Srdreslin@umich.edu        bytes = system.tsunami.etherdev0.rxBytes + system.tsunami.etherdev0.txBytes
5421049Sbinkertn@umich.edu        bpt = bytes / sim_ticks * 8
5431076Sbinkertn@umich.edu        if options.graph:
5441269Sbinkertn@umich.edu            graphdata(runs, options, 'bpt', 'bps / Hz', bpt)
5451049Sbinkertn@umich.edu        else:
5461049Sbinkertn@umich.edu            printdata(runs, bpt, command == 'tpb')
5471049Sbinkertn@umich.edu        return
5481049Sbinkertn@umich.edu
5491049Sbinkertn@umich.edu    if command == 'bptb' or command == 'tpbb':
5501604Srdreslin@umich.edu        bytes = system.tsunami.etherdev0.rxBytes + system.tsunami.etherdev0.txBytes
5511049Sbinkertn@umich.edu
5521049Sbinkertn@umich.edu        print 'kernel stats'
5531049Sbinkertn@umich.edu        bytes.bins = 'kernel'
5541049Sbinkertn@umich.edu        printdata(runs, bytes / ticks)
5551049Sbinkertn@umich.edu
5561049Sbinkertn@umich.edu        print 'idle stats'
5571049Sbinkertn@umich.edu        bytes.bins = 'idle'
5581049Sbinkertn@umich.edu        printdata(runs, bytes / ticks)
5591049Sbinkertn@umich.edu
5601049Sbinkertn@umich.edu        print 'user stats'
5611049Sbinkertn@umich.edu        bytes.bins = 'user'
5621049Sbinkertn@umich.edu        printdata(runs, bytes / ticks)
5631049Sbinkertn@umich.edu
5641049Sbinkertn@umich.edu        return
5651049Sbinkertn@umich.edu
5661049Sbinkertn@umich.edu    if command == 'bytes':
5671604Srdreslin@umich.edu        stat = system.tsunami.etherdev0.rxBytes + system.tsunami.etherdev0.txBytes
5681049Sbinkertn@umich.edu
5691076Sbinkertn@umich.edu        if options.binned:
5701049Sbinkertn@umich.edu            print '%s kernel stats' % stat.name
5711049Sbinkertn@umich.edu            stat.bins = 'kernel'
5721049Sbinkertn@umich.edu            printdata(runs, stat)
5731049Sbinkertn@umich.edu
5741049Sbinkertn@umich.edu            print '%s idle stats' % stat.name
5751049Sbinkertn@umich.edu            stat.bins = 'idle'
5761049Sbinkertn@umich.edu            printdata(runs, stat)
5771049Sbinkertn@umich.edu
5781049Sbinkertn@umich.edu            print '%s user stats' % stat.name
5791049Sbinkertn@umich.edu            stat.bins = 'user'
5801049Sbinkertn@umich.edu            printdata(runs, stat)
5811049Sbinkertn@umich.edu
5821049Sbinkertn@umich.edu            print '%s total stats' % stat.name
5831049Sbinkertn@umich.edu            stat.bins = None
5841049Sbinkertn@umich.edu
5851049Sbinkertn@umich.edu        printdata(runs, stat)
5861049Sbinkertn@umich.edu        return
5871049Sbinkertn@umich.edu
5881049Sbinkertn@umich.edu    if command == 'rxbps':
5891604Srdreslin@umich.edu        gbps = system.tsunami.etherdev0.rxBandwidth / 1e9
5901076Sbinkertn@umich.edu        if options.graph:
5911269Sbinkertn@umich.edu            graphdata(runs, options, 'rxbps', 'Bandwidth (Gbps)',  gbps)
5921049Sbinkertn@umich.edu        else:
5931049Sbinkertn@umich.edu            printdata(runs, gbps)
5941049Sbinkertn@umich.edu        return
5951049Sbinkertn@umich.edu
5961049Sbinkertn@umich.edu    if command == 'txbps':
5971604Srdreslin@umich.edu        gbps = system.tsunami.etherdev0.txBandwidth / 1e9
5981076Sbinkertn@umich.edu        if options.graph:
5991269Sbinkertn@umich.edu            graphdata(runs, options, 'txbps', 'Bandwidth (Gbps)',  gbps)
6001049Sbinkertn@umich.edu        else:
6011049Sbinkertn@umich.edu            printdata(runs, gbps)
6021049Sbinkertn@umich.edu        return
6031049Sbinkertn@umich.edu
6041049Sbinkertn@umich.edu    if command == 'bps':
6051604Srdreslin@umich.edu        rxbps = system.tsunami.etherdev0.rxBandwidth
6061604Srdreslin@umich.edu        txbps = system.tsunami.etherdev0.txBandwidth
6071049Sbinkertn@umich.edu        gbps = (rxbps + txbps) / 1e9
6081076Sbinkertn@umich.edu        if options.graph:
6091269Sbinkertn@umich.edu            graphdata(runs, options, 'bps', 'Bandwidth (Gbps)',  gbps)
6101049Sbinkertn@umich.edu        else:
6111049Sbinkertn@umich.edu            printdata(runs, gbps)
6121049Sbinkertn@umich.edu        return
6131049Sbinkertn@umich.edu
6141049Sbinkertn@umich.edu    if command == 'misses':
6151604Srdreslin@umich.edu        stat = system.l2.overall_mshr_misses
6161076Sbinkertn@umich.edu        if options.binned:
6171049Sbinkertn@umich.edu            print '%s kernel stats' % stat.name
6181049Sbinkertn@umich.edu            stat.bins = 'kernel'
6191049Sbinkertn@umich.edu            printdata(runs, stat)
6201049Sbinkertn@umich.edu
6211049Sbinkertn@umich.edu            print '%s idle stats' % stat.name
6221049Sbinkertn@umich.edu            stat.bins = 'idle'
6231049Sbinkertn@umich.edu            printdata(runs, stat)
6241049Sbinkertn@umich.edu
6251049Sbinkertn@umich.edu            print '%s user stats' % stat.name
6261049Sbinkertn@umich.edu            stat.bins = 'user'
6271049Sbinkertn@umich.edu            printdata(runs, stat)
6281049Sbinkertn@umich.edu
6291049Sbinkertn@umich.edu            print '%s total stats' % stat.name
6301049Sbinkertn@umich.edu
6311049Sbinkertn@umich.edu        stat.bins = None
6321076Sbinkertn@umich.edu        if options.graph:
6331269Sbinkertn@umich.edu            graphdata(runs, options, 'misses', 'Overall MSHR Misses', stat)
6341049Sbinkertn@umich.edu        else:
6351049Sbinkertn@umich.edu            printdata(runs, stat)
6361049Sbinkertn@umich.edu        return
6371049Sbinkertn@umich.edu
6381049Sbinkertn@umich.edu    if command == 'mpkb':
6391604Srdreslin@umich.edu        misses = system.l2.overall_mshr_misses
6401604Srdreslin@umich.edu        rxbytes = system.tsunami.etherdev0.rxBytes
6411604Srdreslin@umich.edu        txbytes = system.tsunami.etherdev0.txBytes
6421049Sbinkertn@umich.edu
6431076Sbinkertn@umich.edu        if options.binned:
6441049Sbinkertn@umich.edu            print 'mpkb kernel stats'
6451049Sbinkertn@umich.edu            misses.bins = 'kernel'
6461049Sbinkertn@umich.edu            mpkb = misses / ((rxbytes + txbytes) / 1024)
6471049Sbinkertn@umich.edu            printdata(runs, mpkb)
6481049Sbinkertn@umich.edu
6491049Sbinkertn@umich.edu            print 'mpkb idle stats'
6501049Sbinkertn@umich.edu            misses.bins = 'idle'
6511049Sbinkertn@umich.edu            mpkb = misses / ((rxbytes + txbytes) / 1024)
6521049Sbinkertn@umich.edu            printdata(runs, mpkb)
6531049Sbinkertn@umich.edu
6541049Sbinkertn@umich.edu            print 'mpkb user stats'
6551049Sbinkertn@umich.edu            misses.bins = 'user'
6561049Sbinkertn@umich.edu            mpkb = misses / ((rxbytes + txbytes) / 1024)
6571049Sbinkertn@umich.edu            printdata(runs, mpkb)
6581049Sbinkertn@umich.edu
6591049Sbinkertn@umich.edu            print 'mpkb total stats'
6601049Sbinkertn@umich.edu
6611049Sbinkertn@umich.edu        mpkb = misses / ((rxbytes + txbytes) / 1024)
6621049Sbinkertn@umich.edu        misses.bins = None
6631076Sbinkertn@umich.edu        if options.graph:
6641269Sbinkertn@umich.edu            graphdata(runs, options, 'mpkb', 'Misses / KB',  mpkb)
6651049Sbinkertn@umich.edu        else:
6661049Sbinkertn@umich.edu            printdata(runs, mpkb)
6671049Sbinkertn@umich.edu        return
6681049Sbinkertn@umich.edu
6691269Sbinkertn@umich.edu    if command == 'ipkb':
6701604Srdreslin@umich.edu        interrupts = system.full0.kern.faults[4]
6711604Srdreslin@umich.edu        rxbytes = system.tsunami.etherdev0.rxBytes
6721604Srdreslin@umich.edu        txbytes = system.tsunami.etherdev0.txBytes
6731269Sbinkertn@umich.edu
6741269Sbinkertn@umich.edu        if options.binned:
6751269Sbinkertn@umich.edu            print 'ipkb kernel stats'
6761269Sbinkertn@umich.edu            interrupts.bins = 'kernel'
6771269Sbinkertn@umich.edu            ipkb = interrupts / ((rxbytes + txbytes) / 1024)
6781269Sbinkertn@umich.edu            printdata(runs, ipkb)
6791269Sbinkertn@umich.edu
6801269Sbinkertn@umich.edu            print 'ipkb idle stats'
6811269Sbinkertn@umich.edu            interrupts.bins = 'idle'
6821269Sbinkertn@umich.edu            ipkb = interrupts / ((rxbytes + txbytes) / 1024)
6831269Sbinkertn@umich.edu            printdata(runs, ipkb)
6841269Sbinkertn@umich.edu
6851269Sbinkertn@umich.edu            print 'ipkb user stats'
6861269Sbinkertn@umich.edu            interrupts.bins = 'user'
6871269Sbinkertn@umich.edu            ipkb = interrupts / ((rxbytes + txbytes) / 1024)
6881269Sbinkertn@umich.edu            printdata(runs, ipkb)
6891269Sbinkertn@umich.edu
6901269Sbinkertn@umich.edu            print 'ipkb total stats'
6911269Sbinkertn@umich.edu
6921269Sbinkertn@umich.edu        ipkb = interrupts / ((rxbytes + txbytes) / 1024)
6931269Sbinkertn@umich.edu        interrupts.bins = None
6941269Sbinkertn@umich.edu        if options.graph:
6951269Sbinkertn@umich.edu            graphdata(runs, options, 'ipkb', 'Interrupts / KB',  ipkb)
6961269Sbinkertn@umich.edu        else:
6971269Sbinkertn@umich.edu            printdata(runs, ipkb)
6981269Sbinkertn@umich.edu        return
6991269Sbinkertn@umich.edu
7001049Sbinkertn@umich.edu    if command == 'execute':
7011604Srdreslin@umich.edu        printdata(runs, system.full0.ISSUE__count)
7021049Sbinkertn@umich.edu        return
7031049Sbinkertn@umich.edu
7041049Sbinkertn@umich.edu    if command == 'commit':
7051604Srdreslin@umich.edu        printdata(runs, system.full0.COM__count)
7061049Sbinkertn@umich.edu        return
7071049Sbinkertn@umich.edu
7081049Sbinkertn@umich.edu    if command == 'fetch':
7091604Srdreslin@umich.edu        printdata(runs, system.full0.FETCH__count)
7101049Sbinkertn@umich.edu        return
7111049Sbinkertn@umich.edu
7121162Sbinkertn@umich.edu    if command == 'bpp':
7131604Srdreslin@umich.edu        ed = system.tsunami.etherdev0
7141162Sbinkertn@umich.edu        bpp = (ed.rxBytes + ed.txBytes) / (ed.rxPackets + ed.txPackets)
7151162Sbinkertn@umich.edu        if options.graph:
7161269Sbinkertn@umich.edu            graphdata(runs, options, 'bpp', 'Bytes / Packet',  bpp)
7171162Sbinkertn@umich.edu        else:
7181162Sbinkertn@umich.edu            printdata(runs, bpp)
7191162Sbinkertn@umich.edu        return
7201162Sbinkertn@umich.edu
7211049Sbinkertn@umich.edu    if command == 'rxbpp':
7221604Srdreslin@umich.edu        bpp = system.tsunami.etherdev0.rxBytes / system.tsunami.etherdev0.rxPackets
7231162Sbinkertn@umich.edu        if options.graph:
7241269Sbinkertn@umich.edu            graphdata(runs, options, 'rxbpp', 'Receive Bytes / Packet',  bpp)
7251162Sbinkertn@umich.edu        else:
7261162Sbinkertn@umich.edu            printdata(runs, bpp)
7271049Sbinkertn@umich.edu        return
7281049Sbinkertn@umich.edu
7291049Sbinkertn@umich.edu    if command == 'txbpp':
7301604Srdreslin@umich.edu        bpp = system.tsunami.etherdev0.txBytes / system.tsunami.etherdev0.txPackets
7311162Sbinkertn@umich.edu        if options.graph:
7321269Sbinkertn@umich.edu            graphdata(runs, options, 'txbpp', 'Transmit Bytes / Packet',  bpp)
7331162Sbinkertn@umich.edu        else:
7341162Sbinkertn@umich.edu            printdata(runs, bpp)
7351162Sbinkertn@umich.edu        return
7361162Sbinkertn@umich.edu
7371162Sbinkertn@umich.edu    if command == 'rtp':
7381604Srdreslin@umich.edu        rtp = system.tsunami.etherdev0.rxPackets / system.tsunami.etherdev0.txPackets
7391162Sbinkertn@umich.edu        if options.graph:
7401269Sbinkertn@umich.edu            graphdata(runs, options, 'rtp', 'rxPackets / txPackets',  rtp)
7411162Sbinkertn@umich.edu        else:
7421162Sbinkertn@umich.edu            printdata(runs, rtp)
7431162Sbinkertn@umich.edu        return
7441162Sbinkertn@umich.edu
7451162Sbinkertn@umich.edu    if command == 'rtb':
7461604Srdreslin@umich.edu        rtb = system.tsunami.etherdev0.rxBytes / system.tsunami.etherdev0.txBytes
7471162Sbinkertn@umich.edu        if options.graph:
7481269Sbinkertn@umich.edu            graphdata(runs, options, 'rtb', 'rxBytes / txBytes',  rtb)
7491162Sbinkertn@umich.edu        else:
7501162Sbinkertn@umich.edu            printdata(runs, rtb)
7511049Sbinkertn@umich.edu        return
7521049Sbinkertn@umich.edu
7531049Sbinkertn@umich.edu    raise CommandException
7541049Sbinkertn@umich.edu
7551049Sbinkertn@umich.edu
7561049Sbinkertn@umich.educlass Options: pass
7571049Sbinkertn@umich.edu
7581049Sbinkertn@umich.eduif __name__ == '__main__':
7591049Sbinkertn@umich.edu    import getpass
7601049Sbinkertn@umich.edu
7611049Sbinkertn@umich.edu    options = Options()
7621049Sbinkertn@umich.edu    options.host = 'zizzer.pool'
7631049Sbinkertn@umich.edu    options.db = None
7641049Sbinkertn@umich.edu    options.passwd = ''
7651049Sbinkertn@umich.edu    options.user = getpass.getuser()
7661049Sbinkertn@umich.edu    options.runs = None
7671049Sbinkertn@umich.edu    options.system = 'client'
7681049Sbinkertn@umich.edu    options.get = None
7691076Sbinkertn@umich.edu    options.binned = False
7701076Sbinkertn@umich.edu    options.graph = False
7711301Ssaidi@eecs.umich.edu    options.ticks = False
7721049Sbinkertn@umich.edu
7731308Ssaidi@eecs.umich.edu    opts, args = getopts(sys.argv[1:], '-6BEFGd:g:h:pr:s:u:T:')
7741049Sbinkertn@umich.edu    for o,a in opts:
7751049Sbinkertn@umich.edu        if o == '-B':
7761049Sbinkertn@umich.edu            options.binned = True
7771049Sbinkertn@umich.edu        if o == '-E':
7781049Sbinkertn@umich.edu            printval.mode = 'E'
7791049Sbinkertn@umich.edu        if o == '-F':
7801049Sbinkertn@umich.edu            printval.mode = 'F'
7811049Sbinkertn@umich.edu        if o == '-G':
7821049Sbinkertn@umich.edu            options.graph = True;
7831049Sbinkertn@umich.edu        if o == '-d':
7841049Sbinkertn@umich.edu            options.db = a
7851049Sbinkertn@umich.edu        if o == '-g':
7861049Sbinkertn@umich.edu            options.get = a
7871049Sbinkertn@umich.edu        if o == '-h':
7881049Sbinkertn@umich.edu            options.host = a
7891049Sbinkertn@umich.edu        if o == '-p':
7901049Sbinkertn@umich.edu            options.passwd = getpass.getpass()
7911049Sbinkertn@umich.edu        if o == '-r':
7921049Sbinkertn@umich.edu            options.runs = a
7931049Sbinkertn@umich.edu        if o == '-u':
7941049Sbinkertn@umich.edu            options.user = a
7951049Sbinkertn@umich.edu        if o == '-s':
7961049Sbinkertn@umich.edu            options.system = a
7971301Ssaidi@eecs.umich.edu        if o == '-T':
7981301Ssaidi@eecs.umich.edu            options.ticks = a
7991049Sbinkertn@umich.edu
8001049Sbinkertn@umich.edu    if len(args) == 0:
8011049Sbinkertn@umich.edu        usage()
8021049Sbinkertn@umich.edu
8031049Sbinkertn@umich.edu    command = args[0]
8041049Sbinkertn@umich.edu    args = args[1:]
8051049Sbinkertn@umich.edu
8061049Sbinkertn@umich.edu    try:
8071049Sbinkertn@umich.edu        commands(options, command, args)
8081049Sbinkertn@umich.edu    except CommandException:
8091049Sbinkertn@umich.edu        usage()
810