stats.py revision 1076
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
421049Sbinkertn@umich.edudef graphdata(runs, tag, label, value):
431049Sbinkertn@umich.edu    import info
441049Sbinkertn@umich.edu    configs = ['std', 'csa', 'ht1', 'ht4', 'htx', 'ocm', 'occ', 'ocp' ]
451049Sbinkertn@umich.edu    benchmarks = [ 'm', 's' ]
461049Sbinkertn@umich.edu    dmas = [ 'x', 'd', 'b' ]
471049Sbinkertn@umich.edu    caches = [ '1', '2', '3', '4', '5' ]
481049Sbinkertn@umich.edu    systems = [ 'M' ]
491049Sbinkertn@umich.edu    checkpoints = [ '1' ]
501049Sbinkertn@umich.edu
511049Sbinkertn@umich.edu    names = []
521049Sbinkertn@umich.edu    for bench in benchmarks:
531049Sbinkertn@umich.edu        for dma in dmas:
541049Sbinkertn@umich.edu            for cache in caches:
551049Sbinkertn@umich.edu                for sys in systems:
561049Sbinkertn@umich.edu                    for cpt in checkpoints:
571049Sbinkertn@umich.edu                        names.append([bench, dma, cache, sys, cpt])
581049Sbinkertn@umich.edu
591049Sbinkertn@umich.edu    for bench,dma,cache,sys,cpt in names:
601049Sbinkertn@umich.edu        base = '%s.%s.%s.%s.%s' % (bench, dma, cache, sys, cpt)
611076Sbinkertn@umich.edu        fname = '/n/ziff/z/binkertn/graph/test0/data/%s.%s.dat' % (tag, base)
621049Sbinkertn@umich.edu        f = open(fname, 'w')
631049Sbinkertn@umich.edu        print >>f, '#set TITLE = %s' % base
641049Sbinkertn@umich.edu        print >>f, '#set xlbl = Configuration'
651049Sbinkertn@umich.edu        print >>f, '#set ylbl = %s' % label
661049Sbinkertn@umich.edu        print >>f, '#set sublabels = %s' % ' '.join(configs)
671049Sbinkertn@umich.edu
681049Sbinkertn@umich.edu        for speed,freq in zip(['s', 'q'],['4GHz','10GHz']):
691049Sbinkertn@umich.edu            print >>f, '"%s"' % freq,
701049Sbinkertn@umich.edu            for conf in configs:
711049Sbinkertn@umich.edu                name = '%s.%s.%s.%s.%s.%s.%s' % (conf, bench, dma, speed,
721049Sbinkertn@umich.edu                                                 cache, sys, cpt)
731049Sbinkertn@umich.edu                run = info.source.allRunNames[name]
741049Sbinkertn@umich.edu                info.display_run = run.run;
751049Sbinkertn@umich.edu                val = float(value)
761049Sbinkertn@umich.edu                if val == 1e300*1e300:
771049Sbinkertn@umich.edu                    print >>f, 0.0,
781049Sbinkertn@umich.edu                else:
791049Sbinkertn@umich.edu                    print >>f, "%f" % val,
801049Sbinkertn@umich.edu            print >>f
811049Sbinkertn@umich.edu        f.close()
821049Sbinkertn@umich.edu
831049Sbinkertn@umich.edudef printdata(runs, value, invert = False):
841049Sbinkertn@umich.edu    import info
851049Sbinkertn@umich.edu    for run in runs:
861049Sbinkertn@umich.edu        info.display_run = run.run;
871049Sbinkertn@umich.edu        val = float(value)
881049Sbinkertn@umich.edu        printval(run.name, val)
891049Sbinkertn@umich.edu
901049Sbinkertn@umich.educlass CommandException(Exception):
911049Sbinkertn@umich.edu    pass
921049Sbinkertn@umich.edu
931049Sbinkertn@umich.edudef commands(options, command, args):
941049Sbinkertn@umich.edu    if command == 'database':
951049Sbinkertn@umich.edu        if len(args) == 0: raise CommandException
961049Sbinkertn@umich.edu
971049Sbinkertn@umich.edu        import dbinit
981049Sbinkertn@umich.edu        mydb = dbinit.MyDB(options)
991049Sbinkertn@umich.edu
1001049Sbinkertn@umich.edu        if args[0] == 'drop':
1011049Sbinkertn@umich.edu            if len(args) > 2: raise CommandException
1021049Sbinkertn@umich.edu            mydb.admin()
1031049Sbinkertn@umich.edu            mydb.drop()
1041049Sbinkertn@umich.edu            if len(args) == 2 and args[1] == 'init':
1051049Sbinkertn@umich.edu                mydb.create()
1061049Sbinkertn@umich.edu                mydb.connect()
1071049Sbinkertn@umich.edu                mydb.populate()
1081049Sbinkertn@umich.edu            mydb.close()
1091049Sbinkertn@umich.edu            return
1101049Sbinkertn@umich.edu
1111049Sbinkertn@umich.edu        if args[0] == 'init':
1121049Sbinkertn@umich.edu            if len(args) > 1: raise CommandException
1131049Sbinkertn@umich.edu            mydb.admin()
1141049Sbinkertn@umich.edu            mydb.create()
1151049Sbinkertn@umich.edu            mydb.connect()
1161049Sbinkertn@umich.edu            mydb.populate()
1171049Sbinkertn@umich.edu            mydb.close()
1181049Sbinkertn@umich.edu            return
1191049Sbinkertn@umich.edu
1201049Sbinkertn@umich.edu        if args[0] == 'clean':
1211049Sbinkertn@umich.edu            if len(args) > 1: raise CommandException
1221049Sbinkertn@umich.edu            mydb.connect()
1231049Sbinkertn@umich.edu            mydb.clean()
1241049Sbinkertn@umich.edu            return
1251049Sbinkertn@umich.edu
1261049Sbinkertn@umich.edu        raise CommandException
1271049Sbinkertn@umich.edu
1281049Sbinkertn@umich.edu    import db, info
1291049Sbinkertn@umich.edu    info.source = db.Database()
1301049Sbinkertn@umich.edu    info.source.host = options.host
1311049Sbinkertn@umich.edu    info.source.db = options.db
1321049Sbinkertn@umich.edu    info.source.passwd = options.passwd
1331049Sbinkertn@umich.edu    info.source.user = options.user
1341049Sbinkertn@umich.edu    info.source.connect()
1351049Sbinkertn@umich.edu    info.source.update_dict(globals())
1361049Sbinkertn@umich.edu
1371049Sbinkertn@umich.edu    system = info.source.__dict__[options.system]
1381049Sbinkertn@umich.edu
1391049Sbinkertn@umich.edu    if type(options.get) is str:
1401049Sbinkertn@umich.edu        info.source.get = options.get
1411049Sbinkertn@umich.edu
1421049Sbinkertn@umich.edu    if options.runs is None:
1431049Sbinkertn@umich.edu        runs = info.source.allRuns
1441049Sbinkertn@umich.edu    else:
1451049Sbinkertn@umich.edu        rx = re.compile(options.runs)
1461049Sbinkertn@umich.edu        runs = []
1471049Sbinkertn@umich.edu        for run in info.source.allRuns:
1481049Sbinkertn@umich.edu            if rx.match(run.name):
1491049Sbinkertn@umich.edu                runs.append(run)
1501049Sbinkertn@umich.edu
1511049Sbinkertn@umich.edu    info.display_run = runs[0].run
1521049Sbinkertn@umich.edu
1531049Sbinkertn@umich.edu    if command == 'runs':
1541049Sbinkertn@umich.edu        user = None
1551049Sbinkertn@umich.edu        opts, args = getopts(args, '-u')
1561049Sbinkertn@umich.edu        if len(args):
1571049Sbinkertn@umich.edu            raise CommandException
1581049Sbinkertn@umich.edu        for o,a in opts:
1591049Sbinkertn@umich.edu            if o == '-u':
1601049Sbinkertn@umich.edu                user = a
1611049Sbinkertn@umich.edu        info.source.listRuns(user)
1621049Sbinkertn@umich.edu        return
1631049Sbinkertn@umich.edu
1641049Sbinkertn@umich.edu    if command == 'stats':
1651049Sbinkertn@umich.edu        if len(args) == 0:
1661049Sbinkertn@umich.edu            info.source.listStats()
1671049Sbinkertn@umich.edu        elif len(args) == 1:
1681049Sbinkertn@umich.edu            info.source.listStats(args[0])
1691049Sbinkertn@umich.edu        else:
1701049Sbinkertn@umich.edu            raise CommandException
1711049Sbinkertn@umich.edu
1721049Sbinkertn@umich.edu        return
1731049Sbinkertn@umich.edu
1741049Sbinkertn@umich.edu    if command == 'stat':
1751049Sbinkertn@umich.edu        if len(args) != 1:
1761049Sbinkertn@umich.edu            raise CommandException
1771049Sbinkertn@umich.edu
1781049Sbinkertn@umich.edu        stats = info.source.getStat(args[0])
1791049Sbinkertn@umich.edu        for stat in stats:
1801076Sbinkertn@umich.edu            if options.graph:
1811049Sbinkertn@umich.edu                graphdata(runs, stat.name, stat.name, stat)
1821049Sbinkertn@umich.edu            else:
1831049Sbinkertn@umich.edu                print stat.name
1841049Sbinkertn@umich.edu                printdata(runs, stat)
1851049Sbinkertn@umich.edu        return
1861049Sbinkertn@umich.edu
1871049Sbinkertn@umich.edu    if command == 'bins':
1881049Sbinkertn@umich.edu        if len(args) == 0:
1891049Sbinkertn@umich.edu            info.source.listBins()
1901049Sbinkertn@umich.edu        elif len(args) == 1:
1911049Sbinkertn@umich.edu            info.source.listBins(args[0])
1921049Sbinkertn@umich.edu        else:
1931049Sbinkertn@umich.edu            raise CommandException
1941049Sbinkertn@umich.edu
1951049Sbinkertn@umich.edu        return
1961049Sbinkertn@umich.edu
1971049Sbinkertn@umich.edu    if command == 'formulas':
1981049Sbinkertn@umich.edu        if len(args) == 0:
1991049Sbinkertn@umich.edu            info.source.listFormulas()
2001049Sbinkertn@umich.edu        elif len(args) == 1:
2011049Sbinkertn@umich.edu            info.source.listFormulas(args[0])
2021049Sbinkertn@umich.edu        else:
2031049Sbinkertn@umich.edu            raise CommandException
2041049Sbinkertn@umich.edu
2051049Sbinkertn@umich.edu        return
2061049Sbinkertn@umich.edu
2071049Sbinkertn@umich.edu    if command == 'samples':
2081049Sbinkertn@umich.edu        if len(args):
2091049Sbinkertn@umich.edu            raise CommandException
2101049Sbinkertn@umich.edu
2111049Sbinkertn@umich.edu        info.source.listTicks(runs)
2121049Sbinkertn@umich.edu        return
2131049Sbinkertn@umich.edu
2141049Sbinkertn@umich.edu    if len(args):
2151049Sbinkertn@umich.edu        raise CommandException
2161049Sbinkertn@umich.edu
2171049Sbinkertn@umich.edu    if command == 'usertime':
2181049Sbinkertn@umich.edu        import copy
2191049Sbinkertn@umich.edu        kernel = copy.copy(system.full_cpu.numCycles)
2201049Sbinkertn@umich.edu        kernel.bins = 'kernel'
2211049Sbinkertn@umich.edu
2221049Sbinkertn@umich.edu        user = copy.copy(system.full_cpu.numCycles)
2231049Sbinkertn@umich.edu        user.bins = 'user'
2241049Sbinkertn@umich.edu
2251076Sbinkertn@umich.edu        if options.graph:
2261049Sbinkertn@umich.edu            graphdata(runs, 'usertime', 'User Fraction',
2271049Sbinkertn@umich.edu                      user / system.full_cpu.numCycles)
2281049Sbinkertn@umich.edu        else:
2291049Sbinkertn@umich.edu            printdata(runs, user / system.full_cpu.numCycles)
2301049Sbinkertn@umich.edu        return
2311049Sbinkertn@umich.edu
2321049Sbinkertn@umich.edu    if command == 'ticks':
2331076Sbinkertn@umich.edu        if options.binned:
2341049Sbinkertn@umich.edu            print 'kernel ticks'
2351049Sbinkertn@umich.edu            system.full_cpu.numCycles.bins = 'kernel'
2361049Sbinkertn@umich.edu            printdata(runs, system.full_cpu.numCycles)
2371049Sbinkertn@umich.edu
2381049Sbinkertn@umich.edu            print 'idle ticks'
2391049Sbinkertn@umich.edu            system.full_cpu.numCycles.bins = 'idle'
2401049Sbinkertn@umich.edu            printdata(runs, system.full_cpu.numCycles)
2411049Sbinkertn@umich.edu
2421049Sbinkertn@umich.edu            print 'user ticks'
2431049Sbinkertn@umich.edu            system.full_cpu.numCycles.bins = 'user'
2441049Sbinkertn@umich.edu            printdata(runs, system.full_cpu.numCycles)
2451049Sbinkertn@umich.edu
2461049Sbinkertn@umich.edu            print 'total ticks'
2471049Sbinkertn@umich.edu
2481049Sbinkertn@umich.edu        system.full_cpu.numCycles.bins = None
2491049Sbinkertn@umich.edu        printdata(runs, system.full_cpu.numCycles)
2501049Sbinkertn@umich.edu        return
2511049Sbinkertn@umich.edu
2521049Sbinkertn@umich.edu    if command == 'packets':
2531049Sbinkertn@umich.edu        packets = system.tsunami.nsgige.rxPackets
2541076Sbinkertn@umich.edu        if options.graph:
2551049Sbinkertn@umich.edu            graphdata(runs, 'packets', 'Packets', packets)
2561049Sbinkertn@umich.edu        else:
2571049Sbinkertn@umich.edu            printdata(runs, packets)
2581049Sbinkertn@umich.edu        return
2591049Sbinkertn@umich.edu
2601049Sbinkertn@umich.edu    if command == 'ppt' or command == 'tpp':
2611049Sbinkertn@umich.edu        ppt = system.tsunami.nsgige.rxPackets / sim_ticks
2621049Sbinkertn@umich.edu        printdata(runs, ppt, command == 'tpp')
2631049Sbinkertn@umich.edu        return
2641049Sbinkertn@umich.edu
2651049Sbinkertn@umich.edu    if command == 'pps':
2661049Sbinkertn@umich.edu        pps = system.tsunami.nsgige.rxPackets / sim_seconds
2671076Sbinkertn@umich.edu        if options.graph:
2681049Sbinkertn@umich.edu            graphdata(runs, 'pps', 'Packets/s', pps)
2691049Sbinkertn@umich.edu        else:
2701049Sbinkertn@umich.edu            printdata(runs, pps)
2711049Sbinkertn@umich.edu        return
2721049Sbinkertn@umich.edu
2731049Sbinkertn@umich.edu    if command == 'bpt' or command == 'tpb':
2741049Sbinkertn@umich.edu        bytes = system.tsunami.nsgige.rxBytes + system.tsunami.nsgige.txBytes
2751049Sbinkertn@umich.edu        bpt = bytes / sim_ticks * 8
2761076Sbinkertn@umich.edu        if options.graph:
2771049Sbinkertn@umich.edu            graphdata(runs, 'bpt', 'bps / Hz', bpt)
2781049Sbinkertn@umich.edu        else:
2791049Sbinkertn@umich.edu            printdata(runs, bpt, command == 'tpb')
2801049Sbinkertn@umich.edu        return
2811049Sbinkertn@umich.edu
2821049Sbinkertn@umich.edu    if command == 'bptb' or command == 'tpbb':
2831049Sbinkertn@umich.edu        bytes = system.tsunami.nsgige.rxBytes + system.tsunami.nsgige.txBytes
2841049Sbinkertn@umich.edu
2851049Sbinkertn@umich.edu        print 'kernel stats'
2861049Sbinkertn@umich.edu        bytes.bins = 'kernel'
2871049Sbinkertn@umich.edu        printdata(runs, bytes / ticks)
2881049Sbinkertn@umich.edu
2891049Sbinkertn@umich.edu        print 'idle stats'
2901049Sbinkertn@umich.edu        bytes.bins = 'idle'
2911049Sbinkertn@umich.edu        printdata(runs, bytes / ticks)
2921049Sbinkertn@umich.edu
2931049Sbinkertn@umich.edu        print 'user stats'
2941049Sbinkertn@umich.edu        bytes.bins = 'user'
2951049Sbinkertn@umich.edu        printdata(runs, bytes / ticks)
2961049Sbinkertn@umich.edu
2971049Sbinkertn@umich.edu        return
2981049Sbinkertn@umich.edu
2991049Sbinkertn@umich.edu    if command == 'bytes':
3001049Sbinkertn@umich.edu        stat = system.tsunami.nsgige.rxBytes + system.tsunami.nsgige.txBytes
3011049Sbinkertn@umich.edu
3021076Sbinkertn@umich.edu        if options.binned:
3031049Sbinkertn@umich.edu            print '%s kernel stats' % stat.name
3041049Sbinkertn@umich.edu            stat.bins = 'kernel'
3051049Sbinkertn@umich.edu            printdata(runs, stat)
3061049Sbinkertn@umich.edu
3071049Sbinkertn@umich.edu            print '%s idle stats' % stat.name
3081049Sbinkertn@umich.edu            stat.bins = 'idle'
3091049Sbinkertn@umich.edu            printdata(runs, stat)
3101049Sbinkertn@umich.edu
3111049Sbinkertn@umich.edu            print '%s user stats' % stat.name
3121049Sbinkertn@umich.edu            stat.bins = 'user'
3131049Sbinkertn@umich.edu            printdata(runs, stat)
3141049Sbinkertn@umich.edu
3151049Sbinkertn@umich.edu            print '%s total stats' % stat.name
3161049Sbinkertn@umich.edu            stat.bins = None
3171049Sbinkertn@umich.edu
3181049Sbinkertn@umich.edu        printdata(runs, stat)
3191049Sbinkertn@umich.edu        return
3201049Sbinkertn@umich.edu
3211049Sbinkertn@umich.edu    if command == 'rxbps':
3221049Sbinkertn@umich.edu        gbps = system.tsunami.nsgige.rxBandwidth / 1e9
3231076Sbinkertn@umich.edu        if options.graph:
3241049Sbinkertn@umich.edu            graphdata(runs, 'rxbps', 'Bandwidth (Gbps)',  gbps)
3251049Sbinkertn@umich.edu        else:
3261049Sbinkertn@umich.edu            printdata(runs, gbps)
3271049Sbinkertn@umich.edu        return
3281049Sbinkertn@umich.edu
3291049Sbinkertn@umich.edu    if command == 'txbps':
3301049Sbinkertn@umich.edu        gbps = system.tsunami.nsgige.txBandwidth / 1e9
3311076Sbinkertn@umich.edu        if options.graph:
3321049Sbinkertn@umich.edu            graphdata(runs, 'txbps', 'Bandwidth (Gbps)',  gbps)
3331049Sbinkertn@umich.edu        else:
3341049Sbinkertn@umich.edu            printdata(runs, gbps)
3351049Sbinkertn@umich.edu        return
3361049Sbinkertn@umich.edu
3371049Sbinkertn@umich.edu    if command == 'bps':
3381049Sbinkertn@umich.edu        rxbps = system.tsunami.nsgige.rxBandwidth
3391049Sbinkertn@umich.edu        txbps = system.tsunami.nsgige.txBandwidth
3401049Sbinkertn@umich.edu        gbps = (rxbps + txbps) / 1e9
3411076Sbinkertn@umich.edu        if options.graph:
3421049Sbinkertn@umich.edu            graphdata(runs, 'bps', 'Bandwidth (Gbps)',  gbps)
3431049Sbinkertn@umich.edu        else:
3441049Sbinkertn@umich.edu            printdata(runs, gbps)
3451049Sbinkertn@umich.edu        return
3461049Sbinkertn@umich.edu
3471049Sbinkertn@umich.edu    if command == 'misses':
3481049Sbinkertn@umich.edu        stat = system.L3.overall_mshr_misses
3491076Sbinkertn@umich.edu        if options.binned:
3501049Sbinkertn@umich.edu            print '%s kernel stats' % stat.name
3511049Sbinkertn@umich.edu            stat.bins = 'kernel'
3521049Sbinkertn@umich.edu            printdata(runs, stat)
3531049Sbinkertn@umich.edu
3541049Sbinkertn@umich.edu            print '%s idle stats' % stat.name
3551049Sbinkertn@umich.edu            stat.bins = 'idle'
3561049Sbinkertn@umich.edu            printdata(runs, stat)
3571049Sbinkertn@umich.edu
3581049Sbinkertn@umich.edu            print '%s user stats' % stat.name
3591049Sbinkertn@umich.edu            stat.bins = 'user'
3601049Sbinkertn@umich.edu            printdata(runs, stat)
3611049Sbinkertn@umich.edu
3621049Sbinkertn@umich.edu            print '%s total stats' % stat.name
3631049Sbinkertn@umich.edu
3641049Sbinkertn@umich.edu        stat.bins = None
3651076Sbinkertn@umich.edu        if options.graph:
3661049Sbinkertn@umich.edu            graphdata(runs, 'misses', 'Overall MSHR Misses', stat)
3671049Sbinkertn@umich.edu        else:
3681049Sbinkertn@umich.edu            printdata(runs, stat)
3691049Sbinkertn@umich.edu        return
3701049Sbinkertn@umich.edu
3711049Sbinkertn@umich.edu    if command == 'mpkb':
3721049Sbinkertn@umich.edu        misses = system.L3.overall_mshr_misses
3731049Sbinkertn@umich.edu        rxbytes = system.tsunami.nsgige.rxBytes
3741049Sbinkertn@umich.edu        txbytes = system.tsunami.nsgige.txBytes
3751049Sbinkertn@umich.edu
3761076Sbinkertn@umich.edu        if options.binned:
3771049Sbinkertn@umich.edu            print 'mpkb kernel stats'
3781049Sbinkertn@umich.edu            misses.bins = 'kernel'
3791049Sbinkertn@umich.edu            mpkb = misses / ((rxbytes + txbytes) / 1024)
3801049Sbinkertn@umich.edu            printdata(runs, mpkb)
3811049Sbinkertn@umich.edu
3821049Sbinkertn@umich.edu            print 'mpkb idle stats'
3831049Sbinkertn@umich.edu            misses.bins = 'idle'
3841049Sbinkertn@umich.edu            mpkb = misses / ((rxbytes + txbytes) / 1024)
3851049Sbinkertn@umich.edu            printdata(runs, mpkb)
3861049Sbinkertn@umich.edu
3871049Sbinkertn@umich.edu            print 'mpkb user stats'
3881049Sbinkertn@umich.edu            misses.bins = 'user'
3891049Sbinkertn@umich.edu            mpkb = misses / ((rxbytes + txbytes) / 1024)
3901049Sbinkertn@umich.edu            printdata(runs, mpkb)
3911049Sbinkertn@umich.edu
3921049Sbinkertn@umich.edu            print 'mpkb total stats'
3931049Sbinkertn@umich.edu
3941049Sbinkertn@umich.edu        mpkb = misses / ((rxbytes + txbytes) / 1024)
3951049Sbinkertn@umich.edu        misses.bins = None
3961076Sbinkertn@umich.edu        if options.graph:
3971049Sbinkertn@umich.edu            graphdata(runs, 'mpkb', 'Misses / KB',  mpkb)
3981049Sbinkertn@umich.edu        else:
3991049Sbinkertn@umich.edu            printdata(runs, mpkb)
4001049Sbinkertn@umich.edu        return
4011049Sbinkertn@umich.edu
4021049Sbinkertn@umich.edu    if command == 'execute':
4031049Sbinkertn@umich.edu        printdata(runs, system.full_cpu.ISSUE__count)
4041049Sbinkertn@umich.edu        return
4051049Sbinkertn@umich.edu
4061049Sbinkertn@umich.edu    if command == 'commit':
4071049Sbinkertn@umich.edu        printdata(runs, system.full_cpu.COM__count)
4081049Sbinkertn@umich.edu        return
4091049Sbinkertn@umich.edu
4101049Sbinkertn@umich.edu    if command == 'fetch':
4111049Sbinkertn@umich.edu        printdata(runs, system.full_cpu.FETCH__count)
4121049Sbinkertn@umich.edu        return
4131049Sbinkertn@umich.edu
4141049Sbinkertn@umich.edu    if command == 'rxbpp':
4151049Sbinkertn@umich.edu        bpp = system.tsunami.nsgige.rxBytes / system.tsunami.nsgige.rxPackets
4161049Sbinkertn@umich.edu        printdata(run, 8 * bpp)
4171049Sbinkertn@umich.edu        return
4181049Sbinkertn@umich.edu
4191049Sbinkertn@umich.edu    if command == 'txbpp':
4201049Sbinkertn@umich.edu        bpp = system.tsunami.nsgige.txBytes / system.tsunami.nsgige.txPackets
4211049Sbinkertn@umich.edu        printdata(run, 8 * bpp)
4221049Sbinkertn@umich.edu        return
4231049Sbinkertn@umich.edu
4241049Sbinkertn@umich.edu    raise CommandException
4251049Sbinkertn@umich.edu
4261049Sbinkertn@umich.edu
4271049Sbinkertn@umich.educlass Options: pass
4281049Sbinkertn@umich.edu
4291049Sbinkertn@umich.eduif __name__ == '__main__':
4301049Sbinkertn@umich.edu    import getpass
4311049Sbinkertn@umich.edu
4321049Sbinkertn@umich.edu    options = Options()
4331049Sbinkertn@umich.edu    options.host = 'zizzer.pool'
4341049Sbinkertn@umich.edu    options.db = None
4351049Sbinkertn@umich.edu    options.passwd = ''
4361049Sbinkertn@umich.edu    options.user = getpass.getuser()
4371049Sbinkertn@umich.edu    options.runs = None
4381049Sbinkertn@umich.edu    options.system = 'client'
4391049Sbinkertn@umich.edu    options.get = None
4401076Sbinkertn@umich.edu    options.binned = False
4411076Sbinkertn@umich.edu    options.graph = False
4421049Sbinkertn@umich.edu
4431049Sbinkertn@umich.edu    opts, args = getopts(sys.argv[1:], '-BEFGd:g:h:pr:s:u:')
4441049Sbinkertn@umich.edu    for o,a in opts:
4451049Sbinkertn@umich.edu        if o == '-B':
4461049Sbinkertn@umich.edu            options.binned = True
4471049Sbinkertn@umich.edu        if o == '-E':
4481049Sbinkertn@umich.edu            printval.mode = 'E'
4491049Sbinkertn@umich.edu        if o == '-F':
4501049Sbinkertn@umich.edu            printval.mode = 'F'
4511049Sbinkertn@umich.edu        if o == '-G':
4521049Sbinkertn@umich.edu            options.graph = True;
4531049Sbinkertn@umich.edu        if o == '-d':
4541049Sbinkertn@umich.edu            options.db = a
4551049Sbinkertn@umich.edu        if o == '-g':
4561049Sbinkertn@umich.edu            options.get = a
4571049Sbinkertn@umich.edu        if o == '-h':
4581049Sbinkertn@umich.edu            options.host = a
4591049Sbinkertn@umich.edu        if o == '-p':
4601049Sbinkertn@umich.edu            options.passwd = getpass.getpass()
4611049Sbinkertn@umich.edu        if o == '-r':
4621049Sbinkertn@umich.edu            options.runs = a
4631049Sbinkertn@umich.edu        if o == '-u':
4641049Sbinkertn@umich.edu            options.user = a
4651049Sbinkertn@umich.edu        if o == '-s':
4661049Sbinkertn@umich.edu            options.system = a
4671049Sbinkertn@umich.edu
4681049Sbinkertn@umich.edu    if len(args) == 0:
4691049Sbinkertn@umich.edu        usage()
4701049Sbinkertn@umich.edu
4711049Sbinkertn@umich.edu    command = args[0]
4721049Sbinkertn@umich.edu    args = args[1:]
4731049Sbinkertn@umich.edu
4741049Sbinkertn@umich.edu    try:
4751049Sbinkertn@umich.edu        commands(options, command, args)
4761049Sbinkertn@umich.edu    except CommandException:
4771049Sbinkertn@umich.edu        usage()
478