stats.py revision 1596
11049Sbinkertn@umich.edu#!/usr/bin/env python
21049Sbinkertn@umich.edufrom __future__ import division
31318Ssaidi@eecs.umich.eduimport re, sys, math
41049Sbinkertn@umich.edu
51329Ssaidi@eecs.umich.edu
61049Sbinkertn@umich.edudef usage():
71049Sbinkertn@umich.edu    print '''\
81049Sbinkertn@umich.eduUsage: %s [-E] [-F] [-d <db> ] [-g <get> ] [-h <host>] [-p]
91331Ssaidi@eecs.umich.edu       [-s <system>] [-r <runs> ] [-T <samples>] [-u <username>]
101331Ssaidi@eecs.umich.edu       <command> [command args]
111331Ssaidi@eecs.umich.edu
121331Ssaidi@eecs.umich.edu       commands    extra parameters   description
131331Ssaidi@eecs.umich.edu       ----------- ------------------ ---------------------------------------
141331Ssaidi@eecs.umich.edu       bins        [regex]            List bins (only matching regex)
151331Ssaidi@eecs.umich.edu       formula     <formula>          Evaluated formula specified
161331Ssaidi@eecs.umich.edu       formulas    [regex]            List formulas (only matching regex)
171331Ssaidi@eecs.umich.edu       runs        none               List all runs in database
181331Ssaidi@eecs.umich.edu       samples     none               List samples present in database
191331Ssaidi@eecs.umich.edu       stability   <pairnum> <stats>  Calculated statistical info about stats
201331Ssaidi@eecs.umich.edu       stat        <regex>            Show stat data (only matching regex)
211331Ssaidi@eecs.umich.edu       stats       [regex]            List all stats (only matching regex)
221596Ssaidi@eecs.umich.edu
231596Ssaidi@eecs.umich.edu       database    <command>          Where command is drop, init, or clean
241596Ssaidi@eecs.umich.edu
251049Sbinkertn@umich.edu''' % sys.argv[0]
261049Sbinkertn@umich.edu    sys.exit(1)
271049Sbinkertn@umich.edu
281049Sbinkertn@umich.edudef getopts(list, flags):
291049Sbinkertn@umich.edu    import getopt
301049Sbinkertn@umich.edu    try:
311049Sbinkertn@umich.edu        opts, args = getopt.getopt(list, flags)
321049Sbinkertn@umich.edu    except getopt.GetoptError:
331049Sbinkertn@umich.edu        usage()
341049Sbinkertn@umich.edu
351049Sbinkertn@umich.edu    return opts, args
361049Sbinkertn@umich.edu
371049Sbinkertn@umich.edudef printval(name, value, invert = False):
381049Sbinkertn@umich.edu    if invert and value != 0.0:
391049Sbinkertn@umich.edu        value = 1 / value
401049Sbinkertn@umich.edu
411049Sbinkertn@umich.edu    if value == (1e300*1e300):
421049Sbinkertn@umich.edu        return
431049Sbinkertn@umich.edu
441049Sbinkertn@umich.edu    if printval.mode == 'G':
451049Sbinkertn@umich.edu        print '%s:    %g' % (name, value)
461049Sbinkertn@umich.edu    elif printval.mode != 'F' and value > 1e6:
471049Sbinkertn@umich.edu        print '%s:    %0.5e' % (name, value)
481049Sbinkertn@umich.edu    else:
491049Sbinkertn@umich.edu        print '%s:    %f' % (name, value)
501049Sbinkertn@umich.edu
511049Sbinkertn@umich.eduprintval.mode = 'G'
521049Sbinkertn@umich.edu
531049Sbinkertn@umich.edudef unique(list):
541049Sbinkertn@umich.edu    set = {}
551049Sbinkertn@umich.edu    map(set.__setitem__, list, [])
561049Sbinkertn@umich.edu    return set.keys()
571049Sbinkertn@umich.edu
581307Sbinkertn@umich.edudef graphdata68(runs, options, tag, label, value):
591307Sbinkertn@umich.edu    import info
601307Sbinkertn@umich.edu    configs = ['ste', 'hte', 'htd', 'ocm', 'occ', 'ocp' ]
611307Sbinkertn@umich.edu    benchmarks = [ 'm', 's', 'snt', 'nb1', 'w1', 'w2', 'w3', 'w4', 'nm', 'ns', 'nw1', 'nw2', 'nw3' ]
621307Sbinkertn@umich.edu    dmas = [ 'x' ]
631307Sbinkertn@umich.edu    caches = [ '2', '4' ]
641307Sbinkertn@umich.edu
651307Sbinkertn@umich.edu    names = []
661307Sbinkertn@umich.edu
671307Sbinkertn@umich.edu    bench_system = {
681307Sbinkertn@umich.edu        'm' : 'client',
691307Sbinkertn@umich.edu        's' : 'client',
701307Sbinkertn@umich.edu        'snt' : 'client',
711307Sbinkertn@umich.edu        'nb1' : 'server',
721307Sbinkertn@umich.edu        'nb2' : 'server',
731307Sbinkertn@umich.edu        'nt1' : 'server',
741307Sbinkertn@umich.edu        'nt2' : 'server',
751307Sbinkertn@umich.edu        'w1' : 'server',
761307Sbinkertn@umich.edu        'w2' : 'server',
771307Sbinkertn@umich.edu        'w3' : 'server',
781307Sbinkertn@umich.edu        'w4' : 'server',
791307Sbinkertn@umich.edu        'w1s' : 'server',
801307Sbinkertn@umich.edu        'w2s' : 'server',
811307Sbinkertn@umich.edu        'w3s' : 'server',
821307Sbinkertn@umich.edu        'ns' : 'natbox',
831307Sbinkertn@umich.edu        'nm' : 'natbox',
841307Sbinkertn@umich.edu        'nw1' : 'natbox',
851307Sbinkertn@umich.edu        'nw2' : 'natbox',
861307Sbinkertn@umich.edu        'nw3' : 'natbox'
871307Sbinkertn@umich.edu        }
881307Sbinkertn@umich.edu
891307Sbinkertn@umich.edu    for bench in benchmarks:
901307Sbinkertn@umich.edu        if bench_system[bench] != options.system:
911307Sbinkertn@umich.edu            continue
921307Sbinkertn@umich.edu
931307Sbinkertn@umich.edu        for dma in dmas:
941307Sbinkertn@umich.edu            for cache in caches:
951307Sbinkertn@umich.edu                    names.append([bench, dma, cache])
961307Sbinkertn@umich.edu
971307Sbinkertn@umich.edu    for bench,dma,cache in names:
981307Sbinkertn@umich.edu        base = '%s.%s.%s' % (bench, dma, cache)
991307Sbinkertn@umich.edu        fname = 'data/%s.%s.68.dat' % (tag, base)
1001307Sbinkertn@umich.edu        f = open(fname, 'w')
1011307Sbinkertn@umich.edu        print >>f, '#set TITLE = '
1021307Sbinkertn@umich.edu        print >>f, '#set ylbl = %s' % label
1031307Sbinkertn@umich.edu        #print >>f, '#set sublabels = %s' % ' '.join(configs)
1041307Sbinkertn@umich.edu        print >>f, '#set sublabels = ste hte htd ocm occ ocs'
1051307Sbinkertn@umich.edu
1061307Sbinkertn@umich.edu        for speed,freq in zip(['s', '6', '8', 'q'],['4GHz', '6GHz','8GHz', '10GHz']):
1071307Sbinkertn@umich.edu            print >>f, '"%s"' % freq,
1081307Sbinkertn@umich.edu            for conf in configs:
1091307Sbinkertn@umich.edu                name = '%s.%s.%s.%s.%s' % (conf, bench, dma, cache, speed)
1101307Sbinkertn@umich.edu                run = info.source.allRunNames[name]
1111307Sbinkertn@umich.edu                info.display_run = run.run;
1121307Sbinkertn@umich.edu                val = float(value)
1131307Sbinkertn@umich.edu                if val == 1e300*1e300:
1141307Sbinkertn@umich.edu                    print >>f, 0.0,
1151307Sbinkertn@umich.edu                else:
1161307Sbinkertn@umich.edu                    print >>f, "%f" % val,
1171307Sbinkertn@umich.edu            print >>f
1181307Sbinkertn@umich.edu        f.close()
1191307Sbinkertn@umich.edu
1201269Sbinkertn@umich.edudef graphdata(runs, options, tag, label, value):
1211307Sbinkertn@umich.edu    if options.graph68:
1221307Sbinkertn@umich.edu        graphdata68(runs, options, tag, label, value)
1231307Sbinkertn@umich.edu        return
1241307Sbinkertn@umich.edu
1251049Sbinkertn@umich.edu    import info
1261269Sbinkertn@umich.edu    configs = ['ste', 'hte', 'htd', 'ocm', 'occ', 'ocp' ]
1271269Sbinkertn@umich.edu    #benchmarks = [ 'm', 's', 'nb1', 'nb2', 'nt1', 'nt2', 'w1', 'w2', 'w3', 'w4', 'ns', 'nm', 'nw1', 'nw2', 'nw3' ]
1281269Sbinkertn@umich.edu    #benchmarks = [ 'm', 's', 'nb1', 'nb2', 'nt1', 'w1', 'w2', 'w3', 'ns', 'nm', 'w1s' ]
1291269Sbinkertn@umich.edu    benchmarks = [ 'm', 's', 'nb1', 'nb2', 'w1', 'w2', 'w3', 'w4', 'ns', 'nm', 'nw1', 'snt' ]
1301269Sbinkertn@umich.edu    #dmas = [ 'x', 'd', 'b' ]
1311269Sbinkertn@umich.edu    dmas = [ 'x' ]
1321162Sbinkertn@umich.edu    caches = [ '2', '4' ]
1331049Sbinkertn@umich.edu
1341049Sbinkertn@umich.edu    names = []
1351269Sbinkertn@umich.edu
1361269Sbinkertn@umich.edu    bench_system = {
1371269Sbinkertn@umich.edu        'm' : 'client',
1381269Sbinkertn@umich.edu        's' : 'client',
1391269Sbinkertn@umich.edu        'snt' : 'client',
1401269Sbinkertn@umich.edu        'nb1' : 'server',
1411269Sbinkertn@umich.edu        'nb2' : 'server',
1421269Sbinkertn@umich.edu        'nt1' : 'server',
1431269Sbinkertn@umich.edu        'nt2' : 'server',
1441269Sbinkertn@umich.edu        'w1' : 'server',
1451269Sbinkertn@umich.edu        'w2' : 'server',
1461269Sbinkertn@umich.edu        'w3' : 'server',
1471269Sbinkertn@umich.edu        'w4' : 'server',
1481269Sbinkertn@umich.edu        'w1s' : 'server',
1491269Sbinkertn@umich.edu        'w2s' : 'server',
1501269Sbinkertn@umich.edu        'w3s' : 'server',
1511269Sbinkertn@umich.edu        'ns' : 'natbox',
1521269Sbinkertn@umich.edu        'nm' : 'natbox',
1531269Sbinkertn@umich.edu        'nw1' : 'natbox',
1541269Sbinkertn@umich.edu        'nw2' : 'natbox',
1551269Sbinkertn@umich.edu        'nw3' : 'natbox'
1561269Sbinkertn@umich.edu        }
1571269Sbinkertn@umich.edu
1581049Sbinkertn@umich.edu    for bench in benchmarks:
1591269Sbinkertn@umich.edu        if bench_system[bench] != options.system:
1601269Sbinkertn@umich.edu            continue
1611269Sbinkertn@umich.edu
1621049Sbinkertn@umich.edu        for dma in dmas:
1631049Sbinkertn@umich.edu            for cache in caches:
1641269Sbinkertn@umich.edu                    names.append([bench, dma, cache])
1651049Sbinkertn@umich.edu
1661269Sbinkertn@umich.edu    for bench,dma,cache in names:
1671269Sbinkertn@umich.edu        base = '%s.%s.%s' % (bench, dma, cache)
1681165Sbinkertn@umich.edu        fname = 'data/%s.%s.dat' % (tag, base)
1691049Sbinkertn@umich.edu        f = open(fname, 'w')
1701307Sbinkertn@umich.edu        print >>f, '#set TITLE = '
1711049Sbinkertn@umich.edu        print >>f, '#set ylbl = %s' % label
1721307Sbinkertn@umich.edu        #print >>f, '#set sublabels = %s' % ' '.join(configs)
1731307Sbinkertn@umich.edu        print >>f, '#set sublabels = ste hte htd ocm occ ocs'
1741049Sbinkertn@umich.edu
1751049Sbinkertn@umich.edu        for speed,freq in zip(['s', 'q'],['4GHz','10GHz']):
1761049Sbinkertn@umich.edu            print >>f, '"%s"' % freq,
1771049Sbinkertn@umich.edu            for conf in configs:
1781269Sbinkertn@umich.edu                name = '%s.%s.%s.%s.%s' % (conf, bench, dma, cache, speed)
1791049Sbinkertn@umich.edu                run = info.source.allRunNames[name]
1801049Sbinkertn@umich.edu                info.display_run = run.run;
1811049Sbinkertn@umich.edu                val = float(value)
1821049Sbinkertn@umich.edu                if val == 1e300*1e300:
1831049Sbinkertn@umich.edu                    print >>f, 0.0,
1841049Sbinkertn@umich.edu                else:
1851049Sbinkertn@umich.edu                    print >>f, "%f" % val,
1861049Sbinkertn@umich.edu            print >>f
1871049Sbinkertn@umich.edu        f.close()
1881049Sbinkertn@umich.edu
1891049Sbinkertn@umich.edudef printdata(runs, value, invert = False):
1901049Sbinkertn@umich.edu    import info
1911049Sbinkertn@umich.edu    for run in runs:
1921049Sbinkertn@umich.edu        info.display_run = run.run;
1931049Sbinkertn@umich.edu        val = float(value)
1941049Sbinkertn@umich.edu        printval(run.name, val)
1951049Sbinkertn@umich.edu
1961049Sbinkertn@umich.educlass CommandException(Exception):
1971049Sbinkertn@umich.edu    pass
1981049Sbinkertn@umich.edu
1991049Sbinkertn@umich.edudef commands(options, command, args):
2001049Sbinkertn@umich.edu    if command == 'database':
2011049Sbinkertn@umich.edu        if len(args) == 0: raise CommandException
2021049Sbinkertn@umich.edu
2031049Sbinkertn@umich.edu        import dbinit
2041049Sbinkertn@umich.edu        mydb = dbinit.MyDB(options)
2051049Sbinkertn@umich.edu
2061049Sbinkertn@umich.edu        if args[0] == 'drop':
2071049Sbinkertn@umich.edu            if len(args) > 2: raise CommandException
2081049Sbinkertn@umich.edu            mydb.admin()
2091049Sbinkertn@umich.edu            mydb.drop()
2101049Sbinkertn@umich.edu            if len(args) == 2 and args[1] == 'init':
2111049Sbinkertn@umich.edu                mydb.create()
2121049Sbinkertn@umich.edu                mydb.connect()
2131049Sbinkertn@umich.edu                mydb.populate()
2141049Sbinkertn@umich.edu            mydb.close()
2151049Sbinkertn@umich.edu            return
2161049Sbinkertn@umich.edu
2171049Sbinkertn@umich.edu        if args[0] == 'init':
2181049Sbinkertn@umich.edu            if len(args) > 1: raise CommandException
2191049Sbinkertn@umich.edu            mydb.admin()
2201049Sbinkertn@umich.edu            mydb.create()
2211049Sbinkertn@umich.edu            mydb.connect()
2221049Sbinkertn@umich.edu            mydb.populate()
2231049Sbinkertn@umich.edu            mydb.close()
2241049Sbinkertn@umich.edu            return
2251049Sbinkertn@umich.edu
2261049Sbinkertn@umich.edu        if args[0] == 'clean':
2271049Sbinkertn@umich.edu            if len(args) > 1: raise CommandException
2281049Sbinkertn@umich.edu            mydb.connect()
2291049Sbinkertn@umich.edu            mydb.clean()
2301049Sbinkertn@umich.edu            return
2311049Sbinkertn@umich.edu
2321049Sbinkertn@umich.edu        raise CommandException
2331049Sbinkertn@umich.edu
2341049Sbinkertn@umich.edu    import db, info
2351049Sbinkertn@umich.edu    info.source = db.Database()
2361049Sbinkertn@umich.edu    info.source.host = options.host
2371049Sbinkertn@umich.edu    info.source.db = options.db
2381049Sbinkertn@umich.edu    info.source.passwd = options.passwd
2391049Sbinkertn@umich.edu    info.source.user = options.user
2401049Sbinkertn@umich.edu    info.source.connect()
2411049Sbinkertn@umich.edu    info.source.update_dict(globals())
2421049Sbinkertn@umich.edu
2431049Sbinkertn@umich.edu    if type(options.get) is str:
2441049Sbinkertn@umich.edu        info.source.get = options.get
2451049Sbinkertn@umich.edu
2461049Sbinkertn@umich.edu    if options.runs is None:
2471049Sbinkertn@umich.edu        runs = info.source.allRuns
2481049Sbinkertn@umich.edu    else:
2491049Sbinkertn@umich.edu        rx = re.compile(options.runs)
2501049Sbinkertn@umich.edu        runs = []
2511049Sbinkertn@umich.edu        for run in info.source.allRuns:
2521049Sbinkertn@umich.edu            if rx.match(run.name):
2531049Sbinkertn@umich.edu                runs.append(run)
2541049Sbinkertn@umich.edu
2551049Sbinkertn@umich.edu    info.display_run = runs[0].run
2561049Sbinkertn@umich.edu
2571049Sbinkertn@umich.edu    if command == 'runs':
2581049Sbinkertn@umich.edu        user = None
2591049Sbinkertn@umich.edu        opts, args = getopts(args, '-u')
2601049Sbinkertn@umich.edu        if len(args):
2611049Sbinkertn@umich.edu            raise CommandException
2621049Sbinkertn@umich.edu        for o,a in opts:
2631049Sbinkertn@umich.edu            if o == '-u':
2641049Sbinkertn@umich.edu                user = a
2651049Sbinkertn@umich.edu        info.source.listRuns(user)
2661049Sbinkertn@umich.edu        return
2671049Sbinkertn@umich.edu
2681309Ssaidi@eecs.umich.edu    if command == 'stability':
2691331Ssaidi@eecs.umich.edu        if len(args) < 2:
2701331Ssaidi@eecs.umich.edu            raise CommandException
2711331Ssaidi@eecs.umich.edu
2721331Ssaidi@eecs.umich.edu        try:
2731331Ssaidi@eecs.umich.edu            merge = int(args[0])
2741331Ssaidi@eecs.umich.edu        except ValueError:
2751331Ssaidi@eecs.umich.edu            usage()
2761331Ssaidi@eecs.umich.edu        stats = info.source.getStat(args[1])
2771331Ssaidi@eecs.umich.edu        info.source.get = "sum"
2781331Ssaidi@eecs.umich.edu
2791309Ssaidi@eecs.umich.edu
2801309Ssaidi@eecs.umich.edu        #loop through all the stats selected
2811309Ssaidi@eecs.umich.edu        for stat in stats:
2821309Ssaidi@eecs.umich.edu
2831317Ssaidi@eecs.umich.edu            print "%s:" % stat.name
2841331Ssaidi@eecs.umich.edu            print "%-20s %12s %12s %4s %5s %5s %5s %10s" % \
2851329Ssaidi@eecs.umich.edu                  ("run name", "average", "stdev", ">10%", ">1SDV", ">2SDV", "SAMP", "CV")
2861331Ssaidi@eecs.umich.edu            print "%-20s %12s %12s %4s %5s %5s %5s %10s" % \
2871329Ssaidi@eecs.umich.edu                  ("--------------------", "------------",
2881331Ssaidi@eecs.umich.edu                   "------------", "----", "-----", "-----", "-----", "----------")
2891309Ssaidi@eecs.umich.edu            #loop through all the selected runs
2901309Ssaidi@eecs.umich.edu            for run in runs:
2911309Ssaidi@eecs.umich.edu                info.display_run = run.run;
2921309Ssaidi@eecs.umich.edu                runTicks = info.source.retTicks([ run ])
2931309Ssaidi@eecs.umich.edu                #throw away the first one, it's 0
2941309Ssaidi@eecs.umich.edu                runTicks.pop(0)
2951329Ssaidi@eecs.umich.edu                info.globalTicks = runTicks
2961331Ssaidi@eecs.umich.edu                avg = 0
2971317Ssaidi@eecs.umich.edu                stdev = 0
2981317Ssaidi@eecs.umich.edu                numoutsideavg  = 0
2991318Ssaidi@eecs.umich.edu                numoutside1std = 0
3001318Ssaidi@eecs.umich.edu                numoutside2std = 0
3011331Ssaidi@eecs.umich.edu                pairRunTicks = []
3021331Ssaidi@eecs.umich.edu                if float(stat) == 1e300*1e300:
3031331Ssaidi@eecs.umich.edu                    continue
3041331Ssaidi@eecs.umich.edu                for t in range(0, len(runTicks)-(merge-1), merge):
3051331Ssaidi@eecs.umich.edu                    tempPair = []
3061331Ssaidi@eecs.umich.edu                    for p in range(0,merge):
3071331Ssaidi@eecs.umich.edu                        tempPair.append(runTicks[t+p])
3081331Ssaidi@eecs.umich.edu                    pairRunTicks.append(tempPair)
3091309Ssaidi@eecs.umich.edu                #loop through all the various ticks for each run
3101331Ssaidi@eecs.umich.edu                for tick in pairRunTicks:
3111331Ssaidi@eecs.umich.edu                    info.globalTicks = tick
3121331Ssaidi@eecs.umich.edu                    avg += float(stat)
3131331Ssaidi@eecs.umich.edu                avg /= len(pairRunTicks)
3141331Ssaidi@eecs.umich.edu                for tick in pairRunTicks:
3151331Ssaidi@eecs.umich.edu                    info.globalTicks = tick
3161331Ssaidi@eecs.umich.edu                    val = float(stat)
3171331Ssaidi@eecs.umich.edu                    stdev += pow((val-avg),2)
3181331Ssaidi@eecs.umich.edu                stdev = math.sqrt(stdev / len(pairRunTicks))
3191331Ssaidi@eecs.umich.edu                for tick in pairRunTicks:
3201331Ssaidi@eecs.umich.edu                    info.globalTicks = tick
3211309Ssaidi@eecs.umich.edu                    val = float(stat)
3221309Ssaidi@eecs.umich.edu                    if (val < (avg * .9)) or (val > (avg * 1.1)):
3231317Ssaidi@eecs.umich.edu                        numoutsideavg += 1
3241317Ssaidi@eecs.umich.edu                    if (val < (avg - stdev)) or (val > (avg + stdev)):
3251318Ssaidi@eecs.umich.edu                        numoutside1std += 1
3261318Ssaidi@eecs.umich.edu                    if (val < (avg - (2*stdev))) or (val > (avg + (2*stdev))):
3271318Ssaidi@eecs.umich.edu                        numoutside2std += 1
3281331Ssaidi@eecs.umich.edu                if avg > 1000:
3291331Ssaidi@eecs.umich.edu                    print "%-20s %12s %12s %4s %5s %5s %5s %10s" % \
3301331Ssaidi@eecs.umich.edu                          (run.name, "%.1f" % avg, "%.1f" % stdev,
3311331Ssaidi@eecs.umich.edu                           "%d" % numoutsideavg, "%d" % numoutside1std,
3321331Ssaidi@eecs.umich.edu                           "%d" % numoutside2std, "%d" % len(pairRunTicks),
3331331Ssaidi@eecs.umich.edu                           "%.3f" % (stdev/avg*100))
3341331Ssaidi@eecs.umich.edu                elif avg > 100:
3351331Ssaidi@eecs.umich.edu                    print "%-20s %12s %12s %4s %5s %5s %5s %10s" % \
3361331Ssaidi@eecs.umich.edu                          (run.name, "%.1f" % avg, "%.1f" % stdev,
3371331Ssaidi@eecs.umich.edu                           "%d" % numoutsideavg, "%d" % numoutside1std,
3381331Ssaidi@eecs.umich.edu                           "%d" % numoutside2std, "%d" % len(pairRunTicks),
3391331Ssaidi@eecs.umich.edu                           "%.5f" % (stdev/avg*100))
3401331Ssaidi@eecs.umich.edu                else:
3411331Ssaidi@eecs.umich.edu                    print "%-20s %12s %12s %4s %5s %5s %5s %10s" % \
3421331Ssaidi@eecs.umich.edu                          (run.name, "%.5f" % avg, "%.5f" % stdev,
3431331Ssaidi@eecs.umich.edu                           "%d" % numoutsideavg, "%d" % numoutside1std,
3441331Ssaidi@eecs.umich.edu                           "%d" % numoutside2std, "%d" % len(pairRunTicks),
3451331Ssaidi@eecs.umich.edu                           "%.7f" % (stdev/avg*100))
3461309Ssaidi@eecs.umich.edu        return
3471309Ssaidi@eecs.umich.edu
3481049Sbinkertn@umich.edu    if command == 'stats':
3491049Sbinkertn@umich.edu        if len(args) == 0:
3501049Sbinkertn@umich.edu            info.source.listStats()
3511049Sbinkertn@umich.edu        elif len(args) == 1:
3521049Sbinkertn@umich.edu            info.source.listStats(args[0])
3531049Sbinkertn@umich.edu        else:
3541049Sbinkertn@umich.edu            raise CommandException
3551049Sbinkertn@umich.edu
3561049Sbinkertn@umich.edu        return
3571049Sbinkertn@umich.edu
3581049Sbinkertn@umich.edu    if command == 'stat':
3591049Sbinkertn@umich.edu        if len(args) != 1:
3601049Sbinkertn@umich.edu            raise CommandException
3611049Sbinkertn@umich.edu
3621049Sbinkertn@umich.edu        stats = info.source.getStat(args[0])
3631049Sbinkertn@umich.edu        for stat in stats:
3641076Sbinkertn@umich.edu            if options.graph:
3651269Sbinkertn@umich.edu                graphdata(runs, options, stat.name, stat.name, stat)
3661049Sbinkertn@umich.edu            else:
3671301Ssaidi@eecs.umich.edu                if options.ticks:
3681301Ssaidi@eecs.umich.edu                   print 'only displaying sample %s' % options.ticks
3691329Ssaidi@eecs.umich.edu                   info.globalTicks = [ int(x) for x in options.ticks.split() ]
3701301Ssaidi@eecs.umich.edu
3711165Sbinkertn@umich.edu                if options.binned:
3721165Sbinkertn@umich.edu                    print 'kernel ticks'
3731165Sbinkertn@umich.edu                    stat.bins = 'kernel'
3741165Sbinkertn@umich.edu                    printdata(runs, stat)
3751165Sbinkertn@umich.edu
3761165Sbinkertn@umich.edu                    print 'idle ticks'
3771165Sbinkertn@umich.edu                    stat.bins = 'idle'
3781165Sbinkertn@umich.edu                    printdata(runs, stat)
3791165Sbinkertn@umich.edu
3801165Sbinkertn@umich.edu                    print 'user ticks'
3811165Sbinkertn@umich.edu                    stat.bins = 'user'
3821165Sbinkertn@umich.edu                    printdata(runs, stat)
3831165Sbinkertn@umich.edu
3841165Sbinkertn@umich.edu                    print 'interrupt ticks'
3851301Ssaidi@eecs.umich.edu                    stat.bins = 'interrupt'
3861165Sbinkertn@umich.edu                    printdata(runs, stat)
3871165Sbinkertn@umich.edu
3881165Sbinkertn@umich.edu                    print 'total ticks'
3891165Sbinkertn@umich.edu
3901165Sbinkertn@umich.edu                stat.bins = None
3911049Sbinkertn@umich.edu                print stat.name
3921049Sbinkertn@umich.edu                printdata(runs, stat)
3931049Sbinkertn@umich.edu        return
3941049Sbinkertn@umich.edu
3951269Sbinkertn@umich.edu    if command == 'formula':
3961269Sbinkertn@umich.edu        if len(args) != 1:
3971269Sbinkertn@umich.edu            raise CommandException
3981269Sbinkertn@umich.edu
3991269Sbinkertn@umich.edu        stats = eval(args[0])
4001269Sbinkertn@umich.edu        for stat in stats:
4011269Sbinkertn@umich.edu            if options.graph:
4021269Sbinkertn@umich.edu                graphdata(runs, options, stat.name, stat.name, stat)
4031269Sbinkertn@umich.edu            else:
4041269Sbinkertn@umich.edu                if options.binned:
4051269Sbinkertn@umich.edu                    print 'kernel ticks'
4061269Sbinkertn@umich.edu                    stat.bins = 'kernel'
4071269Sbinkertn@umich.edu                    printdata(runs, stat)
4081269Sbinkertn@umich.edu
4091269Sbinkertn@umich.edu                    print 'idle ticks'
4101269Sbinkertn@umich.edu                    stat.bins = 'idle'
4111269Sbinkertn@umich.edu                    printdata(runs, stat)
4121269Sbinkertn@umich.edu
4131269Sbinkertn@umich.edu                    print 'user ticks'
4141269Sbinkertn@umich.edu                    stat.bins = 'user'
4151269Sbinkertn@umich.edu                    printdata(runs, stat)
4161269Sbinkertn@umich.edu
4171269Sbinkertn@umich.edu                    print 'interrupt ticks'
4181301Ssaidi@eecs.umich.edu                    stat.bins = 'interrupt'
4191269Sbinkertn@umich.edu                    printdata(runs, stat)
4201269Sbinkertn@umich.edu
4211269Sbinkertn@umich.edu                    print 'total ticks'
4221269Sbinkertn@umich.edu
4231269Sbinkertn@umich.edu                stat.bins = None
4241269Sbinkertn@umich.edu                print args[0]
4251269Sbinkertn@umich.edu                printdata(runs, stat)
4261269Sbinkertn@umich.edu        return
4271269Sbinkertn@umich.edu
4281049Sbinkertn@umich.edu    if command == 'bins':
4291049Sbinkertn@umich.edu        if len(args) == 0:
4301049Sbinkertn@umich.edu            info.source.listBins()
4311049Sbinkertn@umich.edu        elif len(args) == 1:
4321049Sbinkertn@umich.edu            info.source.listBins(args[0])
4331049Sbinkertn@umich.edu        else:
4341049Sbinkertn@umich.edu            raise CommandException
4351049Sbinkertn@umich.edu
4361049Sbinkertn@umich.edu        return
4371049Sbinkertn@umich.edu
4381049Sbinkertn@umich.edu    if command == 'formulas':
4391049Sbinkertn@umich.edu        if len(args) == 0:
4401049Sbinkertn@umich.edu            info.source.listFormulas()
4411049Sbinkertn@umich.edu        elif len(args) == 1:
4421049Sbinkertn@umich.edu            info.source.listFormulas(args[0])
4431049Sbinkertn@umich.edu        else:
4441049Sbinkertn@umich.edu            raise CommandException
4451049Sbinkertn@umich.edu
4461049Sbinkertn@umich.edu        return
4471049Sbinkertn@umich.edu
4481049Sbinkertn@umich.edu    if command == 'samples':
4491049Sbinkertn@umich.edu        if len(args):
4501049Sbinkertn@umich.edu            raise CommandException
4511049Sbinkertn@umich.edu
4521049Sbinkertn@umich.edu        info.source.listTicks(runs)
4531049Sbinkertn@umich.edu        return
4541049Sbinkertn@umich.edu
4551049Sbinkertn@umich.edu    if len(args):
4561049Sbinkertn@umich.edu        raise CommandException
4571049Sbinkertn@umich.edu
4581209Sbinkertn@umich.edu    system = info.source.__dict__[options.system]
4591209Sbinkertn@umich.edu
4601049Sbinkertn@umich.edu    if command == 'usertime':
4611049Sbinkertn@umich.edu        import copy
4621049Sbinkertn@umich.edu        kernel = copy.copy(system.full_cpu.numCycles)
4631049Sbinkertn@umich.edu        kernel.bins = 'kernel'
4641049Sbinkertn@umich.edu
4651049Sbinkertn@umich.edu        user = copy.copy(system.full_cpu.numCycles)
4661049Sbinkertn@umich.edu        user.bins = 'user'
4671049Sbinkertn@umich.edu
4681076Sbinkertn@umich.edu        if options.graph:
4691269Sbinkertn@umich.edu            graphdata(runs, options, 'usertime', 'User Fraction',
4701049Sbinkertn@umich.edu                      user / system.full_cpu.numCycles)
4711049Sbinkertn@umich.edu        else:
4721049Sbinkertn@umich.edu            printdata(runs, user / system.full_cpu.numCycles)
4731049Sbinkertn@umich.edu        return
4741049Sbinkertn@umich.edu
4751049Sbinkertn@umich.edu    if command == 'ticks':
4761076Sbinkertn@umich.edu        if options.binned:
4771049Sbinkertn@umich.edu            print 'kernel ticks'
4781049Sbinkertn@umich.edu            system.full_cpu.numCycles.bins = 'kernel'
4791049Sbinkertn@umich.edu            printdata(runs, system.full_cpu.numCycles)
4801049Sbinkertn@umich.edu
4811049Sbinkertn@umich.edu            print 'idle ticks'
4821049Sbinkertn@umich.edu            system.full_cpu.numCycles.bins = 'idle'
4831049Sbinkertn@umich.edu            printdata(runs, system.full_cpu.numCycles)
4841049Sbinkertn@umich.edu
4851049Sbinkertn@umich.edu            print 'user ticks'
4861049Sbinkertn@umich.edu            system.full_cpu.numCycles.bins = 'user'
4871049Sbinkertn@umich.edu            printdata(runs, system.full_cpu.numCycles)
4881049Sbinkertn@umich.edu
4891049Sbinkertn@umich.edu            print 'total ticks'
4901049Sbinkertn@umich.edu
4911049Sbinkertn@umich.edu        system.full_cpu.numCycles.bins = None
4921049Sbinkertn@umich.edu        printdata(runs, system.full_cpu.numCycles)
4931049Sbinkertn@umich.edu        return
4941049Sbinkertn@umich.edu
4951049Sbinkertn@umich.edu    if command == 'packets':
4961162Sbinkertn@umich.edu        packets = system.tsunami.etherdev.rxPackets
4971076Sbinkertn@umich.edu        if options.graph:
4981269Sbinkertn@umich.edu            graphdata(runs, options, 'packets', 'Packets', packets)
4991049Sbinkertn@umich.edu        else:
5001049Sbinkertn@umich.edu            printdata(runs, packets)
5011049Sbinkertn@umich.edu        return
5021049Sbinkertn@umich.edu
5031049Sbinkertn@umich.edu    if command == 'ppt' or command == 'tpp':
5041162Sbinkertn@umich.edu        ppt = system.tsunami.etherdev.rxPackets / sim_ticks
5051049Sbinkertn@umich.edu        printdata(runs, ppt, command == 'tpp')
5061049Sbinkertn@umich.edu        return
5071049Sbinkertn@umich.edu
5081049Sbinkertn@umich.edu    if command == 'pps':
5091162Sbinkertn@umich.edu        pps = system.tsunami.etherdev.rxPackets / sim_seconds
5101076Sbinkertn@umich.edu        if options.graph:
5111269Sbinkertn@umich.edu            graphdata(runs, options, 'pps', 'Packets/s', pps)
5121049Sbinkertn@umich.edu        else:
5131049Sbinkertn@umich.edu            printdata(runs, pps)
5141049Sbinkertn@umich.edu        return
5151049Sbinkertn@umich.edu
5161049Sbinkertn@umich.edu    if command == 'bpt' or command == 'tpb':
5171162Sbinkertn@umich.edu        bytes = system.tsunami.etherdev.rxBytes + system.tsunami.etherdev.txBytes
5181049Sbinkertn@umich.edu        bpt = bytes / sim_ticks * 8
5191076Sbinkertn@umich.edu        if options.graph:
5201269Sbinkertn@umich.edu            graphdata(runs, options, 'bpt', 'bps / Hz', bpt)
5211049Sbinkertn@umich.edu        else:
5221049Sbinkertn@umich.edu            printdata(runs, bpt, command == 'tpb')
5231049Sbinkertn@umich.edu        return
5241049Sbinkertn@umich.edu
5251049Sbinkertn@umich.edu    if command == 'bptb' or command == 'tpbb':
5261162Sbinkertn@umich.edu        bytes = system.tsunami.etherdev.rxBytes + system.tsunami.etherdev.txBytes
5271049Sbinkertn@umich.edu
5281049Sbinkertn@umich.edu        print 'kernel stats'
5291049Sbinkertn@umich.edu        bytes.bins = 'kernel'
5301049Sbinkertn@umich.edu        printdata(runs, bytes / ticks)
5311049Sbinkertn@umich.edu
5321049Sbinkertn@umich.edu        print 'idle stats'
5331049Sbinkertn@umich.edu        bytes.bins = 'idle'
5341049Sbinkertn@umich.edu        printdata(runs, bytes / ticks)
5351049Sbinkertn@umich.edu
5361049Sbinkertn@umich.edu        print 'user stats'
5371049Sbinkertn@umich.edu        bytes.bins = 'user'
5381049Sbinkertn@umich.edu        printdata(runs, bytes / ticks)
5391049Sbinkertn@umich.edu
5401049Sbinkertn@umich.edu        return
5411049Sbinkertn@umich.edu
5421049Sbinkertn@umich.edu    if command == 'bytes':
5431162Sbinkertn@umich.edu        stat = system.tsunami.etherdev.rxBytes + system.tsunami.etherdev.txBytes
5441049Sbinkertn@umich.edu
5451076Sbinkertn@umich.edu        if options.binned:
5461049Sbinkertn@umich.edu            print '%s kernel stats' % stat.name
5471049Sbinkertn@umich.edu            stat.bins = 'kernel'
5481049Sbinkertn@umich.edu            printdata(runs, stat)
5491049Sbinkertn@umich.edu
5501049Sbinkertn@umich.edu            print '%s idle stats' % stat.name
5511049Sbinkertn@umich.edu            stat.bins = 'idle'
5521049Sbinkertn@umich.edu            printdata(runs, stat)
5531049Sbinkertn@umich.edu
5541049Sbinkertn@umich.edu            print '%s user stats' % stat.name
5551049Sbinkertn@umich.edu            stat.bins = 'user'
5561049Sbinkertn@umich.edu            printdata(runs, stat)
5571049Sbinkertn@umich.edu
5581049Sbinkertn@umich.edu            print '%s total stats' % stat.name
5591049Sbinkertn@umich.edu            stat.bins = None
5601049Sbinkertn@umich.edu
5611049Sbinkertn@umich.edu        printdata(runs, stat)
5621049Sbinkertn@umich.edu        return
5631049Sbinkertn@umich.edu
5641049Sbinkertn@umich.edu    if command == 'rxbps':
5651162Sbinkertn@umich.edu        gbps = system.tsunami.etherdev.rxBandwidth / 1e9
5661076Sbinkertn@umich.edu        if options.graph:
5671269Sbinkertn@umich.edu            graphdata(runs, options, 'rxbps', 'Bandwidth (Gbps)',  gbps)
5681049Sbinkertn@umich.edu        else:
5691049Sbinkertn@umich.edu            printdata(runs, gbps)
5701049Sbinkertn@umich.edu        return
5711049Sbinkertn@umich.edu
5721049Sbinkertn@umich.edu    if command == 'txbps':
5731162Sbinkertn@umich.edu        gbps = system.tsunami.etherdev.txBandwidth / 1e9
5741076Sbinkertn@umich.edu        if options.graph:
5751269Sbinkertn@umich.edu            graphdata(runs, options, 'txbps', 'Bandwidth (Gbps)',  gbps)
5761049Sbinkertn@umich.edu        else:
5771049Sbinkertn@umich.edu            printdata(runs, gbps)
5781049Sbinkertn@umich.edu        return
5791049Sbinkertn@umich.edu
5801049Sbinkertn@umich.edu    if command == 'bps':
5811162Sbinkertn@umich.edu        rxbps = system.tsunami.etherdev.rxBandwidth
5821162Sbinkertn@umich.edu        txbps = system.tsunami.etherdev.txBandwidth
5831049Sbinkertn@umich.edu        gbps = (rxbps + txbps) / 1e9
5841076Sbinkertn@umich.edu        if options.graph:
5851269Sbinkertn@umich.edu            graphdata(runs, options, 'bps', 'Bandwidth (Gbps)',  gbps)
5861049Sbinkertn@umich.edu        else:
5871049Sbinkertn@umich.edu            printdata(runs, gbps)
5881049Sbinkertn@umich.edu        return
5891049Sbinkertn@umich.edu
5901049Sbinkertn@umich.edu    if command == 'misses':
5911162Sbinkertn@umich.edu        stat = system.L2.overall_mshr_misses
5921076Sbinkertn@umich.edu        if options.binned:
5931049Sbinkertn@umich.edu            print '%s kernel stats' % stat.name
5941049Sbinkertn@umich.edu            stat.bins = 'kernel'
5951049Sbinkertn@umich.edu            printdata(runs, stat)
5961049Sbinkertn@umich.edu
5971049Sbinkertn@umich.edu            print '%s idle stats' % stat.name
5981049Sbinkertn@umich.edu            stat.bins = 'idle'
5991049Sbinkertn@umich.edu            printdata(runs, stat)
6001049Sbinkertn@umich.edu
6011049Sbinkertn@umich.edu            print '%s user stats' % stat.name
6021049Sbinkertn@umich.edu            stat.bins = 'user'
6031049Sbinkertn@umich.edu            printdata(runs, stat)
6041049Sbinkertn@umich.edu
6051049Sbinkertn@umich.edu            print '%s total stats' % stat.name
6061049Sbinkertn@umich.edu
6071049Sbinkertn@umich.edu        stat.bins = None
6081076Sbinkertn@umich.edu        if options.graph:
6091269Sbinkertn@umich.edu            graphdata(runs, options, 'misses', 'Overall MSHR Misses', stat)
6101049Sbinkertn@umich.edu        else:
6111049Sbinkertn@umich.edu            printdata(runs, stat)
6121049Sbinkertn@umich.edu        return
6131049Sbinkertn@umich.edu
6141049Sbinkertn@umich.edu    if command == 'mpkb':
6151162Sbinkertn@umich.edu        misses = system.L2.overall_mshr_misses
6161162Sbinkertn@umich.edu        rxbytes = system.tsunami.etherdev.rxBytes
6171162Sbinkertn@umich.edu        txbytes = system.tsunami.etherdev.txBytes
6181049Sbinkertn@umich.edu
6191076Sbinkertn@umich.edu        if options.binned:
6201049Sbinkertn@umich.edu            print 'mpkb kernel stats'
6211049Sbinkertn@umich.edu            misses.bins = 'kernel'
6221049Sbinkertn@umich.edu            mpkb = misses / ((rxbytes + txbytes) / 1024)
6231049Sbinkertn@umich.edu            printdata(runs, mpkb)
6241049Sbinkertn@umich.edu
6251049Sbinkertn@umich.edu            print 'mpkb idle stats'
6261049Sbinkertn@umich.edu            misses.bins = 'idle'
6271049Sbinkertn@umich.edu            mpkb = misses / ((rxbytes + txbytes) / 1024)
6281049Sbinkertn@umich.edu            printdata(runs, mpkb)
6291049Sbinkertn@umich.edu
6301049Sbinkertn@umich.edu            print 'mpkb user stats'
6311049Sbinkertn@umich.edu            misses.bins = 'user'
6321049Sbinkertn@umich.edu            mpkb = misses / ((rxbytes + txbytes) / 1024)
6331049Sbinkertn@umich.edu            printdata(runs, mpkb)
6341049Sbinkertn@umich.edu
6351049Sbinkertn@umich.edu            print 'mpkb total stats'
6361049Sbinkertn@umich.edu
6371049Sbinkertn@umich.edu        mpkb = misses / ((rxbytes + txbytes) / 1024)
6381049Sbinkertn@umich.edu        misses.bins = None
6391076Sbinkertn@umich.edu        if options.graph:
6401269Sbinkertn@umich.edu            graphdata(runs, options, 'mpkb', 'Misses / KB',  mpkb)
6411049Sbinkertn@umich.edu        else:
6421049Sbinkertn@umich.edu            printdata(runs, mpkb)
6431049Sbinkertn@umich.edu        return
6441049Sbinkertn@umich.edu
6451269Sbinkertn@umich.edu    if command == 'ipkb':
6461269Sbinkertn@umich.edu        interrupts = system.full_cpu.kern.faults[4]
6471269Sbinkertn@umich.edu        rxbytes = system.tsunami.etherdev.rxBytes
6481269Sbinkertn@umich.edu        txbytes = system.tsunami.etherdev.txBytes
6491269Sbinkertn@umich.edu
6501269Sbinkertn@umich.edu        if options.binned:
6511269Sbinkertn@umich.edu            print 'ipkb kernel stats'
6521269Sbinkertn@umich.edu            interrupts.bins = 'kernel'
6531269Sbinkertn@umich.edu            ipkb = interrupts / ((rxbytes + txbytes) / 1024)
6541269Sbinkertn@umich.edu            printdata(runs, ipkb)
6551269Sbinkertn@umich.edu
6561269Sbinkertn@umich.edu            print 'ipkb idle stats'
6571269Sbinkertn@umich.edu            interrupts.bins = 'idle'
6581269Sbinkertn@umich.edu            ipkb = interrupts / ((rxbytes + txbytes) / 1024)
6591269Sbinkertn@umich.edu            printdata(runs, ipkb)
6601269Sbinkertn@umich.edu
6611269Sbinkertn@umich.edu            print 'ipkb user stats'
6621269Sbinkertn@umich.edu            interrupts.bins = 'user'
6631269Sbinkertn@umich.edu            ipkb = interrupts / ((rxbytes + txbytes) / 1024)
6641269Sbinkertn@umich.edu            printdata(runs, ipkb)
6651269Sbinkertn@umich.edu
6661269Sbinkertn@umich.edu            print 'ipkb total stats'
6671269Sbinkertn@umich.edu
6681269Sbinkertn@umich.edu        ipkb = interrupts / ((rxbytes + txbytes) / 1024)
6691269Sbinkertn@umich.edu        interrupts.bins = None
6701269Sbinkertn@umich.edu        if options.graph:
6711269Sbinkertn@umich.edu            graphdata(runs, options, 'ipkb', 'Interrupts / KB',  ipkb)
6721269Sbinkertn@umich.edu        else:
6731269Sbinkertn@umich.edu            printdata(runs, ipkb)
6741269Sbinkertn@umich.edu        return
6751269Sbinkertn@umich.edu
6761049Sbinkertn@umich.edu    if command == 'execute':
6771049Sbinkertn@umich.edu        printdata(runs, system.full_cpu.ISSUE__count)
6781049Sbinkertn@umich.edu        return
6791049Sbinkertn@umich.edu
6801049Sbinkertn@umich.edu    if command == 'commit':
6811049Sbinkertn@umich.edu        printdata(runs, system.full_cpu.COM__count)
6821049Sbinkertn@umich.edu        return
6831049Sbinkertn@umich.edu
6841049Sbinkertn@umich.edu    if command == 'fetch':
6851049Sbinkertn@umich.edu        printdata(runs, system.full_cpu.FETCH__count)
6861049Sbinkertn@umich.edu        return
6871049Sbinkertn@umich.edu
6881162Sbinkertn@umich.edu    if command == 'bpp':
6891162Sbinkertn@umich.edu        ed = system.tsunami.etherdev
6901162Sbinkertn@umich.edu        bpp = (ed.rxBytes + ed.txBytes) / (ed.rxPackets + ed.txPackets)
6911162Sbinkertn@umich.edu        if options.graph:
6921269Sbinkertn@umich.edu            graphdata(runs, options, 'bpp', 'Bytes / Packet',  bpp)
6931162Sbinkertn@umich.edu        else:
6941162Sbinkertn@umich.edu            printdata(runs, bpp)
6951162Sbinkertn@umich.edu        return
6961162Sbinkertn@umich.edu
6971049Sbinkertn@umich.edu    if command == 'rxbpp':
6981162Sbinkertn@umich.edu        bpp = system.tsunami.etherdev.rxBytes / system.tsunami.etherdev.rxPackets
6991162Sbinkertn@umich.edu        if options.graph:
7001269Sbinkertn@umich.edu            graphdata(runs, options, 'rxbpp', 'Receive Bytes / Packet',  bpp)
7011162Sbinkertn@umich.edu        else:
7021162Sbinkertn@umich.edu            printdata(runs, bpp)
7031049Sbinkertn@umich.edu        return
7041049Sbinkertn@umich.edu
7051049Sbinkertn@umich.edu    if command == 'txbpp':
7061162Sbinkertn@umich.edu        bpp = system.tsunami.etherdev.txBytes / system.tsunami.etherdev.txPackets
7071162Sbinkertn@umich.edu        if options.graph:
7081269Sbinkertn@umich.edu            graphdata(runs, options, 'txbpp', 'Transmit Bytes / Packet',  bpp)
7091162Sbinkertn@umich.edu        else:
7101162Sbinkertn@umich.edu            printdata(runs, bpp)
7111162Sbinkertn@umich.edu        return
7121162Sbinkertn@umich.edu
7131162Sbinkertn@umich.edu    if command == 'rtp':
7141162Sbinkertn@umich.edu        rtp = system.tsunami.etherdev.rxPackets / system.tsunami.etherdev.txPackets
7151162Sbinkertn@umich.edu        if options.graph:
7161269Sbinkertn@umich.edu            graphdata(runs, options, 'rtp', 'rxPackets / txPackets',  rtp)
7171162Sbinkertn@umich.edu        else:
7181162Sbinkertn@umich.edu            printdata(runs, rtp)
7191162Sbinkertn@umich.edu        return
7201162Sbinkertn@umich.edu
7211162Sbinkertn@umich.edu    if command == 'rtb':
7221162Sbinkertn@umich.edu        rtb = system.tsunami.etherdev.rxBytes / system.tsunami.etherdev.txBytes
7231162Sbinkertn@umich.edu        if options.graph:
7241269Sbinkertn@umich.edu            graphdata(runs, options, 'rtb', 'rxBytes / txBytes',  rtb)
7251162Sbinkertn@umich.edu        else:
7261162Sbinkertn@umich.edu            printdata(runs, rtb)
7271049Sbinkertn@umich.edu        return
7281049Sbinkertn@umich.edu
7291049Sbinkertn@umich.edu    raise CommandException
7301049Sbinkertn@umich.edu
7311049Sbinkertn@umich.edu
7321049Sbinkertn@umich.educlass Options: pass
7331049Sbinkertn@umich.edu
7341049Sbinkertn@umich.eduif __name__ == '__main__':
7351049Sbinkertn@umich.edu    import getpass
7361049Sbinkertn@umich.edu
7371049Sbinkertn@umich.edu    options = Options()
7381049Sbinkertn@umich.edu    options.host = 'zizzer.pool'
7391049Sbinkertn@umich.edu    options.db = None
7401049Sbinkertn@umich.edu    options.passwd = ''
7411049Sbinkertn@umich.edu    options.user = getpass.getuser()
7421049Sbinkertn@umich.edu    options.runs = None
7431049Sbinkertn@umich.edu    options.system = 'client'
7441049Sbinkertn@umich.edu    options.get = None
7451076Sbinkertn@umich.edu    options.binned = False
7461076Sbinkertn@umich.edu    options.graph = False
7471307Sbinkertn@umich.edu    options.graph68 = False
7481301Ssaidi@eecs.umich.edu    options.ticks = False
7491049Sbinkertn@umich.edu
7501308Ssaidi@eecs.umich.edu    opts, args = getopts(sys.argv[1:], '-6BEFGd:g:h:pr:s:u:T:')
7511049Sbinkertn@umich.edu    for o,a in opts:
7521307Sbinkertn@umich.edu        if o == '-6':
7531307Sbinkertn@umich.edu            options.graph68 = True
7541049Sbinkertn@umich.edu        if o == '-B':
7551049Sbinkertn@umich.edu            options.binned = True
7561049Sbinkertn@umich.edu        if o == '-E':
7571049Sbinkertn@umich.edu            printval.mode = 'E'
7581049Sbinkertn@umich.edu        if o == '-F':
7591049Sbinkertn@umich.edu            printval.mode = 'F'
7601049Sbinkertn@umich.edu        if o == '-G':
7611049Sbinkertn@umich.edu            options.graph = True;
7621049Sbinkertn@umich.edu        if o == '-d':
7631049Sbinkertn@umich.edu            options.db = a
7641049Sbinkertn@umich.edu        if o == '-g':
7651049Sbinkertn@umich.edu            options.get = a
7661049Sbinkertn@umich.edu        if o == '-h':
7671049Sbinkertn@umich.edu            options.host = a
7681049Sbinkertn@umich.edu        if o == '-p':
7691049Sbinkertn@umich.edu            options.passwd = getpass.getpass()
7701049Sbinkertn@umich.edu        if o == '-r':
7711049Sbinkertn@umich.edu            options.runs = a
7721049Sbinkertn@umich.edu        if o == '-u':
7731049Sbinkertn@umich.edu            options.user = a
7741049Sbinkertn@umich.edu        if o == '-s':
7751049Sbinkertn@umich.edu            options.system = a
7761301Ssaidi@eecs.umich.edu        if o == '-T':
7771301Ssaidi@eecs.umich.edu            options.ticks = a
7781049Sbinkertn@umich.edu
7791049Sbinkertn@umich.edu    if len(args) == 0:
7801049Sbinkertn@umich.edu        usage()
7811049Sbinkertn@umich.edu
7821049Sbinkertn@umich.edu    command = args[0]
7831049Sbinkertn@umich.edu    args = args[1:]
7841049Sbinkertn@umich.edu
7851049Sbinkertn@umich.edu    try:
7861049Sbinkertn@umich.edu        commands(options, command, args)
7871049Sbinkertn@umich.edu    except CommandException:
7881049Sbinkertn@umich.edu        usage()
789