stats.py revision 1309
11049Sbinkertn@umich.edu#!/usr/bin/env python
21049Sbinkertn@umich.edufrom __future__ import division
31049Sbinkertn@umich.eduimport re, sys
41049Sbinkertn@umich.edu
51049Sbinkertn@umich.edudef usage():
61049Sbinkertn@umich.edu    print '''\
71049Sbinkertn@umich.eduUsage: %s [-E] [-F] [-d <db> ] [-g <get> ] [-h <host>] [-p]
81049Sbinkertn@umich.edu       [-s <system>] [-r <runs> ] [-u <username>] <command> [command args]
91049Sbinkertn@umich.edu''' % sys.argv[0]
101049Sbinkertn@umich.edu    sys.exit(1)
111049Sbinkertn@umich.edu
121049Sbinkertn@umich.edudef getopts(list, flags):
131049Sbinkertn@umich.edu    import getopt
141049Sbinkertn@umich.edu    try:
151049Sbinkertn@umich.edu        opts, args = getopt.getopt(list, flags)
161049Sbinkertn@umich.edu    except getopt.GetoptError:
171049Sbinkertn@umich.edu        usage()
181049Sbinkertn@umich.edu
191049Sbinkertn@umich.edu    return opts, args
201049Sbinkertn@umich.edu
211049Sbinkertn@umich.edudef printval(name, value, invert = False):
221049Sbinkertn@umich.edu    if invert and value != 0.0:
231049Sbinkertn@umich.edu        value = 1 / value
241049Sbinkertn@umich.edu
251049Sbinkertn@umich.edu    if value == (1e300*1e300):
261049Sbinkertn@umich.edu        return
271049Sbinkertn@umich.edu
281049Sbinkertn@umich.edu    if printval.mode == 'G':
291049Sbinkertn@umich.edu        print '%s:    %g' % (name, value)
301049Sbinkertn@umich.edu    elif printval.mode != 'F' and value > 1e6:
311049Sbinkertn@umich.edu        print '%s:    %0.5e' % (name, value)
321049Sbinkertn@umich.edu    else:
331049Sbinkertn@umich.edu        print '%s:    %f' % (name, value)
341049Sbinkertn@umich.edu
351049Sbinkertn@umich.eduprintval.mode = 'G'
361049Sbinkertn@umich.edu
371049Sbinkertn@umich.edudef unique(list):
381049Sbinkertn@umich.edu    set = {}
391049Sbinkertn@umich.edu    map(set.__setitem__, list, [])
401049Sbinkertn@umich.edu    return set.keys()
411049Sbinkertn@umich.edu
421307Sbinkertn@umich.edudef graphdata68(runs, options, tag, label, value):
431307Sbinkertn@umich.edu    import info
441307Sbinkertn@umich.edu    configs = ['ste', 'hte', 'htd', 'ocm', 'occ', 'ocp' ]
451307Sbinkertn@umich.edu    benchmarks = [ 'm', 's', 'snt', 'nb1', 'w1', 'w2', 'w3', 'w4', 'nm', 'ns', 'nw1', 'nw2', 'nw3' ]
461307Sbinkertn@umich.edu    dmas = [ 'x' ]
471307Sbinkertn@umich.edu    caches = [ '2', '4' ]
481307Sbinkertn@umich.edu
491307Sbinkertn@umich.edu    names = []
501307Sbinkertn@umich.edu
511307Sbinkertn@umich.edu    bench_system = {
521307Sbinkertn@umich.edu        'm' : 'client',
531307Sbinkertn@umich.edu        's' : 'client',
541307Sbinkertn@umich.edu        'snt' : 'client',
551307Sbinkertn@umich.edu        'nb1' : 'server',
561307Sbinkertn@umich.edu        'nb2' : 'server',
571307Sbinkertn@umich.edu        'nt1' : 'server',
581307Sbinkertn@umich.edu        'nt2' : 'server',
591307Sbinkertn@umich.edu        'w1' : 'server',
601307Sbinkertn@umich.edu        'w2' : 'server',
611307Sbinkertn@umich.edu        'w3' : 'server',
621307Sbinkertn@umich.edu        'w4' : 'server',
631307Sbinkertn@umich.edu        'w1s' : 'server',
641307Sbinkertn@umich.edu        'w2s' : 'server',
651307Sbinkertn@umich.edu        'w3s' : 'server',
661307Sbinkertn@umich.edu        'ns' : 'natbox',
671307Sbinkertn@umich.edu        'nm' : 'natbox',
681307Sbinkertn@umich.edu        'nw1' : 'natbox',
691307Sbinkertn@umich.edu        'nw2' : 'natbox',
701307Sbinkertn@umich.edu        'nw3' : 'natbox'
711307Sbinkertn@umich.edu        }
721307Sbinkertn@umich.edu
731307Sbinkertn@umich.edu    for bench in benchmarks:
741307Sbinkertn@umich.edu        if bench_system[bench] != options.system:
751307Sbinkertn@umich.edu            continue
761307Sbinkertn@umich.edu
771307Sbinkertn@umich.edu        for dma in dmas:
781307Sbinkertn@umich.edu            for cache in caches:
791307Sbinkertn@umich.edu                    names.append([bench, dma, cache])
801307Sbinkertn@umich.edu
811307Sbinkertn@umich.edu    for bench,dma,cache in names:
821307Sbinkertn@umich.edu        base = '%s.%s.%s' % (bench, dma, cache)
831307Sbinkertn@umich.edu        fname = 'data/%s.%s.68.dat' % (tag, base)
841307Sbinkertn@umich.edu        f = open(fname, 'w')
851307Sbinkertn@umich.edu        print >>f, '#set TITLE = '
861307Sbinkertn@umich.edu        print >>f, '#set ylbl = %s' % label
871307Sbinkertn@umich.edu        #print >>f, '#set sublabels = %s' % ' '.join(configs)
881307Sbinkertn@umich.edu        print >>f, '#set sublabels = ste hte htd ocm occ ocs'
891307Sbinkertn@umich.edu
901307Sbinkertn@umich.edu        for speed,freq in zip(['s', '6', '8', 'q'],['4GHz', '6GHz','8GHz', '10GHz']):
911307Sbinkertn@umich.edu            print >>f, '"%s"' % freq,
921307Sbinkertn@umich.edu            for conf in configs:
931307Sbinkertn@umich.edu                name = '%s.%s.%s.%s.%s' % (conf, bench, dma, cache, speed)
941307Sbinkertn@umich.edu                run = info.source.allRunNames[name]
951307Sbinkertn@umich.edu                info.display_run = run.run;
961307Sbinkertn@umich.edu                val = float(value)
971307Sbinkertn@umich.edu                if val == 1e300*1e300:
981307Sbinkertn@umich.edu                    print >>f, 0.0,
991307Sbinkertn@umich.edu                else:
1001307Sbinkertn@umich.edu                    print >>f, "%f" % val,
1011307Sbinkertn@umich.edu            print >>f
1021307Sbinkertn@umich.edu        f.close()
1031307Sbinkertn@umich.edu
1041269Sbinkertn@umich.edudef graphdata(runs, options, tag, label, value):
1051307Sbinkertn@umich.edu    if options.graph68:
1061307Sbinkertn@umich.edu        graphdata68(runs, options, tag, label, value)
1071307Sbinkertn@umich.edu        return
1081307Sbinkertn@umich.edu
1091049Sbinkertn@umich.edu    import info
1101269Sbinkertn@umich.edu    configs = ['ste', 'hte', 'htd', 'ocm', 'occ', 'ocp' ]
1111269Sbinkertn@umich.edu    #benchmarks = [ 'm', 's', 'nb1', 'nb2', 'nt1', 'nt2', 'w1', 'w2', 'w3', 'w4', 'ns', 'nm', 'nw1', 'nw2', 'nw3' ]
1121269Sbinkertn@umich.edu    #benchmarks = [ 'm', 's', 'nb1', 'nb2', 'nt1', 'w1', 'w2', 'w3', 'ns', 'nm', 'w1s' ]
1131269Sbinkertn@umich.edu    benchmarks = [ 'm', 's', 'nb1', 'nb2', 'w1', 'w2', 'w3', 'w4', 'ns', 'nm', 'nw1', 'snt' ]
1141269Sbinkertn@umich.edu    #dmas = [ 'x', 'd', 'b' ]
1151269Sbinkertn@umich.edu    dmas = [ 'x' ]
1161162Sbinkertn@umich.edu    caches = [ '2', '4' ]
1171049Sbinkertn@umich.edu
1181049Sbinkertn@umich.edu    names = []
1191269Sbinkertn@umich.edu
1201269Sbinkertn@umich.edu    bench_system = {
1211269Sbinkertn@umich.edu        'm' : 'client',
1221269Sbinkertn@umich.edu        's' : 'client',
1231269Sbinkertn@umich.edu        'snt' : 'client',
1241269Sbinkertn@umich.edu        'nb1' : 'server',
1251269Sbinkertn@umich.edu        'nb2' : 'server',
1261269Sbinkertn@umich.edu        'nt1' : 'server',
1271269Sbinkertn@umich.edu        'nt2' : 'server',
1281269Sbinkertn@umich.edu        'w1' : 'server',
1291269Sbinkertn@umich.edu        'w2' : 'server',
1301269Sbinkertn@umich.edu        'w3' : 'server',
1311269Sbinkertn@umich.edu        'w4' : 'server',
1321269Sbinkertn@umich.edu        'w1s' : 'server',
1331269Sbinkertn@umich.edu        'w2s' : 'server',
1341269Sbinkertn@umich.edu        'w3s' : 'server',
1351269Sbinkertn@umich.edu        'ns' : 'natbox',
1361269Sbinkertn@umich.edu        'nm' : 'natbox',
1371269Sbinkertn@umich.edu        'nw1' : 'natbox',
1381269Sbinkertn@umich.edu        'nw2' : 'natbox',
1391269Sbinkertn@umich.edu        'nw3' : 'natbox'
1401269Sbinkertn@umich.edu        }
1411269Sbinkertn@umich.edu
1421049Sbinkertn@umich.edu    for bench in benchmarks:
1431269Sbinkertn@umich.edu        if bench_system[bench] != options.system:
1441269Sbinkertn@umich.edu            continue
1451269Sbinkertn@umich.edu
1461049Sbinkertn@umich.edu        for dma in dmas:
1471049Sbinkertn@umich.edu            for cache in caches:
1481269Sbinkertn@umich.edu                    names.append([bench, dma, cache])
1491049Sbinkertn@umich.edu
1501269Sbinkertn@umich.edu    for bench,dma,cache in names:
1511269Sbinkertn@umich.edu        base = '%s.%s.%s' % (bench, dma, cache)
1521165Sbinkertn@umich.edu        fname = 'data/%s.%s.dat' % (tag, base)
1531049Sbinkertn@umich.edu        f = open(fname, 'w')
1541307Sbinkertn@umich.edu        print >>f, '#set TITLE = '
1551049Sbinkertn@umich.edu        print >>f, '#set ylbl = %s' % label
1561307Sbinkertn@umich.edu        #print >>f, '#set sublabels = %s' % ' '.join(configs)
1571307Sbinkertn@umich.edu        print >>f, '#set sublabels = ste hte htd ocm occ ocs'
1581049Sbinkertn@umich.edu
1591049Sbinkertn@umich.edu        for speed,freq in zip(['s', 'q'],['4GHz','10GHz']):
1601049Sbinkertn@umich.edu            print >>f, '"%s"' % freq,
1611049Sbinkertn@umich.edu            for conf in configs:
1621269Sbinkertn@umich.edu                name = '%s.%s.%s.%s.%s' % (conf, bench, dma, cache, speed)
1631049Sbinkertn@umich.edu                run = info.source.allRunNames[name]
1641049Sbinkertn@umich.edu                info.display_run = run.run;
1651049Sbinkertn@umich.edu                val = float(value)
1661049Sbinkertn@umich.edu                if val == 1e300*1e300:
1671049Sbinkertn@umich.edu                    print >>f, 0.0,
1681049Sbinkertn@umich.edu                else:
1691049Sbinkertn@umich.edu                    print >>f, "%f" % val,
1701049Sbinkertn@umich.edu            print >>f
1711049Sbinkertn@umich.edu        f.close()
1721049Sbinkertn@umich.edu
1731049Sbinkertn@umich.edudef printdata(runs, value, invert = False):
1741049Sbinkertn@umich.edu    import info
1751049Sbinkertn@umich.edu    for run in runs:
1761049Sbinkertn@umich.edu        info.display_run = run.run;
1771049Sbinkertn@umich.edu        val = float(value)
1781049Sbinkertn@umich.edu        printval(run.name, val)
1791049Sbinkertn@umich.edu
1801049Sbinkertn@umich.educlass CommandException(Exception):
1811049Sbinkertn@umich.edu    pass
1821049Sbinkertn@umich.edu
1831049Sbinkertn@umich.edudef commands(options, command, args):
1841049Sbinkertn@umich.edu    if command == 'database':
1851049Sbinkertn@umich.edu        if len(args) == 0: raise CommandException
1861049Sbinkertn@umich.edu
1871049Sbinkertn@umich.edu        import dbinit
1881049Sbinkertn@umich.edu        mydb = dbinit.MyDB(options)
1891049Sbinkertn@umich.edu
1901049Sbinkertn@umich.edu        if args[0] == 'drop':
1911049Sbinkertn@umich.edu            if len(args) > 2: raise CommandException
1921049Sbinkertn@umich.edu            mydb.admin()
1931049Sbinkertn@umich.edu            mydb.drop()
1941049Sbinkertn@umich.edu            if len(args) == 2 and args[1] == 'init':
1951049Sbinkertn@umich.edu                mydb.create()
1961049Sbinkertn@umich.edu                mydb.connect()
1971049Sbinkertn@umich.edu                mydb.populate()
1981049Sbinkertn@umich.edu            mydb.close()
1991049Sbinkertn@umich.edu            return
2001049Sbinkertn@umich.edu
2011049Sbinkertn@umich.edu        if args[0] == 'init':
2021049Sbinkertn@umich.edu            if len(args) > 1: raise CommandException
2031049Sbinkertn@umich.edu            mydb.admin()
2041049Sbinkertn@umich.edu            mydb.create()
2051049Sbinkertn@umich.edu            mydb.connect()
2061049Sbinkertn@umich.edu            mydb.populate()
2071049Sbinkertn@umich.edu            mydb.close()
2081049Sbinkertn@umich.edu            return
2091049Sbinkertn@umich.edu
2101049Sbinkertn@umich.edu        if args[0] == 'clean':
2111049Sbinkertn@umich.edu            if len(args) > 1: raise CommandException
2121049Sbinkertn@umich.edu            mydb.connect()
2131049Sbinkertn@umich.edu            mydb.clean()
2141049Sbinkertn@umich.edu            return
2151049Sbinkertn@umich.edu
2161049Sbinkertn@umich.edu        raise CommandException
2171049Sbinkertn@umich.edu
2181049Sbinkertn@umich.edu    import db, info
2191049Sbinkertn@umich.edu    info.source = db.Database()
2201049Sbinkertn@umich.edu    info.source.host = options.host
2211049Sbinkertn@umich.edu    info.source.db = options.db
2221049Sbinkertn@umich.edu    info.source.passwd = options.passwd
2231049Sbinkertn@umich.edu    info.source.user = options.user
2241049Sbinkertn@umich.edu    info.source.connect()
2251049Sbinkertn@umich.edu    info.source.update_dict(globals())
2261049Sbinkertn@umich.edu
2271049Sbinkertn@umich.edu    if type(options.get) is str:
2281049Sbinkertn@umich.edu        info.source.get = options.get
2291049Sbinkertn@umich.edu
2301049Sbinkertn@umich.edu    if options.runs is None:
2311049Sbinkertn@umich.edu        runs = info.source.allRuns
2321049Sbinkertn@umich.edu    else:
2331049Sbinkertn@umich.edu        rx = re.compile(options.runs)
2341049Sbinkertn@umich.edu        runs = []
2351049Sbinkertn@umich.edu        for run in info.source.allRuns:
2361049Sbinkertn@umich.edu            if rx.match(run.name):
2371049Sbinkertn@umich.edu                runs.append(run)
2381049Sbinkertn@umich.edu
2391049Sbinkertn@umich.edu    info.display_run = runs[0].run
2401049Sbinkertn@umich.edu
2411049Sbinkertn@umich.edu    if command == 'runs':
2421049Sbinkertn@umich.edu        user = None
2431049Sbinkertn@umich.edu        opts, args = getopts(args, '-u')
2441049Sbinkertn@umich.edu        if len(args):
2451049Sbinkertn@umich.edu            raise CommandException
2461049Sbinkertn@umich.edu        for o,a in opts:
2471049Sbinkertn@umich.edu            if o == '-u':
2481049Sbinkertn@umich.edu                user = a
2491049Sbinkertn@umich.edu        info.source.listRuns(user)
2501049Sbinkertn@umich.edu        return
2511049Sbinkertn@umich.edu
2521309Ssaidi@eecs.umich.edu    if command == 'stability':
2531309Ssaidi@eecs.umich.edu        stats = info.source.getStat(args[0])
2541309Ssaidi@eecs.umich.edu        info.source.get = "avg"
2551309Ssaidi@eecs.umich.edu
2561309Ssaidi@eecs.umich.edu        #loop through all the stats selected
2571309Ssaidi@eecs.umich.edu        for stat in stats:
2581309Ssaidi@eecs.umich.edu            avg = float(stat)
2591309Ssaidi@eecs.umich.edu
2601309Ssaidi@eecs.umich.edu            #loop through all the selected runs
2611309Ssaidi@eecs.umich.edu            for run in runs:
2621309Ssaidi@eecs.umich.edu                info.display_run = run.run;
2631309Ssaidi@eecs.umich.edu                #print run.name
2641309Ssaidi@eecs.umich.edu                #print avg
2651309Ssaidi@eecs.umich.edu                runTicks = info.source.retTicks([ run ])
2661309Ssaidi@eecs.umich.edu                #throw away the first one, it's 0
2671309Ssaidi@eecs.umich.edu                runTicks.pop(0)
2681309Ssaidi@eecs.umich.edu
2691309Ssaidi@eecs.umich.edu                #loop through all the various ticks for each run
2701309Ssaidi@eecs.umich.edu                for tick in runTicks:
2711309Ssaidi@eecs.umich.edu                    stat.ticks = str(tick)
2721309Ssaidi@eecs.umich.edu                    val = float(stat)
2731309Ssaidi@eecs.umich.edu                    if (val < (avg * .9)) or (val > (avg * 1.1)):
2741309Ssaidi@eecs.umich.edu                        print '%s:%s is %f, which is more than 10%% of the'\
2751309Ssaidi@eecs.umich.edu                              'mean %f' % (run.name, stat.name, stat, avg)
2761309Ssaidi@eecs.umich.edu
2771309Ssaidi@eecs.umich.edu
2781309Ssaidi@eecs.umich.edu
2791309Ssaidi@eecs.umich.edu
2801309Ssaidi@eecs.umich.edu        return
2811309Ssaidi@eecs.umich.edu
2821309Ssaidi@eecs.umich.edu
2831049Sbinkertn@umich.edu    if command == 'stats':
2841049Sbinkertn@umich.edu        if len(args) == 0:
2851049Sbinkertn@umich.edu            info.source.listStats()
2861049Sbinkertn@umich.edu        elif len(args) == 1:
2871049Sbinkertn@umich.edu            info.source.listStats(args[0])
2881049Sbinkertn@umich.edu        else:
2891049Sbinkertn@umich.edu            raise CommandException
2901049Sbinkertn@umich.edu
2911049Sbinkertn@umich.edu        return
2921049Sbinkertn@umich.edu
2931049Sbinkertn@umich.edu    if command == 'stat':
2941049Sbinkertn@umich.edu        if len(args) != 1:
2951049Sbinkertn@umich.edu            raise CommandException
2961049Sbinkertn@umich.edu
2971049Sbinkertn@umich.edu        stats = info.source.getStat(args[0])
2981049Sbinkertn@umich.edu        for stat in stats:
2991076Sbinkertn@umich.edu            if options.graph:
3001269Sbinkertn@umich.edu                graphdata(runs, options, stat.name, stat.name, stat)
3011049Sbinkertn@umich.edu            else:
3021301Ssaidi@eecs.umich.edu                if options.ticks:
3031301Ssaidi@eecs.umich.edu                   print 'only displaying sample %s' % options.ticks
3041301Ssaidi@eecs.umich.edu                   stat.ticks = options.ticks
3051301Ssaidi@eecs.umich.edu
3061165Sbinkertn@umich.edu                if options.binned:
3071165Sbinkertn@umich.edu                    print 'kernel ticks'
3081165Sbinkertn@umich.edu                    stat.bins = 'kernel'
3091165Sbinkertn@umich.edu                    printdata(runs, stat)
3101165Sbinkertn@umich.edu
3111165Sbinkertn@umich.edu                    print 'idle ticks'
3121165Sbinkertn@umich.edu                    stat.bins = 'idle'
3131165Sbinkertn@umich.edu                    printdata(runs, stat)
3141165Sbinkertn@umich.edu
3151165Sbinkertn@umich.edu                    print 'user ticks'
3161165Sbinkertn@umich.edu                    stat.bins = 'user'
3171165Sbinkertn@umich.edu                    printdata(runs, stat)
3181165Sbinkertn@umich.edu
3191165Sbinkertn@umich.edu                    print 'interrupt ticks'
3201301Ssaidi@eecs.umich.edu                    stat.bins = 'interrupt'
3211165Sbinkertn@umich.edu                    printdata(runs, stat)
3221165Sbinkertn@umich.edu
3231165Sbinkertn@umich.edu                    print 'total ticks'
3241165Sbinkertn@umich.edu
3251165Sbinkertn@umich.edu                stat.bins = None
3261049Sbinkertn@umich.edu                print stat.name
3271049Sbinkertn@umich.edu                printdata(runs, stat)
3281049Sbinkertn@umich.edu        return
3291049Sbinkertn@umich.edu
3301269Sbinkertn@umich.edu    if command == 'formula':
3311269Sbinkertn@umich.edu        if len(args) != 1:
3321269Sbinkertn@umich.edu            raise CommandException
3331269Sbinkertn@umich.edu
3341269Sbinkertn@umich.edu        stats = eval(args[0])
3351269Sbinkertn@umich.edu        for stat in stats:
3361269Sbinkertn@umich.edu            if options.graph:
3371269Sbinkertn@umich.edu                graphdata(runs, options, stat.name, stat.name, stat)
3381269Sbinkertn@umich.edu            else:
3391269Sbinkertn@umich.edu                if options.binned:
3401269Sbinkertn@umich.edu                    print 'kernel ticks'
3411269Sbinkertn@umich.edu                    stat.bins = 'kernel'
3421269Sbinkertn@umich.edu                    printdata(runs, stat)
3431269Sbinkertn@umich.edu
3441269Sbinkertn@umich.edu                    print 'idle ticks'
3451269Sbinkertn@umich.edu                    stat.bins = 'idle'
3461269Sbinkertn@umich.edu                    printdata(runs, stat)
3471269Sbinkertn@umich.edu
3481269Sbinkertn@umich.edu                    print 'user ticks'
3491269Sbinkertn@umich.edu                    stat.bins = 'user'
3501269Sbinkertn@umich.edu                    printdata(runs, stat)
3511269Sbinkertn@umich.edu
3521269Sbinkertn@umich.edu                    print 'interrupt ticks'
3531301Ssaidi@eecs.umich.edu                    stat.bins = 'interrupt'
3541269Sbinkertn@umich.edu                    printdata(runs, stat)
3551269Sbinkertn@umich.edu
3561269Sbinkertn@umich.edu                    print 'total ticks'
3571269Sbinkertn@umich.edu
3581269Sbinkertn@umich.edu                stat.bins = None
3591269Sbinkertn@umich.edu                print args[0]
3601269Sbinkertn@umich.edu                printdata(runs, stat)
3611269Sbinkertn@umich.edu        return
3621269Sbinkertn@umich.edu
3631049Sbinkertn@umich.edu    if command == 'bins':
3641049Sbinkertn@umich.edu        if len(args) == 0:
3651049Sbinkertn@umich.edu            info.source.listBins()
3661049Sbinkertn@umich.edu        elif len(args) == 1:
3671049Sbinkertn@umich.edu            info.source.listBins(args[0])
3681049Sbinkertn@umich.edu        else:
3691049Sbinkertn@umich.edu            raise CommandException
3701049Sbinkertn@umich.edu
3711049Sbinkertn@umich.edu        return
3721049Sbinkertn@umich.edu
3731049Sbinkertn@umich.edu    if command == 'formulas':
3741049Sbinkertn@umich.edu        if len(args) == 0:
3751049Sbinkertn@umich.edu            info.source.listFormulas()
3761049Sbinkertn@umich.edu        elif len(args) == 1:
3771049Sbinkertn@umich.edu            info.source.listFormulas(args[0])
3781049Sbinkertn@umich.edu        else:
3791049Sbinkertn@umich.edu            raise CommandException
3801049Sbinkertn@umich.edu
3811049Sbinkertn@umich.edu        return
3821049Sbinkertn@umich.edu
3831049Sbinkertn@umich.edu    if command == 'samples':
3841049Sbinkertn@umich.edu        if len(args):
3851049Sbinkertn@umich.edu            raise CommandException
3861049Sbinkertn@umich.edu
3871049Sbinkertn@umich.edu        info.source.listTicks(runs)
3881049Sbinkertn@umich.edu        return
3891049Sbinkertn@umich.edu
3901049Sbinkertn@umich.edu    if len(args):
3911049Sbinkertn@umich.edu        raise CommandException
3921049Sbinkertn@umich.edu
3931209Sbinkertn@umich.edu    system = info.source.__dict__[options.system]
3941209Sbinkertn@umich.edu
3951049Sbinkertn@umich.edu    if command == 'usertime':
3961049Sbinkertn@umich.edu        import copy
3971049Sbinkertn@umich.edu        kernel = copy.copy(system.full_cpu.numCycles)
3981049Sbinkertn@umich.edu        kernel.bins = 'kernel'
3991049Sbinkertn@umich.edu
4001049Sbinkertn@umich.edu        user = copy.copy(system.full_cpu.numCycles)
4011049Sbinkertn@umich.edu        user.bins = 'user'
4021049Sbinkertn@umich.edu
4031076Sbinkertn@umich.edu        if options.graph:
4041269Sbinkertn@umich.edu            graphdata(runs, options, 'usertime', 'User Fraction',
4051049Sbinkertn@umich.edu                      user / system.full_cpu.numCycles)
4061049Sbinkertn@umich.edu        else:
4071049Sbinkertn@umich.edu            printdata(runs, user / system.full_cpu.numCycles)
4081049Sbinkertn@umich.edu        return
4091049Sbinkertn@umich.edu
4101049Sbinkertn@umich.edu    if command == 'ticks':
4111076Sbinkertn@umich.edu        if options.binned:
4121049Sbinkertn@umich.edu            print 'kernel ticks'
4131049Sbinkertn@umich.edu            system.full_cpu.numCycles.bins = 'kernel'
4141049Sbinkertn@umich.edu            printdata(runs, system.full_cpu.numCycles)
4151049Sbinkertn@umich.edu
4161049Sbinkertn@umich.edu            print 'idle ticks'
4171049Sbinkertn@umich.edu            system.full_cpu.numCycles.bins = 'idle'
4181049Sbinkertn@umich.edu            printdata(runs, system.full_cpu.numCycles)
4191049Sbinkertn@umich.edu
4201049Sbinkertn@umich.edu            print 'user ticks'
4211049Sbinkertn@umich.edu            system.full_cpu.numCycles.bins = 'user'
4221049Sbinkertn@umich.edu            printdata(runs, system.full_cpu.numCycles)
4231049Sbinkertn@umich.edu
4241049Sbinkertn@umich.edu            print 'total ticks'
4251049Sbinkertn@umich.edu
4261049Sbinkertn@umich.edu        system.full_cpu.numCycles.bins = None
4271049Sbinkertn@umich.edu        printdata(runs, system.full_cpu.numCycles)
4281049Sbinkertn@umich.edu        return
4291049Sbinkertn@umich.edu
4301049Sbinkertn@umich.edu    if command == 'packets':
4311162Sbinkertn@umich.edu        packets = system.tsunami.etherdev.rxPackets
4321076Sbinkertn@umich.edu        if options.graph:
4331269Sbinkertn@umich.edu            graphdata(runs, options, 'packets', 'Packets', packets)
4341049Sbinkertn@umich.edu        else:
4351049Sbinkertn@umich.edu            printdata(runs, packets)
4361049Sbinkertn@umich.edu        return
4371049Sbinkertn@umich.edu
4381049Sbinkertn@umich.edu    if command == 'ppt' or command == 'tpp':
4391162Sbinkertn@umich.edu        ppt = system.tsunami.etherdev.rxPackets / sim_ticks
4401049Sbinkertn@umich.edu        printdata(runs, ppt, command == 'tpp')
4411049Sbinkertn@umich.edu        return
4421049Sbinkertn@umich.edu
4431049Sbinkertn@umich.edu    if command == 'pps':
4441162Sbinkertn@umich.edu        pps = system.tsunami.etherdev.rxPackets / sim_seconds
4451076Sbinkertn@umich.edu        if options.graph:
4461269Sbinkertn@umich.edu            graphdata(runs, options, 'pps', 'Packets/s', pps)
4471049Sbinkertn@umich.edu        else:
4481049Sbinkertn@umich.edu            printdata(runs, pps)
4491049Sbinkertn@umich.edu        return
4501049Sbinkertn@umich.edu
4511049Sbinkertn@umich.edu    if command == 'bpt' or command == 'tpb':
4521162Sbinkertn@umich.edu        bytes = system.tsunami.etherdev.rxBytes + system.tsunami.etherdev.txBytes
4531049Sbinkertn@umich.edu        bpt = bytes / sim_ticks * 8
4541076Sbinkertn@umich.edu        if options.graph:
4551269Sbinkertn@umich.edu            graphdata(runs, options, 'bpt', 'bps / Hz', bpt)
4561049Sbinkertn@umich.edu        else:
4571049Sbinkertn@umich.edu            printdata(runs, bpt, command == 'tpb')
4581049Sbinkertn@umich.edu        return
4591049Sbinkertn@umich.edu
4601049Sbinkertn@umich.edu    if command == 'bptb' or command == 'tpbb':
4611162Sbinkertn@umich.edu        bytes = system.tsunami.etherdev.rxBytes + system.tsunami.etherdev.txBytes
4621049Sbinkertn@umich.edu
4631049Sbinkertn@umich.edu        print 'kernel stats'
4641049Sbinkertn@umich.edu        bytes.bins = 'kernel'
4651049Sbinkertn@umich.edu        printdata(runs, bytes / ticks)
4661049Sbinkertn@umich.edu
4671049Sbinkertn@umich.edu        print 'idle stats'
4681049Sbinkertn@umich.edu        bytes.bins = 'idle'
4691049Sbinkertn@umich.edu        printdata(runs, bytes / ticks)
4701049Sbinkertn@umich.edu
4711049Sbinkertn@umich.edu        print 'user stats'
4721049Sbinkertn@umich.edu        bytes.bins = 'user'
4731049Sbinkertn@umich.edu        printdata(runs, bytes / ticks)
4741049Sbinkertn@umich.edu
4751049Sbinkertn@umich.edu        return
4761049Sbinkertn@umich.edu
4771049Sbinkertn@umich.edu    if command == 'bytes':
4781162Sbinkertn@umich.edu        stat = system.tsunami.etherdev.rxBytes + system.tsunami.etherdev.txBytes
4791049Sbinkertn@umich.edu
4801076Sbinkertn@umich.edu        if options.binned:
4811049Sbinkertn@umich.edu            print '%s kernel stats' % stat.name
4821049Sbinkertn@umich.edu            stat.bins = 'kernel'
4831049Sbinkertn@umich.edu            printdata(runs, stat)
4841049Sbinkertn@umich.edu
4851049Sbinkertn@umich.edu            print '%s idle stats' % stat.name
4861049Sbinkertn@umich.edu            stat.bins = 'idle'
4871049Sbinkertn@umich.edu            printdata(runs, stat)
4881049Sbinkertn@umich.edu
4891049Sbinkertn@umich.edu            print '%s user stats' % stat.name
4901049Sbinkertn@umich.edu            stat.bins = 'user'
4911049Sbinkertn@umich.edu            printdata(runs, stat)
4921049Sbinkertn@umich.edu
4931049Sbinkertn@umich.edu            print '%s total stats' % stat.name
4941049Sbinkertn@umich.edu            stat.bins = None
4951049Sbinkertn@umich.edu
4961049Sbinkertn@umich.edu        printdata(runs, stat)
4971049Sbinkertn@umich.edu        return
4981049Sbinkertn@umich.edu
4991049Sbinkertn@umich.edu    if command == 'rxbps':
5001162Sbinkertn@umich.edu        gbps = system.tsunami.etherdev.rxBandwidth / 1e9
5011076Sbinkertn@umich.edu        if options.graph:
5021269Sbinkertn@umich.edu            graphdata(runs, options, 'rxbps', 'Bandwidth (Gbps)',  gbps)
5031049Sbinkertn@umich.edu        else:
5041049Sbinkertn@umich.edu            printdata(runs, gbps)
5051049Sbinkertn@umich.edu        return
5061049Sbinkertn@umich.edu
5071049Sbinkertn@umich.edu    if command == 'txbps':
5081162Sbinkertn@umich.edu        gbps = system.tsunami.etherdev.txBandwidth / 1e9
5091076Sbinkertn@umich.edu        if options.graph:
5101269Sbinkertn@umich.edu            graphdata(runs, options, 'txbps', 'Bandwidth (Gbps)',  gbps)
5111049Sbinkertn@umich.edu        else:
5121049Sbinkertn@umich.edu            printdata(runs, gbps)
5131049Sbinkertn@umich.edu        return
5141049Sbinkertn@umich.edu
5151049Sbinkertn@umich.edu    if command == 'bps':
5161162Sbinkertn@umich.edu        rxbps = system.tsunami.etherdev.rxBandwidth
5171162Sbinkertn@umich.edu        txbps = system.tsunami.etherdev.txBandwidth
5181049Sbinkertn@umich.edu        gbps = (rxbps + txbps) / 1e9
5191076Sbinkertn@umich.edu        if options.graph:
5201269Sbinkertn@umich.edu            graphdata(runs, options, 'bps', 'Bandwidth (Gbps)',  gbps)
5211049Sbinkertn@umich.edu        else:
5221049Sbinkertn@umich.edu            printdata(runs, gbps)
5231049Sbinkertn@umich.edu        return
5241049Sbinkertn@umich.edu
5251049Sbinkertn@umich.edu    if command == 'misses':
5261162Sbinkertn@umich.edu        stat = system.L2.overall_mshr_misses
5271076Sbinkertn@umich.edu        if options.binned:
5281049Sbinkertn@umich.edu            print '%s kernel stats' % stat.name
5291049Sbinkertn@umich.edu            stat.bins = 'kernel'
5301049Sbinkertn@umich.edu            printdata(runs, stat)
5311049Sbinkertn@umich.edu
5321049Sbinkertn@umich.edu            print '%s idle stats' % stat.name
5331049Sbinkertn@umich.edu            stat.bins = 'idle'
5341049Sbinkertn@umich.edu            printdata(runs, stat)
5351049Sbinkertn@umich.edu
5361049Sbinkertn@umich.edu            print '%s user stats' % stat.name
5371049Sbinkertn@umich.edu            stat.bins = 'user'
5381049Sbinkertn@umich.edu            printdata(runs, stat)
5391049Sbinkertn@umich.edu
5401049Sbinkertn@umich.edu            print '%s total stats' % stat.name
5411049Sbinkertn@umich.edu
5421049Sbinkertn@umich.edu        stat.bins = None
5431076Sbinkertn@umich.edu        if options.graph:
5441269Sbinkertn@umich.edu            graphdata(runs, options, 'misses', 'Overall MSHR Misses', stat)
5451049Sbinkertn@umich.edu        else:
5461049Sbinkertn@umich.edu            printdata(runs, stat)
5471049Sbinkertn@umich.edu        return
5481049Sbinkertn@umich.edu
5491049Sbinkertn@umich.edu    if command == 'mpkb':
5501162Sbinkertn@umich.edu        misses = system.L2.overall_mshr_misses
5511162Sbinkertn@umich.edu        rxbytes = system.tsunami.etherdev.rxBytes
5521162Sbinkertn@umich.edu        txbytes = system.tsunami.etherdev.txBytes
5531049Sbinkertn@umich.edu
5541076Sbinkertn@umich.edu        if options.binned:
5551049Sbinkertn@umich.edu            print 'mpkb kernel stats'
5561049Sbinkertn@umich.edu            misses.bins = 'kernel'
5571049Sbinkertn@umich.edu            mpkb = misses / ((rxbytes + txbytes) / 1024)
5581049Sbinkertn@umich.edu            printdata(runs, mpkb)
5591049Sbinkertn@umich.edu
5601049Sbinkertn@umich.edu            print 'mpkb idle stats'
5611049Sbinkertn@umich.edu            misses.bins = 'idle'
5621049Sbinkertn@umich.edu            mpkb = misses / ((rxbytes + txbytes) / 1024)
5631049Sbinkertn@umich.edu            printdata(runs, mpkb)
5641049Sbinkertn@umich.edu
5651049Sbinkertn@umich.edu            print 'mpkb user stats'
5661049Sbinkertn@umich.edu            misses.bins = 'user'
5671049Sbinkertn@umich.edu            mpkb = misses / ((rxbytes + txbytes) / 1024)
5681049Sbinkertn@umich.edu            printdata(runs, mpkb)
5691049Sbinkertn@umich.edu
5701049Sbinkertn@umich.edu            print 'mpkb total stats'
5711049Sbinkertn@umich.edu
5721049Sbinkertn@umich.edu        mpkb = misses / ((rxbytes + txbytes) / 1024)
5731049Sbinkertn@umich.edu        misses.bins = None
5741076Sbinkertn@umich.edu        if options.graph:
5751269Sbinkertn@umich.edu            graphdata(runs, options, 'mpkb', 'Misses / KB',  mpkb)
5761049Sbinkertn@umich.edu        else:
5771049Sbinkertn@umich.edu            printdata(runs, mpkb)
5781049Sbinkertn@umich.edu        return
5791049Sbinkertn@umich.edu
5801269Sbinkertn@umich.edu    if command == 'ipkb':
5811269Sbinkertn@umich.edu        interrupts = system.full_cpu.kern.faults[4]
5821269Sbinkertn@umich.edu        rxbytes = system.tsunami.etherdev.rxBytes
5831269Sbinkertn@umich.edu        txbytes = system.tsunami.etherdev.txBytes
5841269Sbinkertn@umich.edu
5851269Sbinkertn@umich.edu        if options.binned:
5861269Sbinkertn@umich.edu            print 'ipkb kernel stats'
5871269Sbinkertn@umich.edu            interrupts.bins = 'kernel'
5881269Sbinkertn@umich.edu            ipkb = interrupts / ((rxbytes + txbytes) / 1024)
5891269Sbinkertn@umich.edu            printdata(runs, ipkb)
5901269Sbinkertn@umich.edu
5911269Sbinkertn@umich.edu            print 'ipkb idle stats'
5921269Sbinkertn@umich.edu            interrupts.bins = 'idle'
5931269Sbinkertn@umich.edu            ipkb = interrupts / ((rxbytes + txbytes) / 1024)
5941269Sbinkertn@umich.edu            printdata(runs, ipkb)
5951269Sbinkertn@umich.edu
5961269Sbinkertn@umich.edu            print 'ipkb user stats'
5971269Sbinkertn@umich.edu            interrupts.bins = 'user'
5981269Sbinkertn@umich.edu            ipkb = interrupts / ((rxbytes + txbytes) / 1024)
5991269Sbinkertn@umich.edu            printdata(runs, ipkb)
6001269Sbinkertn@umich.edu
6011269Sbinkertn@umich.edu            print 'ipkb total stats'
6021269Sbinkertn@umich.edu
6031269Sbinkertn@umich.edu        ipkb = interrupts / ((rxbytes + txbytes) / 1024)
6041269Sbinkertn@umich.edu        interrupts.bins = None
6051269Sbinkertn@umich.edu        if options.graph:
6061269Sbinkertn@umich.edu            graphdata(runs, options, 'ipkb', 'Interrupts / KB',  ipkb)
6071269Sbinkertn@umich.edu        else:
6081269Sbinkertn@umich.edu            printdata(runs, ipkb)
6091269Sbinkertn@umich.edu        return
6101269Sbinkertn@umich.edu
6111049Sbinkertn@umich.edu    if command == 'execute':
6121049Sbinkertn@umich.edu        printdata(runs, system.full_cpu.ISSUE__count)
6131049Sbinkertn@umich.edu        return
6141049Sbinkertn@umich.edu
6151049Sbinkertn@umich.edu    if command == 'commit':
6161049Sbinkertn@umich.edu        printdata(runs, system.full_cpu.COM__count)
6171049Sbinkertn@umich.edu        return
6181049Sbinkertn@umich.edu
6191049Sbinkertn@umich.edu    if command == 'fetch':
6201049Sbinkertn@umich.edu        printdata(runs, system.full_cpu.FETCH__count)
6211049Sbinkertn@umich.edu        return
6221049Sbinkertn@umich.edu
6231162Sbinkertn@umich.edu    if command == 'bpp':
6241162Sbinkertn@umich.edu        ed = system.tsunami.etherdev
6251162Sbinkertn@umich.edu        bpp = (ed.rxBytes + ed.txBytes) / (ed.rxPackets + ed.txPackets)
6261162Sbinkertn@umich.edu        if options.graph:
6271269Sbinkertn@umich.edu            graphdata(runs, options, 'bpp', 'Bytes / Packet',  bpp)
6281162Sbinkertn@umich.edu        else:
6291162Sbinkertn@umich.edu            printdata(runs, bpp)
6301162Sbinkertn@umich.edu        return
6311162Sbinkertn@umich.edu
6321049Sbinkertn@umich.edu    if command == 'rxbpp':
6331162Sbinkertn@umich.edu        bpp = system.tsunami.etherdev.rxBytes / system.tsunami.etherdev.rxPackets
6341162Sbinkertn@umich.edu        if options.graph:
6351269Sbinkertn@umich.edu            graphdata(runs, options, 'rxbpp', 'Receive Bytes / Packet',  bpp)
6361162Sbinkertn@umich.edu        else:
6371162Sbinkertn@umich.edu            printdata(runs, bpp)
6381049Sbinkertn@umich.edu        return
6391049Sbinkertn@umich.edu
6401049Sbinkertn@umich.edu    if command == 'txbpp':
6411162Sbinkertn@umich.edu        bpp = system.tsunami.etherdev.txBytes / system.tsunami.etherdev.txPackets
6421162Sbinkertn@umich.edu        if options.graph:
6431269Sbinkertn@umich.edu            graphdata(runs, options, 'txbpp', 'Transmit Bytes / Packet',  bpp)
6441162Sbinkertn@umich.edu        else:
6451162Sbinkertn@umich.edu            printdata(runs, bpp)
6461162Sbinkertn@umich.edu        return
6471162Sbinkertn@umich.edu
6481162Sbinkertn@umich.edu    if command == 'rtp':
6491162Sbinkertn@umich.edu        rtp = system.tsunami.etherdev.rxPackets / system.tsunami.etherdev.txPackets
6501162Sbinkertn@umich.edu        if options.graph:
6511269Sbinkertn@umich.edu            graphdata(runs, options, 'rtp', 'rxPackets / txPackets',  rtp)
6521162Sbinkertn@umich.edu        else:
6531162Sbinkertn@umich.edu            printdata(runs, rtp)
6541162Sbinkertn@umich.edu        return
6551162Sbinkertn@umich.edu
6561162Sbinkertn@umich.edu    if command == 'rtb':
6571162Sbinkertn@umich.edu        rtb = system.tsunami.etherdev.rxBytes / system.tsunami.etherdev.txBytes
6581162Sbinkertn@umich.edu        if options.graph:
6591269Sbinkertn@umich.edu            graphdata(runs, options, 'rtb', 'rxBytes / txBytes',  rtb)
6601162Sbinkertn@umich.edu        else:
6611162Sbinkertn@umich.edu            printdata(runs, rtb)
6621049Sbinkertn@umich.edu        return
6631049Sbinkertn@umich.edu
6641049Sbinkertn@umich.edu    raise CommandException
6651049Sbinkertn@umich.edu
6661049Sbinkertn@umich.edu
6671049Sbinkertn@umich.educlass Options: pass
6681049Sbinkertn@umich.edu
6691049Sbinkertn@umich.eduif __name__ == '__main__':
6701049Sbinkertn@umich.edu    import getpass
6711049Sbinkertn@umich.edu
6721049Sbinkertn@umich.edu    options = Options()
6731049Sbinkertn@umich.edu    options.host = 'zizzer.pool'
6741049Sbinkertn@umich.edu    options.db = None
6751049Sbinkertn@umich.edu    options.passwd = ''
6761049Sbinkertn@umich.edu    options.user = getpass.getuser()
6771049Sbinkertn@umich.edu    options.runs = None
6781049Sbinkertn@umich.edu    options.system = 'client'
6791049Sbinkertn@umich.edu    options.get = None
6801076Sbinkertn@umich.edu    options.binned = False
6811076Sbinkertn@umich.edu    options.graph = False
6821307Sbinkertn@umich.edu    options.graph68 = False
6831301Ssaidi@eecs.umich.edu    options.ticks = False
6841049Sbinkertn@umich.edu
6851308Ssaidi@eecs.umich.edu    opts, args = getopts(sys.argv[1:], '-6BEFGd:g:h:pr:s:u:T:')
6861049Sbinkertn@umich.edu    for o,a in opts:
6871307Sbinkertn@umich.edu        if o == '-6':
6881307Sbinkertn@umich.edu            options.graph68 = True
6891049Sbinkertn@umich.edu        if o == '-B':
6901049Sbinkertn@umich.edu            options.binned = True
6911049Sbinkertn@umich.edu        if o == '-E':
6921049Sbinkertn@umich.edu            printval.mode = 'E'
6931049Sbinkertn@umich.edu        if o == '-F':
6941049Sbinkertn@umich.edu            printval.mode = 'F'
6951049Sbinkertn@umich.edu        if o == '-G':
6961049Sbinkertn@umich.edu            options.graph = True;
6971049Sbinkertn@umich.edu        if o == '-d':
6981049Sbinkertn@umich.edu            options.db = a
6991049Sbinkertn@umich.edu        if o == '-g':
7001049Sbinkertn@umich.edu            options.get = a
7011049Sbinkertn@umich.edu        if o == '-h':
7021049Sbinkertn@umich.edu            options.host = a
7031049Sbinkertn@umich.edu        if o == '-p':
7041049Sbinkertn@umich.edu            options.passwd = getpass.getpass()
7051049Sbinkertn@umich.edu        if o == '-r':
7061049Sbinkertn@umich.edu            options.runs = a
7071049Sbinkertn@umich.edu        if o == '-u':
7081049Sbinkertn@umich.edu            options.user = a
7091049Sbinkertn@umich.edu        if o == '-s':
7101049Sbinkertn@umich.edu            options.system = a
7111301Ssaidi@eecs.umich.edu        if o == '-T':
7121301Ssaidi@eecs.umich.edu            options.ticks = a
7131049Sbinkertn@umich.edu
7141049Sbinkertn@umich.edu    if len(args) == 0:
7151049Sbinkertn@umich.edu        usage()
7161049Sbinkertn@umich.edu
7171049Sbinkertn@umich.edu    command = args[0]
7181049Sbinkertn@umich.edu    args = args[1:]
7191049Sbinkertn@umich.edu
7201049Sbinkertn@umich.edu    try:
7211049Sbinkertn@umich.edu        commands(options, command, args)
7221049Sbinkertn@umich.edu    except CommandException:
7231049Sbinkertn@umich.edu        usage()
724