stats.py revision 1162:a45bd001ac39
16019Shines@cs.fsu.edu#!/usr/bin/env python
26019Shines@cs.fsu.edufrom __future__ import division
37178Sgblack@eecs.umich.eduimport re, sys
47178Sgblack@eecs.umich.edu
57178Sgblack@eecs.umich.edudef usage():
67178Sgblack@eecs.umich.edu    print '''\
77178Sgblack@eecs.umich.eduUsage: %s [-E] [-F] [-d <db> ] [-g <get> ] [-h <host>] [-p]
87178Sgblack@eecs.umich.edu       [-s <system>] [-r <runs> ] [-u <username>] <command> [command args]
97178Sgblack@eecs.umich.edu''' % sys.argv[0]
107178Sgblack@eecs.umich.edu    sys.exit(1)
117178Sgblack@eecs.umich.edu
127178Sgblack@eecs.umich.edudef getopts(list, flags):
137178Sgblack@eecs.umich.edu    import getopt
147178Sgblack@eecs.umich.edu    try:
156019Shines@cs.fsu.edu        opts, args = getopt.getopt(list, flags)
166019Shines@cs.fsu.edu    except getopt.GetoptError:
176019Shines@cs.fsu.edu        usage()
186019Shines@cs.fsu.edu
196019Shines@cs.fsu.edu    return opts, args
206019Shines@cs.fsu.edu
216019Shines@cs.fsu.edudef printval(name, value, invert = False):
226019Shines@cs.fsu.edu    if invert and value != 0.0:
236019Shines@cs.fsu.edu        value = 1 / value
246019Shines@cs.fsu.edu
256019Shines@cs.fsu.edu    if value == (1e300*1e300):
266019Shines@cs.fsu.edu        return
276019Shines@cs.fsu.edu
286019Shines@cs.fsu.edu    if printval.mode == 'G':
296019Shines@cs.fsu.edu        print '%s:    %g' % (name, value)
306019Shines@cs.fsu.edu    elif printval.mode != 'F' and value > 1e6:
316019Shines@cs.fsu.edu        print '%s:    %0.5e' % (name, value)
326019Shines@cs.fsu.edu    else:
336019Shines@cs.fsu.edu        print '%s:    %f' % (name, value)
346019Shines@cs.fsu.edu
356019Shines@cs.fsu.eduprintval.mode = 'G'
366019Shines@cs.fsu.edu
376019Shines@cs.fsu.edudef unique(list):
386019Shines@cs.fsu.edu    set = {}
396019Shines@cs.fsu.edu    map(set.__setitem__, list, [])
406019Shines@cs.fsu.edu    return set.keys()
416019Shines@cs.fsu.edu
426019Shines@cs.fsu.edudef graphdata(runs, tag, label, value):
436019Shines@cs.fsu.edu    import info
446019Shines@cs.fsu.edu    configs = ['stx', 'ste', 'hte', 'htd', 'ocm', 'occ', 'ocp' ]
456019Shines@cs.fsu.edu    benchmarks = [ 'm', 's' ]
466019Shines@cs.fsu.edu    dmas = [ 'X', 'D' ]
476019Shines@cs.fsu.edu    caches = [ '2', '4' ]
487356Sgblack@eecs.umich.edu    checkpoints = [ '1' ]
497356Sgblack@eecs.umich.edu
507356Sgblack@eecs.umich.edu    names = []
517435Sgblack@eecs.umich.edu    for bench in benchmarks:
527435Sgblack@eecs.umich.edu        for dma in dmas:
537435Sgblack@eecs.umich.edu            for cache in caches:
547435Sgblack@eecs.umich.edu                for cpt in checkpoints:
557435Sgblack@eecs.umich.edu                    names.append([bench, dma, cache, cpt])
567435Sgblack@eecs.umich.edu
577435Sgblack@eecs.umich.edu    for bench,dma,cache,cpt in names:
587435Sgblack@eecs.umich.edu        base = '%s.%s.%s.%s' % (bench, dma, cache, cpt)
597435Sgblack@eecs.umich.edu        fname = '/n/ziff/z/binkertn/graph/test2/data/%s.%s.dat' % (tag, base)
607435Sgblack@eecs.umich.edu        f = open(fname, 'w')
617435Sgblack@eecs.umich.edu        print >>f, '#set TITLE = %s' % base
627435Sgblack@eecs.umich.edu        print >>f, '#set xlbl = Configuration'
637435Sgblack@eecs.umich.edu        print >>f, '#set ylbl = %s' % label
647435Sgblack@eecs.umich.edu        print >>f, '#set sublabels = %s' % ' '.join(configs)
657435Sgblack@eecs.umich.edu
667435Sgblack@eecs.umich.edu        for speed,freq in zip(['s', 'q'],['4GHz','10GHz']):
677435Sgblack@eecs.umich.edu            print >>f, '"%s"' % freq,
687435Sgblack@eecs.umich.edu            for conf in configs:
697435Sgblack@eecs.umich.edu                name = '%s.%s.%s.%s.%s.%s' % (conf, bench, dma, speed, cache,
707435Sgblack@eecs.umich.edu                                              cpt)
717435Sgblack@eecs.umich.edu                run = info.source.allRunNames[name]
727435Sgblack@eecs.umich.edu                info.display_run = run.run;
737435Sgblack@eecs.umich.edu                val = float(value)
747435Sgblack@eecs.umich.edu                if val == 1e300*1e300:
757435Sgblack@eecs.umich.edu                    print >>f, 0.0,
767435Sgblack@eecs.umich.edu                else:
777435Sgblack@eecs.umich.edu                    print >>f, "%f" % val,
787435Sgblack@eecs.umich.edu            print >>f
797435Sgblack@eecs.umich.edu        f.close()
807435Sgblack@eecs.umich.edu
817435Sgblack@eecs.umich.edudef printdata(runs, value, invert = False):
827435Sgblack@eecs.umich.edu    import info
837435Sgblack@eecs.umich.edu    for run in runs:
847435Sgblack@eecs.umich.edu        info.display_run = run.run;
857435Sgblack@eecs.umich.edu        val = float(value)
867435Sgblack@eecs.umich.edu        printval(run.name, val)
877435Sgblack@eecs.umich.edu
887435Sgblack@eecs.umich.educlass CommandException(Exception):
897435Sgblack@eecs.umich.edu    pass
907435Sgblack@eecs.umich.edu
917435Sgblack@eecs.umich.edudef commands(options, command, args):
927435Sgblack@eecs.umich.edu    if command == 'database':
937435Sgblack@eecs.umich.edu        if len(args) == 0: raise CommandException
947435Sgblack@eecs.umich.edu
957435Sgblack@eecs.umich.edu        import dbinit
967435Sgblack@eecs.umich.edu        mydb = dbinit.MyDB(options)
977435Sgblack@eecs.umich.edu
987435Sgblack@eecs.umich.edu        if args[0] == 'drop':
997435Sgblack@eecs.umich.edu            if len(args) > 2: raise CommandException
1007435Sgblack@eecs.umich.edu            mydb.admin()
1017435Sgblack@eecs.umich.edu            mydb.drop()
1027435Sgblack@eecs.umich.edu            if len(args) == 2 and args[1] == 'init':
1037435Sgblack@eecs.umich.edu                mydb.create()
1047435Sgblack@eecs.umich.edu                mydb.connect()
1057435Sgblack@eecs.umich.edu                mydb.populate()
1067435Sgblack@eecs.umich.edu            mydb.close()
1077435Sgblack@eecs.umich.edu            return
1087435Sgblack@eecs.umich.edu
1097435Sgblack@eecs.umich.edu        if args[0] == 'init':
1107435Sgblack@eecs.umich.edu            if len(args) > 1: raise CommandException
1117435Sgblack@eecs.umich.edu            mydb.admin()
1127435Sgblack@eecs.umich.edu            mydb.create()
1137435Sgblack@eecs.umich.edu            mydb.connect()
1147435Sgblack@eecs.umich.edu            mydb.populate()
1157435Sgblack@eecs.umich.edu            mydb.close()
1167435Sgblack@eecs.umich.edu            return
1177435Sgblack@eecs.umich.edu
1187435Sgblack@eecs.umich.edu        if args[0] == 'clean':
1197435Sgblack@eecs.umich.edu            if len(args) > 1: raise CommandException
1207435Sgblack@eecs.umich.edu            mydb.connect()
1217435Sgblack@eecs.umich.edu            mydb.clean()
1227435Sgblack@eecs.umich.edu            return
1237435Sgblack@eecs.umich.edu
1247435Sgblack@eecs.umich.edu        raise CommandException
1257435Sgblack@eecs.umich.edu
1267435Sgblack@eecs.umich.edu    import db, info
1277435Sgblack@eecs.umich.edu    info.source = db.Database()
1287435Sgblack@eecs.umich.edu    info.source.host = options.host
1297435Sgblack@eecs.umich.edu    info.source.db = options.db
1307435Sgblack@eecs.umich.edu    info.source.passwd = options.passwd
1317435Sgblack@eecs.umich.edu    info.source.user = options.user
1327435Sgblack@eecs.umich.edu    info.source.connect()
1337435Sgblack@eecs.umich.edu    info.source.update_dict(globals())
1347435Sgblack@eecs.umich.edu
1357435Sgblack@eecs.umich.edu    system = info.source.__dict__[options.system]
1367435Sgblack@eecs.umich.edu
1377435Sgblack@eecs.umich.edu    if type(options.get) is str:
1387435Sgblack@eecs.umich.edu        info.source.get = options.get
1397435Sgblack@eecs.umich.edu
1407435Sgblack@eecs.umich.edu    if options.runs is None:
1417435Sgblack@eecs.umich.edu        runs = info.source.allRuns
1427435Sgblack@eecs.umich.edu    else:
1437435Sgblack@eecs.umich.edu        rx = re.compile(options.runs)
1447435Sgblack@eecs.umich.edu        runs = []
1457435Sgblack@eecs.umich.edu        for run in info.source.allRuns:
1467435Sgblack@eecs.umich.edu            if rx.match(run.name):
1477435Sgblack@eecs.umich.edu                runs.append(run)
1487435Sgblack@eecs.umich.edu
1497435Sgblack@eecs.umich.edu    info.display_run = runs[0].run
1507435Sgblack@eecs.umich.edu
1517435Sgblack@eecs.umich.edu    if command == 'runs':
1527435Sgblack@eecs.umich.edu        user = None
1537435Sgblack@eecs.umich.edu        opts, args = getopts(args, '-u')
1547435Sgblack@eecs.umich.edu        if len(args):
1557435Sgblack@eecs.umich.edu            raise CommandException
1567435Sgblack@eecs.umich.edu        for o,a in opts:
1577435Sgblack@eecs.umich.edu            if o == '-u':
1587435Sgblack@eecs.umich.edu                user = a
1597435Sgblack@eecs.umich.edu        info.source.listRuns(user)
1607435Sgblack@eecs.umich.edu        return
1617435Sgblack@eecs.umich.edu
1627435Sgblack@eecs.umich.edu    if command == 'stats':
1637435Sgblack@eecs.umich.edu        if len(args) == 0:
1647435Sgblack@eecs.umich.edu            info.source.listStats()
1657435Sgblack@eecs.umich.edu        elif len(args) == 1:
1667435Sgblack@eecs.umich.edu            info.source.listStats(args[0])
1677435Sgblack@eecs.umich.edu        else:
1687435Sgblack@eecs.umich.edu            raise CommandException
1697435Sgblack@eecs.umich.edu
1707435Sgblack@eecs.umich.edu        return
1717435Sgblack@eecs.umich.edu
1727435Sgblack@eecs.umich.edu    if command == 'stat':
1737435Sgblack@eecs.umich.edu        if len(args) != 1:
1747435Sgblack@eecs.umich.edu            raise CommandException
1757435Sgblack@eecs.umich.edu
1767435Sgblack@eecs.umich.edu        stats = info.source.getStat(args[0])
1777435Sgblack@eecs.umich.edu        for stat in stats:
1787435Sgblack@eecs.umich.edu            if options.graph:
1797435Sgblack@eecs.umich.edu                graphdata(runs, stat.name, stat.name, stat)
1807435Sgblack@eecs.umich.edu            else:
1817435Sgblack@eecs.umich.edu                print stat.name
1827435Sgblack@eecs.umich.edu                printdata(runs, stat)
1837435Sgblack@eecs.umich.edu        return
1847435Sgblack@eecs.umich.edu
1857435Sgblack@eecs.umich.edu    if command == 'bins':
1867435Sgblack@eecs.umich.edu        if len(args) == 0:
1877435Sgblack@eecs.umich.edu            info.source.listBins()
1887435Sgblack@eecs.umich.edu        elif len(args) == 1:
1897435Sgblack@eecs.umich.edu            info.source.listBins(args[0])
1907435Sgblack@eecs.umich.edu        else:
1917435Sgblack@eecs.umich.edu            raise CommandException
1927435Sgblack@eecs.umich.edu
1937435Sgblack@eecs.umich.edu        return
1947435Sgblack@eecs.umich.edu
1957435Sgblack@eecs.umich.edu    if command == 'formulas':
1967435Sgblack@eecs.umich.edu        if len(args) == 0:
1977435Sgblack@eecs.umich.edu            info.source.listFormulas()
1987435Sgblack@eecs.umich.edu        elif len(args) == 1:
1997435Sgblack@eecs.umich.edu            info.source.listFormulas(args[0])
2007435Sgblack@eecs.umich.edu        else:
2017435Sgblack@eecs.umich.edu            raise CommandException
2027435Sgblack@eecs.umich.edu
2037435Sgblack@eecs.umich.edu        return
2047435Sgblack@eecs.umich.edu
2057435Sgblack@eecs.umich.edu    if command == 'samples':
2067435Sgblack@eecs.umich.edu        if len(args):
2077435Sgblack@eecs.umich.edu            raise CommandException
2087435Sgblack@eecs.umich.edu
2097435Sgblack@eecs.umich.edu        info.source.listTicks(runs)
2107435Sgblack@eecs.umich.edu        return
2117435Sgblack@eecs.umich.edu
2127435Sgblack@eecs.umich.edu    if len(args):
2137435Sgblack@eecs.umich.edu        raise CommandException
2147435Sgblack@eecs.umich.edu
2157435Sgblack@eecs.umich.edu    if command == 'usertime':
2167435Sgblack@eecs.umich.edu        import copy
2177435Sgblack@eecs.umich.edu        kernel = copy.copy(system.full_cpu.numCycles)
2187435Sgblack@eecs.umich.edu        kernel.bins = 'kernel'
2197435Sgblack@eecs.umich.edu
2207435Sgblack@eecs.umich.edu        user = copy.copy(system.full_cpu.numCycles)
2217435Sgblack@eecs.umich.edu        user.bins = 'user'
2227435Sgblack@eecs.umich.edu
2237435Sgblack@eecs.umich.edu        if options.graph:
2247435Sgblack@eecs.umich.edu            graphdata(runs, 'usertime', 'User Fraction',
2257435Sgblack@eecs.umich.edu                      user / system.full_cpu.numCycles)
2267435Sgblack@eecs.umich.edu        else:
2277435Sgblack@eecs.umich.edu            printdata(runs, user / system.full_cpu.numCycles)
2287435Sgblack@eecs.umich.edu        return
2297435Sgblack@eecs.umich.edu
2307435Sgblack@eecs.umich.edu    if command == 'ticks':
2317435Sgblack@eecs.umich.edu        if options.binned:
2327435Sgblack@eecs.umich.edu            print 'kernel ticks'
2337435Sgblack@eecs.umich.edu            system.full_cpu.numCycles.bins = 'kernel'
2347435Sgblack@eecs.umich.edu            printdata(runs, system.full_cpu.numCycles)
2357435Sgblack@eecs.umich.edu
2367435Sgblack@eecs.umich.edu            print 'idle ticks'
2377435Sgblack@eecs.umich.edu            system.full_cpu.numCycles.bins = 'idle'
2387435Sgblack@eecs.umich.edu            printdata(runs, system.full_cpu.numCycles)
2397435Sgblack@eecs.umich.edu
2407435Sgblack@eecs.umich.edu            print 'user ticks'
2417435Sgblack@eecs.umich.edu            system.full_cpu.numCycles.bins = 'user'
2427435Sgblack@eecs.umich.edu            printdata(runs, system.full_cpu.numCycles)
2437435Sgblack@eecs.umich.edu
2447435Sgblack@eecs.umich.edu            print 'total ticks'
2457435Sgblack@eecs.umich.edu
2467435Sgblack@eecs.umich.edu        system.full_cpu.numCycles.bins = None
2477435Sgblack@eecs.umich.edu        printdata(runs, system.full_cpu.numCycles)
2487435Sgblack@eecs.umich.edu        return
2497435Sgblack@eecs.umich.edu
2507435Sgblack@eecs.umich.edu    if command == 'packets':
2517435Sgblack@eecs.umich.edu        packets = system.tsunami.etherdev.rxPackets
2527435Sgblack@eecs.umich.edu        if options.graph:
2537435Sgblack@eecs.umich.edu            graphdata(runs, 'packets', 'Packets', packets)
2547435Sgblack@eecs.umich.edu        else:
2557435Sgblack@eecs.umich.edu            printdata(runs, packets)
2567435Sgblack@eecs.umich.edu        return
2577435Sgblack@eecs.umich.edu
2587435Sgblack@eecs.umich.edu    if command == 'ppt' or command == 'tpp':
2597435Sgblack@eecs.umich.edu        ppt = system.tsunami.etherdev.rxPackets / sim_ticks
2607435Sgblack@eecs.umich.edu        printdata(runs, ppt, command == 'tpp')
2617435Sgblack@eecs.umich.edu        return
2627435Sgblack@eecs.umich.edu
2637435Sgblack@eecs.umich.edu    if command == 'pps':
2647435Sgblack@eecs.umich.edu        pps = system.tsunami.etherdev.rxPackets / sim_seconds
2657435Sgblack@eecs.umich.edu        if options.graph:
2667435Sgblack@eecs.umich.edu            graphdata(runs, 'pps', 'Packets/s', pps)
2677435Sgblack@eecs.umich.edu        else:
2687435Sgblack@eecs.umich.edu            printdata(runs, pps)
2697435Sgblack@eecs.umich.edu        return
2707435Sgblack@eecs.umich.edu
2717435Sgblack@eecs.umich.edu    if command == 'bpt' or command == 'tpb':
2727435Sgblack@eecs.umich.edu        bytes = system.tsunami.etherdev.rxBytes + system.tsunami.etherdev.txBytes
2737435Sgblack@eecs.umich.edu        bpt = bytes / sim_ticks * 8
2747435Sgblack@eecs.umich.edu        if options.graph:
2757435Sgblack@eecs.umich.edu            graphdata(runs, 'bpt', 'bps / Hz', bpt)
2767435Sgblack@eecs.umich.edu        else:
2777435Sgblack@eecs.umich.edu            printdata(runs, bpt, command == 'tpb')
2787435Sgblack@eecs.umich.edu        return
2797435Sgblack@eecs.umich.edu
2807435Sgblack@eecs.umich.edu    if command == 'bptb' or command == 'tpbb':
2817435Sgblack@eecs.umich.edu        bytes = system.tsunami.etherdev.rxBytes + system.tsunami.etherdev.txBytes
2827435Sgblack@eecs.umich.edu
2837435Sgblack@eecs.umich.edu        print 'kernel stats'
2847435Sgblack@eecs.umich.edu        bytes.bins = 'kernel'
2857435Sgblack@eecs.umich.edu        printdata(runs, bytes / ticks)
2867435Sgblack@eecs.umich.edu
2877435Sgblack@eecs.umich.edu        print 'idle stats'
2887435Sgblack@eecs.umich.edu        bytes.bins = 'idle'
2897435Sgblack@eecs.umich.edu        printdata(runs, bytes / ticks)
2907435Sgblack@eecs.umich.edu
2917435Sgblack@eecs.umich.edu        print 'user stats'
2927435Sgblack@eecs.umich.edu        bytes.bins = 'user'
2937435Sgblack@eecs.umich.edu        printdata(runs, bytes / ticks)
2947435Sgblack@eecs.umich.edu
2957435Sgblack@eecs.umich.edu        return
2967435Sgblack@eecs.umich.edu
2977435Sgblack@eecs.umich.edu    if command == 'bytes':
2987435Sgblack@eecs.umich.edu        stat = system.tsunami.etherdev.rxBytes + system.tsunami.etherdev.txBytes
2997435Sgblack@eecs.umich.edu
3007435Sgblack@eecs.umich.edu        if options.binned:
3017435Sgblack@eecs.umich.edu            print '%s kernel stats' % stat.name
3027435Sgblack@eecs.umich.edu            stat.bins = 'kernel'
3037435Sgblack@eecs.umich.edu            printdata(runs, stat)
3047435Sgblack@eecs.umich.edu
3057435Sgblack@eecs.umich.edu            print '%s idle stats' % stat.name
3067435Sgblack@eecs.umich.edu            stat.bins = 'idle'
3077435Sgblack@eecs.umich.edu            printdata(runs, stat)
3087435Sgblack@eecs.umich.edu
3097435Sgblack@eecs.umich.edu            print '%s user stats' % stat.name
3107435Sgblack@eecs.umich.edu            stat.bins = 'user'
3117435Sgblack@eecs.umich.edu            printdata(runs, stat)
3127435Sgblack@eecs.umich.edu
3137435Sgblack@eecs.umich.edu            print '%s total stats' % stat.name
3147435Sgblack@eecs.umich.edu            stat.bins = None
3157435Sgblack@eecs.umich.edu
3167435Sgblack@eecs.umich.edu        printdata(runs, stat)
3177435Sgblack@eecs.umich.edu        return
3187435Sgblack@eecs.umich.edu
3197435Sgblack@eecs.umich.edu    if command == 'rxbps':
3207435Sgblack@eecs.umich.edu        gbps = system.tsunami.etherdev.rxBandwidth / 1e9
3217435Sgblack@eecs.umich.edu        if options.graph:
3227435Sgblack@eecs.umich.edu            graphdata(runs, 'rxbps', 'Bandwidth (Gbps)',  gbps)
3237435Sgblack@eecs.umich.edu        else:
3247435Sgblack@eecs.umich.edu            printdata(runs, gbps)
3257435Sgblack@eecs.umich.edu        return
3267435Sgblack@eecs.umich.edu
3277435Sgblack@eecs.umich.edu    if command == 'txbps':
3287435Sgblack@eecs.umich.edu        gbps = system.tsunami.etherdev.txBandwidth / 1e9
3297435Sgblack@eecs.umich.edu        if options.graph:
3307435Sgblack@eecs.umich.edu            graphdata(runs, 'txbps', 'Bandwidth (Gbps)',  gbps)
3317435Sgblack@eecs.umich.edu        else:
3327435Sgblack@eecs.umich.edu            printdata(runs, gbps)
3337435Sgblack@eecs.umich.edu        return
3347435Sgblack@eecs.umich.edu
3357435Sgblack@eecs.umich.edu    if command == 'bps':
3367435Sgblack@eecs.umich.edu        rxbps = system.tsunami.etherdev.rxBandwidth
3377435Sgblack@eecs.umich.edu        txbps = system.tsunami.etherdev.txBandwidth
3387435Sgblack@eecs.umich.edu        gbps = (rxbps + txbps) / 1e9
3397435Sgblack@eecs.umich.edu        if options.graph:
3407435Sgblack@eecs.umich.edu            graphdata(runs, 'bps', 'Bandwidth (Gbps)',  gbps)
3417435Sgblack@eecs.umich.edu        else:
3427435Sgblack@eecs.umich.edu            printdata(runs, gbps)
3437435Sgblack@eecs.umich.edu        return
3447435Sgblack@eecs.umich.edu
3457435Sgblack@eecs.umich.edu    if command == 'misses':
3467435Sgblack@eecs.umich.edu        stat = system.L2.overall_mshr_misses
3477435Sgblack@eecs.umich.edu        if options.binned:
3487435Sgblack@eecs.umich.edu            print '%s kernel stats' % stat.name
3497435Sgblack@eecs.umich.edu            stat.bins = 'kernel'
3507435Sgblack@eecs.umich.edu            printdata(runs, stat)
3517435Sgblack@eecs.umich.edu
3527435Sgblack@eecs.umich.edu            print '%s idle stats' % stat.name
3537435Sgblack@eecs.umich.edu            stat.bins = 'idle'
3547435Sgblack@eecs.umich.edu            printdata(runs, stat)
3557435Sgblack@eecs.umich.edu
3567435Sgblack@eecs.umich.edu            print '%s user stats' % stat.name
3577435Sgblack@eecs.umich.edu            stat.bins = 'user'
3587435Sgblack@eecs.umich.edu            printdata(runs, stat)
3597435Sgblack@eecs.umich.edu
3607435Sgblack@eecs.umich.edu            print '%s total stats' % stat.name
3617435Sgblack@eecs.umich.edu
3627435Sgblack@eecs.umich.edu        stat.bins = None
3637435Sgblack@eecs.umich.edu        if options.graph:
3647435Sgblack@eecs.umich.edu            graphdata(runs, 'misses', 'Overall MSHR Misses', stat)
3657435Sgblack@eecs.umich.edu        else:
3667435Sgblack@eecs.umich.edu            printdata(runs, stat)
3677435Sgblack@eecs.umich.edu        return
3687435Sgblack@eecs.umich.edu
3697435Sgblack@eecs.umich.edu    if command == 'mpkb':
3707435Sgblack@eecs.umich.edu        misses = system.L2.overall_mshr_misses
3717435Sgblack@eecs.umich.edu        rxbytes = system.tsunami.etherdev.rxBytes
3727435Sgblack@eecs.umich.edu        txbytes = system.tsunami.etherdev.txBytes
3737435Sgblack@eecs.umich.edu
3747435Sgblack@eecs.umich.edu        if options.binned:
3757435Sgblack@eecs.umich.edu            print 'mpkb kernel stats'
3767435Sgblack@eecs.umich.edu            misses.bins = 'kernel'
3777435Sgblack@eecs.umich.edu            mpkb = misses / ((rxbytes + txbytes) / 1024)
3787435Sgblack@eecs.umich.edu            printdata(runs, mpkb)
3797435Sgblack@eecs.umich.edu
3807435Sgblack@eecs.umich.edu            print 'mpkb idle stats'
3817435Sgblack@eecs.umich.edu            misses.bins = 'idle'
3827435Sgblack@eecs.umich.edu            mpkb = misses / ((rxbytes + txbytes) / 1024)
3837435Sgblack@eecs.umich.edu            printdata(runs, mpkb)
3847435Sgblack@eecs.umich.edu
3857435Sgblack@eecs.umich.edu            print 'mpkb user stats'
3867435Sgblack@eecs.umich.edu            misses.bins = 'user'
3877435Sgblack@eecs.umich.edu            mpkb = misses / ((rxbytes + txbytes) / 1024)
3887435Sgblack@eecs.umich.edu            printdata(runs, mpkb)
3897435Sgblack@eecs.umich.edu
3907435Sgblack@eecs.umich.edu            print 'mpkb total stats'
3917435Sgblack@eecs.umich.edu
3927435Sgblack@eecs.umich.edu        mpkb = misses / ((rxbytes + txbytes) / 1024)
3937435Sgblack@eecs.umich.edu        misses.bins = None
3947435Sgblack@eecs.umich.edu        if options.graph:
3957435Sgblack@eecs.umich.edu            graphdata(runs, 'mpkb', 'Misses / KB',  mpkb)
3967435Sgblack@eecs.umich.edu        else:
3977435Sgblack@eecs.umich.edu            printdata(runs, mpkb)
3987435Sgblack@eecs.umich.edu        return
3997435Sgblack@eecs.umich.edu
4007435Sgblack@eecs.umich.edu    if command == 'execute':
4017435Sgblack@eecs.umich.edu        printdata(runs, system.full_cpu.ISSUE__count)
4027435Sgblack@eecs.umich.edu        return
4037435Sgblack@eecs.umich.edu
4047435Sgblack@eecs.umich.edu    if command == 'commit':
4057435Sgblack@eecs.umich.edu        printdata(runs, system.full_cpu.COM__count)
4067435Sgblack@eecs.umich.edu        return
4077435Sgblack@eecs.umich.edu
4087435Sgblack@eecs.umich.edu    if command == 'fetch':
4097435Sgblack@eecs.umich.edu        printdata(runs, system.full_cpu.FETCH__count)
4107435Sgblack@eecs.umich.edu        return
4117435Sgblack@eecs.umich.edu
4127435Sgblack@eecs.umich.edu    if command == 'bpp':
4137435Sgblack@eecs.umich.edu        ed = system.tsunami.etherdev
4147435Sgblack@eecs.umich.edu        bpp = (ed.rxBytes + ed.txBytes) / (ed.rxPackets + ed.txPackets)
4157435Sgblack@eecs.umich.edu        if options.graph:
4167435Sgblack@eecs.umich.edu            graphdata(runs, 'bpp', 'Bytes / Packet',  bpp)
4177435Sgblack@eecs.umich.edu        else:
4187435Sgblack@eecs.umich.edu            printdata(runs, bpp)
4197435Sgblack@eecs.umich.edu        return
4207435Sgblack@eecs.umich.edu
4217435Sgblack@eecs.umich.edu    if command == 'rxbpp':
4227435Sgblack@eecs.umich.edu        bpp = system.tsunami.etherdev.rxBytes / system.tsunami.etherdev.rxPackets
4237435Sgblack@eecs.umich.edu        if options.graph:
4247435Sgblack@eecs.umich.edu            graphdata(runs, 'rxbpp', 'Receive Bytes / Packet',  bpp)
4257435Sgblack@eecs.umich.edu        else:
4267435Sgblack@eecs.umich.edu            printdata(runs, bpp)
4277435Sgblack@eecs.umich.edu        return
4287435Sgblack@eecs.umich.edu
4297435Sgblack@eecs.umich.edu    if command == 'txbpp':
4307435Sgblack@eecs.umich.edu        bpp = system.tsunami.etherdev.txBytes / system.tsunami.etherdev.txPackets
4317435Sgblack@eecs.umich.edu        if options.graph:
4327435Sgblack@eecs.umich.edu            graphdata(runs, 'txbpp', 'Transmit Bytes / Packet',  bpp)
4337435Sgblack@eecs.umich.edu        else:
4347435Sgblack@eecs.umich.edu            printdata(runs, bpp)
4357435Sgblack@eecs.umich.edu        return
4367435Sgblack@eecs.umich.edu
4377435Sgblack@eecs.umich.edu    if command == 'rtp':
4387435Sgblack@eecs.umich.edu        rtp = system.tsunami.etherdev.rxPackets / system.tsunami.etherdev.txPackets
4397435Sgblack@eecs.umich.edu        if options.graph:
4407435Sgblack@eecs.umich.edu            graphdata(runs, 'rtp', 'rxPackets / txPackets',  rtp)
4417435Sgblack@eecs.umich.edu        else:
4427435Sgblack@eecs.umich.edu            printdata(runs, rtp)
4437435Sgblack@eecs.umich.edu        return
4447435Sgblack@eecs.umich.edu
4457435Sgblack@eecs.umich.edu    if command == 'rtb':
4467435Sgblack@eecs.umich.edu        rtb = system.tsunami.etherdev.rxBytes / system.tsunami.etherdev.txBytes
4477435Sgblack@eecs.umich.edu        if options.graph:
4487435Sgblack@eecs.umich.edu            graphdata(runs, 'rtb', 'rxBytes / txBytes',  rtb)
4497435Sgblack@eecs.umich.edu        else:
4507435Sgblack@eecs.umich.edu            printdata(runs, rtb)
4517435Sgblack@eecs.umich.edu        return
4527435Sgblack@eecs.umich.edu
4537435Sgblack@eecs.umich.edu    raise CommandException
4547435Sgblack@eecs.umich.edu
4557435Sgblack@eecs.umich.edu
4567435Sgblack@eecs.umich.educlass Options: pass
4577435Sgblack@eecs.umich.edu
4587435Sgblack@eecs.umich.eduif __name__ == '__main__':
4597435Sgblack@eecs.umich.edu    import getpass
4607435Sgblack@eecs.umich.edu
4617435Sgblack@eecs.umich.edu    options = Options()
4627435Sgblack@eecs.umich.edu    options.host = 'zizzer.pool'
4637435Sgblack@eecs.umich.edu    options.db = None
4647435Sgblack@eecs.umich.edu    options.passwd = ''
4657435Sgblack@eecs.umich.edu    options.user = getpass.getuser()
4667435Sgblack@eecs.umich.edu    options.runs = None
4677435Sgblack@eecs.umich.edu    options.system = 'client'
4687435Sgblack@eecs.umich.edu    options.get = None
4697435Sgblack@eecs.umich.edu    options.binned = False
4707435Sgblack@eecs.umich.edu    options.graph = False
4717435Sgblack@eecs.umich.edu
4727435Sgblack@eecs.umich.edu    opts, args = getopts(sys.argv[1:], '-BEFGd:g:h:pr:s:u:')
4737435Sgblack@eecs.umich.edu    for o,a in opts:
4747435Sgblack@eecs.umich.edu        if o == '-B':
4757435Sgblack@eecs.umich.edu            options.binned = True
4767435Sgblack@eecs.umich.edu        if o == '-E':
4777435Sgblack@eecs.umich.edu            printval.mode = 'E'
4787435Sgblack@eecs.umich.edu        if o == '-F':
4797435Sgblack@eecs.umich.edu            printval.mode = 'F'
4807435Sgblack@eecs.umich.edu        if o == '-G':
4817435Sgblack@eecs.umich.edu            options.graph = True;
4827435Sgblack@eecs.umich.edu        if o == '-d':
4837435Sgblack@eecs.umich.edu            options.db = a
4847435Sgblack@eecs.umich.edu        if o == '-g':
4857435Sgblack@eecs.umich.edu            options.get = a
4867435Sgblack@eecs.umich.edu        if o == '-h':
4877435Sgblack@eecs.umich.edu            options.host = a
4887435Sgblack@eecs.umich.edu        if o == '-p':
4897435Sgblack@eecs.umich.edu            options.passwd = getpass.getpass()
4907435Sgblack@eecs.umich.edu        if o == '-r':
4917435Sgblack@eecs.umich.edu            options.runs = a
4927435Sgblack@eecs.umich.edu        if o == '-u':
4937435Sgblack@eecs.umich.edu            options.user = a
4947435Sgblack@eecs.umich.edu        if o == '-s':
4957435Sgblack@eecs.umich.edu            options.system = a
4967435Sgblack@eecs.umich.edu
4977435Sgblack@eecs.umich.edu    if len(args) == 0:
4987435Sgblack@eecs.umich.edu        usage()
4997435Sgblack@eecs.umich.edu
5007435Sgblack@eecs.umich.edu    command = args[0]
5017435Sgblack@eecs.umich.edu    args = args[1:]
5027435Sgblack@eecs.umich.edu
5037435Sgblack@eecs.umich.edu    try:
5047435Sgblack@eecs.umich.edu        commands(options, command, args)
5057435Sgblack@eecs.umich.edu    except CommandException:
5067435Sgblack@eecs.umich.edu        usage()
5077435Sgblack@eecs.umich.edu