stats.py revision 1165
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 441162Sbinkertn@umich.edu configs = ['stx', 'ste', 'hte', 'htd', 'ocm', 'occ', 'ocp' ] 451049Sbinkertn@umich.edu benchmarks = [ 'm', 's' ] 461165Sbinkertn@umich.edu dmas = [ 'x', 'd', 'b' ] 471162Sbinkertn@umich.edu caches = [ '2', '4' ] 481049Sbinkertn@umich.edu checkpoints = [ '1' ] 491049Sbinkertn@umich.edu 501049Sbinkertn@umich.edu names = [] 511049Sbinkertn@umich.edu for bench in benchmarks: 521049Sbinkertn@umich.edu for dma in dmas: 531049Sbinkertn@umich.edu for cache in caches: 541162Sbinkertn@umich.edu for cpt in checkpoints: 551162Sbinkertn@umich.edu names.append([bench, dma, cache, cpt]) 561049Sbinkertn@umich.edu 571162Sbinkertn@umich.edu for bench,dma,cache,cpt in names: 581162Sbinkertn@umich.edu base = '%s.%s.%s.%s' % (bench, dma, cache, cpt) 591165Sbinkertn@umich.edu fname = 'data/%s.%s.dat' % (tag, base) 601049Sbinkertn@umich.edu f = open(fname, 'w') 611049Sbinkertn@umich.edu print >>f, '#set TITLE = %s' % base 621049Sbinkertn@umich.edu print >>f, '#set xlbl = Configuration' 631049Sbinkertn@umich.edu print >>f, '#set ylbl = %s' % label 641049Sbinkertn@umich.edu print >>f, '#set sublabels = %s' % ' '.join(configs) 651049Sbinkertn@umich.edu 661049Sbinkertn@umich.edu for speed,freq in zip(['s', 'q'],['4GHz','10GHz']): 671049Sbinkertn@umich.edu print >>f, '"%s"' % freq, 681049Sbinkertn@umich.edu for conf in configs: 691162Sbinkertn@umich.edu name = '%s.%s.%s.%s.%s.%s' % (conf, bench, dma, speed, cache, 701162Sbinkertn@umich.edu cpt) 711049Sbinkertn@umich.edu run = info.source.allRunNames[name] 721049Sbinkertn@umich.edu info.display_run = run.run; 731049Sbinkertn@umich.edu val = float(value) 741049Sbinkertn@umich.edu if val == 1e300*1e300: 751049Sbinkertn@umich.edu print >>f, 0.0, 761049Sbinkertn@umich.edu else: 771049Sbinkertn@umich.edu print >>f, "%f" % val, 781049Sbinkertn@umich.edu print >>f 791049Sbinkertn@umich.edu f.close() 801049Sbinkertn@umich.edu 811049Sbinkertn@umich.edudef printdata(runs, value, invert = False): 821049Sbinkertn@umich.edu import info 831049Sbinkertn@umich.edu for run in runs: 841049Sbinkertn@umich.edu info.display_run = run.run; 851049Sbinkertn@umich.edu val = float(value) 861049Sbinkertn@umich.edu printval(run.name, val) 871049Sbinkertn@umich.edu 881049Sbinkertn@umich.educlass CommandException(Exception): 891049Sbinkertn@umich.edu pass 901049Sbinkertn@umich.edu 911049Sbinkertn@umich.edudef commands(options, command, args): 921049Sbinkertn@umich.edu if command == 'database': 931049Sbinkertn@umich.edu if len(args) == 0: raise CommandException 941049Sbinkertn@umich.edu 951049Sbinkertn@umich.edu import dbinit 961049Sbinkertn@umich.edu mydb = dbinit.MyDB(options) 971049Sbinkertn@umich.edu 981049Sbinkertn@umich.edu if args[0] == 'drop': 991049Sbinkertn@umich.edu if len(args) > 2: raise CommandException 1001049Sbinkertn@umich.edu mydb.admin() 1011049Sbinkertn@umich.edu mydb.drop() 1021049Sbinkertn@umich.edu if len(args) == 2 and args[1] == 'init': 1031049Sbinkertn@umich.edu mydb.create() 1041049Sbinkertn@umich.edu mydb.connect() 1051049Sbinkertn@umich.edu mydb.populate() 1061049Sbinkertn@umich.edu mydb.close() 1071049Sbinkertn@umich.edu return 1081049Sbinkertn@umich.edu 1091049Sbinkertn@umich.edu if args[0] == 'init': 1101049Sbinkertn@umich.edu if len(args) > 1: raise CommandException 1111049Sbinkertn@umich.edu mydb.admin() 1121049Sbinkertn@umich.edu mydb.create() 1131049Sbinkertn@umich.edu mydb.connect() 1141049Sbinkertn@umich.edu mydb.populate() 1151049Sbinkertn@umich.edu mydb.close() 1161049Sbinkertn@umich.edu return 1171049Sbinkertn@umich.edu 1181049Sbinkertn@umich.edu if args[0] == 'clean': 1191049Sbinkertn@umich.edu if len(args) > 1: raise CommandException 1201049Sbinkertn@umich.edu mydb.connect() 1211049Sbinkertn@umich.edu mydb.clean() 1221049Sbinkertn@umich.edu return 1231049Sbinkertn@umich.edu 1241049Sbinkertn@umich.edu raise CommandException 1251049Sbinkertn@umich.edu 1261049Sbinkertn@umich.edu import db, info 1271049Sbinkertn@umich.edu info.source = db.Database() 1281049Sbinkertn@umich.edu info.source.host = options.host 1291049Sbinkertn@umich.edu info.source.db = options.db 1301049Sbinkertn@umich.edu info.source.passwd = options.passwd 1311049Sbinkertn@umich.edu info.source.user = options.user 1321049Sbinkertn@umich.edu info.source.connect() 1331049Sbinkertn@umich.edu info.source.update_dict(globals()) 1341049Sbinkertn@umich.edu 1351049Sbinkertn@umich.edu system = info.source.__dict__[options.system] 1361049Sbinkertn@umich.edu 1371049Sbinkertn@umich.edu if type(options.get) is str: 1381049Sbinkertn@umich.edu info.source.get = options.get 1391049Sbinkertn@umich.edu 1401049Sbinkertn@umich.edu if options.runs is None: 1411049Sbinkertn@umich.edu runs = info.source.allRuns 1421049Sbinkertn@umich.edu else: 1431049Sbinkertn@umich.edu rx = re.compile(options.runs) 1441049Sbinkertn@umich.edu runs = [] 1451049Sbinkertn@umich.edu for run in info.source.allRuns: 1461049Sbinkertn@umich.edu if rx.match(run.name): 1471049Sbinkertn@umich.edu runs.append(run) 1481049Sbinkertn@umich.edu 1491049Sbinkertn@umich.edu info.display_run = runs[0].run 1501049Sbinkertn@umich.edu 1511049Sbinkertn@umich.edu if command == 'runs': 1521049Sbinkertn@umich.edu user = None 1531049Sbinkertn@umich.edu opts, args = getopts(args, '-u') 1541049Sbinkertn@umich.edu if len(args): 1551049Sbinkertn@umich.edu raise CommandException 1561049Sbinkertn@umich.edu for o,a in opts: 1571049Sbinkertn@umich.edu if o == '-u': 1581049Sbinkertn@umich.edu user = a 1591049Sbinkertn@umich.edu info.source.listRuns(user) 1601049Sbinkertn@umich.edu return 1611049Sbinkertn@umich.edu 1621049Sbinkertn@umich.edu if command == 'stats': 1631049Sbinkertn@umich.edu if len(args) == 0: 1641049Sbinkertn@umich.edu info.source.listStats() 1651049Sbinkertn@umich.edu elif len(args) == 1: 1661049Sbinkertn@umich.edu info.source.listStats(args[0]) 1671049Sbinkertn@umich.edu else: 1681049Sbinkertn@umich.edu raise CommandException 1691049Sbinkertn@umich.edu 1701049Sbinkertn@umich.edu return 1711049Sbinkertn@umich.edu 1721049Sbinkertn@umich.edu if command == 'stat': 1731049Sbinkertn@umich.edu if len(args) != 1: 1741049Sbinkertn@umich.edu raise CommandException 1751049Sbinkertn@umich.edu 1761049Sbinkertn@umich.edu stats = info.source.getStat(args[0]) 1771049Sbinkertn@umich.edu for stat in stats: 1781076Sbinkertn@umich.edu if options.graph: 1791049Sbinkertn@umich.edu graphdata(runs, stat.name, stat.name, stat) 1801049Sbinkertn@umich.edu else: 1811165Sbinkertn@umich.edu if options.binned: 1821165Sbinkertn@umich.edu print 'kernel ticks' 1831165Sbinkertn@umich.edu stat.bins = 'kernel' 1841165Sbinkertn@umich.edu printdata(runs, stat) 1851165Sbinkertn@umich.edu 1861165Sbinkertn@umich.edu print 'idle ticks' 1871165Sbinkertn@umich.edu stat.bins = 'idle' 1881165Sbinkertn@umich.edu printdata(runs, stat) 1891165Sbinkertn@umich.edu 1901165Sbinkertn@umich.edu print 'user ticks' 1911165Sbinkertn@umich.edu stat.bins = 'user' 1921165Sbinkertn@umich.edu printdata(runs, stat) 1931165Sbinkertn@umich.edu 1941165Sbinkertn@umich.edu print 'interrupt ticks' 1951165Sbinkertn@umich.edu stat.bins = 'user' 1961165Sbinkertn@umich.edu printdata(runs, stat) 1971165Sbinkertn@umich.edu 1981165Sbinkertn@umich.edu print 'total ticks' 1991165Sbinkertn@umich.edu 2001165Sbinkertn@umich.edu stat.bins = None 2011049Sbinkertn@umich.edu print stat.name 2021049Sbinkertn@umich.edu printdata(runs, stat) 2031049Sbinkertn@umich.edu return 2041049Sbinkertn@umich.edu 2051049Sbinkertn@umich.edu if command == 'bins': 2061049Sbinkertn@umich.edu if len(args) == 0: 2071049Sbinkertn@umich.edu info.source.listBins() 2081049Sbinkertn@umich.edu elif len(args) == 1: 2091049Sbinkertn@umich.edu info.source.listBins(args[0]) 2101049Sbinkertn@umich.edu else: 2111049Sbinkertn@umich.edu raise CommandException 2121049Sbinkertn@umich.edu 2131049Sbinkertn@umich.edu return 2141049Sbinkertn@umich.edu 2151049Sbinkertn@umich.edu if command == 'formulas': 2161049Sbinkertn@umich.edu if len(args) == 0: 2171049Sbinkertn@umich.edu info.source.listFormulas() 2181049Sbinkertn@umich.edu elif len(args) == 1: 2191049Sbinkertn@umich.edu info.source.listFormulas(args[0]) 2201049Sbinkertn@umich.edu else: 2211049Sbinkertn@umich.edu raise CommandException 2221049Sbinkertn@umich.edu 2231049Sbinkertn@umich.edu return 2241049Sbinkertn@umich.edu 2251049Sbinkertn@umich.edu if command == 'samples': 2261049Sbinkertn@umich.edu if len(args): 2271049Sbinkertn@umich.edu raise CommandException 2281049Sbinkertn@umich.edu 2291049Sbinkertn@umich.edu info.source.listTicks(runs) 2301049Sbinkertn@umich.edu return 2311049Sbinkertn@umich.edu 2321049Sbinkertn@umich.edu if len(args): 2331049Sbinkertn@umich.edu raise CommandException 2341049Sbinkertn@umich.edu 2351049Sbinkertn@umich.edu if command == 'usertime': 2361049Sbinkertn@umich.edu import copy 2371049Sbinkertn@umich.edu kernel = copy.copy(system.full_cpu.numCycles) 2381049Sbinkertn@umich.edu kernel.bins = 'kernel' 2391049Sbinkertn@umich.edu 2401049Sbinkertn@umich.edu user = copy.copy(system.full_cpu.numCycles) 2411049Sbinkertn@umich.edu user.bins = 'user' 2421049Sbinkertn@umich.edu 2431076Sbinkertn@umich.edu if options.graph: 2441049Sbinkertn@umich.edu graphdata(runs, 'usertime', 'User Fraction', 2451049Sbinkertn@umich.edu user / system.full_cpu.numCycles) 2461049Sbinkertn@umich.edu else: 2471049Sbinkertn@umich.edu printdata(runs, user / system.full_cpu.numCycles) 2481049Sbinkertn@umich.edu return 2491049Sbinkertn@umich.edu 2501049Sbinkertn@umich.edu if command == 'ticks': 2511076Sbinkertn@umich.edu if options.binned: 2521049Sbinkertn@umich.edu print 'kernel ticks' 2531049Sbinkertn@umich.edu system.full_cpu.numCycles.bins = 'kernel' 2541049Sbinkertn@umich.edu printdata(runs, system.full_cpu.numCycles) 2551049Sbinkertn@umich.edu 2561049Sbinkertn@umich.edu print 'idle ticks' 2571049Sbinkertn@umich.edu system.full_cpu.numCycles.bins = 'idle' 2581049Sbinkertn@umich.edu printdata(runs, system.full_cpu.numCycles) 2591049Sbinkertn@umich.edu 2601049Sbinkertn@umich.edu print 'user ticks' 2611049Sbinkertn@umich.edu system.full_cpu.numCycles.bins = 'user' 2621049Sbinkertn@umich.edu printdata(runs, system.full_cpu.numCycles) 2631049Sbinkertn@umich.edu 2641049Sbinkertn@umich.edu print 'total ticks' 2651049Sbinkertn@umich.edu 2661049Sbinkertn@umich.edu system.full_cpu.numCycles.bins = None 2671049Sbinkertn@umich.edu printdata(runs, system.full_cpu.numCycles) 2681049Sbinkertn@umich.edu return 2691049Sbinkertn@umich.edu 2701049Sbinkertn@umich.edu if command == 'packets': 2711162Sbinkertn@umich.edu packets = system.tsunami.etherdev.rxPackets 2721076Sbinkertn@umich.edu if options.graph: 2731049Sbinkertn@umich.edu graphdata(runs, 'packets', 'Packets', packets) 2741049Sbinkertn@umich.edu else: 2751049Sbinkertn@umich.edu printdata(runs, packets) 2761049Sbinkertn@umich.edu return 2771049Sbinkertn@umich.edu 2781049Sbinkertn@umich.edu if command == 'ppt' or command == 'tpp': 2791162Sbinkertn@umich.edu ppt = system.tsunami.etherdev.rxPackets / sim_ticks 2801049Sbinkertn@umich.edu printdata(runs, ppt, command == 'tpp') 2811049Sbinkertn@umich.edu return 2821049Sbinkertn@umich.edu 2831049Sbinkertn@umich.edu if command == 'pps': 2841162Sbinkertn@umich.edu pps = system.tsunami.etherdev.rxPackets / sim_seconds 2851076Sbinkertn@umich.edu if options.graph: 2861049Sbinkertn@umich.edu graphdata(runs, 'pps', 'Packets/s', pps) 2871049Sbinkertn@umich.edu else: 2881049Sbinkertn@umich.edu printdata(runs, pps) 2891049Sbinkertn@umich.edu return 2901049Sbinkertn@umich.edu 2911049Sbinkertn@umich.edu if command == 'bpt' or command == 'tpb': 2921162Sbinkertn@umich.edu bytes = system.tsunami.etherdev.rxBytes + system.tsunami.etherdev.txBytes 2931049Sbinkertn@umich.edu bpt = bytes / sim_ticks * 8 2941076Sbinkertn@umich.edu if options.graph: 2951049Sbinkertn@umich.edu graphdata(runs, 'bpt', 'bps / Hz', bpt) 2961049Sbinkertn@umich.edu else: 2971049Sbinkertn@umich.edu printdata(runs, bpt, command == 'tpb') 2981049Sbinkertn@umich.edu return 2991049Sbinkertn@umich.edu 3001049Sbinkertn@umich.edu if command == 'bptb' or command == 'tpbb': 3011162Sbinkertn@umich.edu bytes = system.tsunami.etherdev.rxBytes + system.tsunami.etherdev.txBytes 3021049Sbinkertn@umich.edu 3031049Sbinkertn@umich.edu print 'kernel stats' 3041049Sbinkertn@umich.edu bytes.bins = 'kernel' 3051049Sbinkertn@umich.edu printdata(runs, bytes / ticks) 3061049Sbinkertn@umich.edu 3071049Sbinkertn@umich.edu print 'idle stats' 3081049Sbinkertn@umich.edu bytes.bins = 'idle' 3091049Sbinkertn@umich.edu printdata(runs, bytes / ticks) 3101049Sbinkertn@umich.edu 3111049Sbinkertn@umich.edu print 'user stats' 3121049Sbinkertn@umich.edu bytes.bins = 'user' 3131049Sbinkertn@umich.edu printdata(runs, bytes / ticks) 3141049Sbinkertn@umich.edu 3151049Sbinkertn@umich.edu return 3161049Sbinkertn@umich.edu 3171049Sbinkertn@umich.edu if command == 'bytes': 3181162Sbinkertn@umich.edu stat = system.tsunami.etherdev.rxBytes + system.tsunami.etherdev.txBytes 3191049Sbinkertn@umich.edu 3201076Sbinkertn@umich.edu if options.binned: 3211049Sbinkertn@umich.edu print '%s kernel stats' % stat.name 3221049Sbinkertn@umich.edu stat.bins = 'kernel' 3231049Sbinkertn@umich.edu printdata(runs, stat) 3241049Sbinkertn@umich.edu 3251049Sbinkertn@umich.edu print '%s idle stats' % stat.name 3261049Sbinkertn@umich.edu stat.bins = 'idle' 3271049Sbinkertn@umich.edu printdata(runs, stat) 3281049Sbinkertn@umich.edu 3291049Sbinkertn@umich.edu print '%s user stats' % stat.name 3301049Sbinkertn@umich.edu stat.bins = 'user' 3311049Sbinkertn@umich.edu printdata(runs, stat) 3321049Sbinkertn@umich.edu 3331049Sbinkertn@umich.edu print '%s total stats' % stat.name 3341049Sbinkertn@umich.edu stat.bins = None 3351049Sbinkertn@umich.edu 3361049Sbinkertn@umich.edu printdata(runs, stat) 3371049Sbinkertn@umich.edu return 3381049Sbinkertn@umich.edu 3391049Sbinkertn@umich.edu if command == 'rxbps': 3401162Sbinkertn@umich.edu gbps = system.tsunami.etherdev.rxBandwidth / 1e9 3411076Sbinkertn@umich.edu if options.graph: 3421049Sbinkertn@umich.edu graphdata(runs, 'rxbps', '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 == 'txbps': 3481162Sbinkertn@umich.edu gbps = system.tsunami.etherdev.txBandwidth / 1e9 3491076Sbinkertn@umich.edu if options.graph: 3501049Sbinkertn@umich.edu graphdata(runs, 'txbps', 'Bandwidth (Gbps)', gbps) 3511049Sbinkertn@umich.edu else: 3521049Sbinkertn@umich.edu printdata(runs, gbps) 3531049Sbinkertn@umich.edu return 3541049Sbinkertn@umich.edu 3551049Sbinkertn@umich.edu if command == 'bps': 3561162Sbinkertn@umich.edu rxbps = system.tsunami.etherdev.rxBandwidth 3571162Sbinkertn@umich.edu txbps = system.tsunami.etherdev.txBandwidth 3581049Sbinkertn@umich.edu gbps = (rxbps + txbps) / 1e9 3591076Sbinkertn@umich.edu if options.graph: 3601049Sbinkertn@umich.edu graphdata(runs, 'bps', 'Bandwidth (Gbps)', gbps) 3611049Sbinkertn@umich.edu else: 3621049Sbinkertn@umich.edu printdata(runs, gbps) 3631049Sbinkertn@umich.edu return 3641049Sbinkertn@umich.edu 3651049Sbinkertn@umich.edu if command == 'misses': 3661162Sbinkertn@umich.edu stat = system.L2.overall_mshr_misses 3671076Sbinkertn@umich.edu if options.binned: 3681049Sbinkertn@umich.edu print '%s kernel stats' % stat.name 3691049Sbinkertn@umich.edu stat.bins = 'kernel' 3701049Sbinkertn@umich.edu printdata(runs, stat) 3711049Sbinkertn@umich.edu 3721049Sbinkertn@umich.edu print '%s idle stats' % stat.name 3731049Sbinkertn@umich.edu stat.bins = 'idle' 3741049Sbinkertn@umich.edu printdata(runs, stat) 3751049Sbinkertn@umich.edu 3761049Sbinkertn@umich.edu print '%s user stats' % stat.name 3771049Sbinkertn@umich.edu stat.bins = 'user' 3781049Sbinkertn@umich.edu printdata(runs, stat) 3791049Sbinkertn@umich.edu 3801049Sbinkertn@umich.edu print '%s total stats' % stat.name 3811049Sbinkertn@umich.edu 3821049Sbinkertn@umich.edu stat.bins = None 3831076Sbinkertn@umich.edu if options.graph: 3841049Sbinkertn@umich.edu graphdata(runs, 'misses', 'Overall MSHR Misses', stat) 3851049Sbinkertn@umich.edu else: 3861049Sbinkertn@umich.edu printdata(runs, stat) 3871049Sbinkertn@umich.edu return 3881049Sbinkertn@umich.edu 3891049Sbinkertn@umich.edu if command == 'mpkb': 3901162Sbinkertn@umich.edu misses = system.L2.overall_mshr_misses 3911162Sbinkertn@umich.edu rxbytes = system.tsunami.etherdev.rxBytes 3921162Sbinkertn@umich.edu txbytes = system.tsunami.etherdev.txBytes 3931049Sbinkertn@umich.edu 3941076Sbinkertn@umich.edu if options.binned: 3951049Sbinkertn@umich.edu print 'mpkb kernel stats' 3961049Sbinkertn@umich.edu misses.bins = 'kernel' 3971049Sbinkertn@umich.edu mpkb = misses / ((rxbytes + txbytes) / 1024) 3981049Sbinkertn@umich.edu printdata(runs, mpkb) 3991049Sbinkertn@umich.edu 4001049Sbinkertn@umich.edu print 'mpkb idle stats' 4011049Sbinkertn@umich.edu misses.bins = 'idle' 4021049Sbinkertn@umich.edu mpkb = misses / ((rxbytes + txbytes) / 1024) 4031049Sbinkertn@umich.edu printdata(runs, mpkb) 4041049Sbinkertn@umich.edu 4051049Sbinkertn@umich.edu print 'mpkb user stats' 4061049Sbinkertn@umich.edu misses.bins = 'user' 4071049Sbinkertn@umich.edu mpkb = misses / ((rxbytes + txbytes) / 1024) 4081049Sbinkertn@umich.edu printdata(runs, mpkb) 4091049Sbinkertn@umich.edu 4101049Sbinkertn@umich.edu print 'mpkb total stats' 4111049Sbinkertn@umich.edu 4121049Sbinkertn@umich.edu mpkb = misses / ((rxbytes + txbytes) / 1024) 4131049Sbinkertn@umich.edu misses.bins = None 4141076Sbinkertn@umich.edu if options.graph: 4151049Sbinkertn@umich.edu graphdata(runs, 'mpkb', 'Misses / KB', mpkb) 4161049Sbinkertn@umich.edu else: 4171049Sbinkertn@umich.edu printdata(runs, mpkb) 4181049Sbinkertn@umich.edu return 4191049Sbinkertn@umich.edu 4201049Sbinkertn@umich.edu if command == 'execute': 4211049Sbinkertn@umich.edu printdata(runs, system.full_cpu.ISSUE__count) 4221049Sbinkertn@umich.edu return 4231049Sbinkertn@umich.edu 4241049Sbinkertn@umich.edu if command == 'commit': 4251049Sbinkertn@umich.edu printdata(runs, system.full_cpu.COM__count) 4261049Sbinkertn@umich.edu return 4271049Sbinkertn@umich.edu 4281049Sbinkertn@umich.edu if command == 'fetch': 4291049Sbinkertn@umich.edu printdata(runs, system.full_cpu.FETCH__count) 4301049Sbinkertn@umich.edu return 4311049Sbinkertn@umich.edu 4321162Sbinkertn@umich.edu if command == 'bpp': 4331162Sbinkertn@umich.edu ed = system.tsunami.etherdev 4341162Sbinkertn@umich.edu bpp = (ed.rxBytes + ed.txBytes) / (ed.rxPackets + ed.txPackets) 4351162Sbinkertn@umich.edu if options.graph: 4361162Sbinkertn@umich.edu graphdata(runs, 'bpp', 'Bytes / Packet', bpp) 4371162Sbinkertn@umich.edu else: 4381162Sbinkertn@umich.edu printdata(runs, bpp) 4391162Sbinkertn@umich.edu return 4401162Sbinkertn@umich.edu 4411049Sbinkertn@umich.edu if command == 'rxbpp': 4421162Sbinkertn@umich.edu bpp = system.tsunami.etherdev.rxBytes / system.tsunami.etherdev.rxPackets 4431162Sbinkertn@umich.edu if options.graph: 4441162Sbinkertn@umich.edu graphdata(runs, 'rxbpp', 'Receive Bytes / Packet', bpp) 4451162Sbinkertn@umich.edu else: 4461162Sbinkertn@umich.edu printdata(runs, bpp) 4471049Sbinkertn@umich.edu return 4481049Sbinkertn@umich.edu 4491049Sbinkertn@umich.edu if command == 'txbpp': 4501162Sbinkertn@umich.edu bpp = system.tsunami.etherdev.txBytes / system.tsunami.etherdev.txPackets 4511162Sbinkertn@umich.edu if options.graph: 4521162Sbinkertn@umich.edu graphdata(runs, 'txbpp', 'Transmit Bytes / Packet', bpp) 4531162Sbinkertn@umich.edu else: 4541162Sbinkertn@umich.edu printdata(runs, bpp) 4551162Sbinkertn@umich.edu return 4561162Sbinkertn@umich.edu 4571162Sbinkertn@umich.edu if command == 'rtp': 4581162Sbinkertn@umich.edu rtp = system.tsunami.etherdev.rxPackets / system.tsunami.etherdev.txPackets 4591162Sbinkertn@umich.edu if options.graph: 4601162Sbinkertn@umich.edu graphdata(runs, 'rtp', 'rxPackets / txPackets', rtp) 4611162Sbinkertn@umich.edu else: 4621162Sbinkertn@umich.edu printdata(runs, rtp) 4631162Sbinkertn@umich.edu return 4641162Sbinkertn@umich.edu 4651162Sbinkertn@umich.edu if command == 'rtb': 4661162Sbinkertn@umich.edu rtb = system.tsunami.etherdev.rxBytes / system.tsunami.etherdev.txBytes 4671162Sbinkertn@umich.edu if options.graph: 4681162Sbinkertn@umich.edu graphdata(runs, 'rtb', 'rxBytes / txBytes', rtb) 4691162Sbinkertn@umich.edu else: 4701162Sbinkertn@umich.edu printdata(runs, rtb) 4711049Sbinkertn@umich.edu return 4721049Sbinkertn@umich.edu 4731049Sbinkertn@umich.edu raise CommandException 4741049Sbinkertn@umich.edu 4751049Sbinkertn@umich.edu 4761049Sbinkertn@umich.educlass Options: pass 4771049Sbinkertn@umich.edu 4781049Sbinkertn@umich.eduif __name__ == '__main__': 4791049Sbinkertn@umich.edu import getpass 4801049Sbinkertn@umich.edu 4811049Sbinkertn@umich.edu options = Options() 4821049Sbinkertn@umich.edu options.host = 'zizzer.pool' 4831049Sbinkertn@umich.edu options.db = None 4841049Sbinkertn@umich.edu options.passwd = '' 4851049Sbinkertn@umich.edu options.user = getpass.getuser() 4861049Sbinkertn@umich.edu options.runs = None 4871049Sbinkertn@umich.edu options.system = 'client' 4881049Sbinkertn@umich.edu options.get = None 4891076Sbinkertn@umich.edu options.binned = False 4901076Sbinkertn@umich.edu options.graph = False 4911049Sbinkertn@umich.edu 4921049Sbinkertn@umich.edu opts, args = getopts(sys.argv[1:], '-BEFGd:g:h:pr:s:u:') 4931049Sbinkertn@umich.edu for o,a in opts: 4941049Sbinkertn@umich.edu if o == '-B': 4951049Sbinkertn@umich.edu options.binned = True 4961049Sbinkertn@umich.edu if o == '-E': 4971049Sbinkertn@umich.edu printval.mode = 'E' 4981049Sbinkertn@umich.edu if o == '-F': 4991049Sbinkertn@umich.edu printval.mode = 'F' 5001049Sbinkertn@umich.edu if o == '-G': 5011049Sbinkertn@umich.edu options.graph = True; 5021049Sbinkertn@umich.edu if o == '-d': 5031049Sbinkertn@umich.edu options.db = a 5041049Sbinkertn@umich.edu if o == '-g': 5051049Sbinkertn@umich.edu options.get = a 5061049Sbinkertn@umich.edu if o == '-h': 5071049Sbinkertn@umich.edu options.host = a 5081049Sbinkertn@umich.edu if o == '-p': 5091049Sbinkertn@umich.edu options.passwd = getpass.getpass() 5101049Sbinkertn@umich.edu if o == '-r': 5111049Sbinkertn@umich.edu options.runs = a 5121049Sbinkertn@umich.edu if o == '-u': 5131049Sbinkertn@umich.edu options.user = a 5141049Sbinkertn@umich.edu if o == '-s': 5151049Sbinkertn@umich.edu options.system = a 5161049Sbinkertn@umich.edu 5171049Sbinkertn@umich.edu if len(args) == 0: 5181049Sbinkertn@umich.edu usage() 5191049Sbinkertn@umich.edu 5201049Sbinkertn@umich.edu command = args[0] 5211049Sbinkertn@umich.edu args = args[1:] 5221049Sbinkertn@umich.edu 5231049Sbinkertn@umich.edu try: 5241049Sbinkertn@umich.edu commands(options, command, args) 5251049Sbinkertn@umich.edu except CommandException: 5261049Sbinkertn@umich.edu usage() 527