stats.py revision 1301
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 421269Sbinkertn@umich.edudef graphdata(runs, options, tag, label, value): 431049Sbinkertn@umich.edu import info 441269Sbinkertn@umich.edu configs = ['ste', 'hte', 'htd', 'ocm', 'occ', 'ocp' ] 451269Sbinkertn@umich.edu #benchmarks = [ 'm', 's', 'nb1', 'nb2', 'nt1', 'nt2', 'w1', 'w2', 'w3', 'w4', 'ns', 'nm', 'nw1', 'nw2', 'nw3' ] 461269Sbinkertn@umich.edu #benchmarks = [ 'm', 's', 'nb1', 'nb2', 'nt1', 'w1', 'w2', 'w3', 'ns', 'nm', 'w1s' ] 471269Sbinkertn@umich.edu benchmarks = [ 'm', 's', 'nb1', 'nb2', 'w1', 'w2', 'w3', 'w4', 'ns', 'nm', 'nw1', 'snt' ] 481269Sbinkertn@umich.edu #dmas = [ 'x', 'd', 'b' ] 491269Sbinkertn@umich.edu dmas = [ 'x' ] 501162Sbinkertn@umich.edu caches = [ '2', '4' ] 511049Sbinkertn@umich.edu 521049Sbinkertn@umich.edu names = [] 531269Sbinkertn@umich.edu 541269Sbinkertn@umich.edu bench_system = { 551269Sbinkertn@umich.edu 'm' : 'client', 561269Sbinkertn@umich.edu 's' : 'client', 571269Sbinkertn@umich.edu 'snt' : 'client', 581269Sbinkertn@umich.edu 'nb1' : 'server', 591269Sbinkertn@umich.edu 'nb2' : 'server', 601269Sbinkertn@umich.edu 'nt1' : 'server', 611269Sbinkertn@umich.edu 'nt2' : 'server', 621269Sbinkertn@umich.edu 'w1' : 'server', 631269Sbinkertn@umich.edu 'w2' : 'server', 641269Sbinkertn@umich.edu 'w3' : 'server', 651269Sbinkertn@umich.edu 'w4' : 'server', 661269Sbinkertn@umich.edu 'w1s' : 'server', 671269Sbinkertn@umich.edu 'w2s' : 'server', 681269Sbinkertn@umich.edu 'w3s' : 'server', 691269Sbinkertn@umich.edu 'ns' : 'natbox', 701269Sbinkertn@umich.edu 'nm' : 'natbox', 711269Sbinkertn@umich.edu 'nw1' : 'natbox', 721269Sbinkertn@umich.edu 'nw2' : 'natbox', 731269Sbinkertn@umich.edu 'nw3' : 'natbox' 741269Sbinkertn@umich.edu } 751269Sbinkertn@umich.edu 761049Sbinkertn@umich.edu for bench in benchmarks: 771269Sbinkertn@umich.edu if bench_system[bench] != options.system: 781269Sbinkertn@umich.edu continue 791269Sbinkertn@umich.edu 801049Sbinkertn@umich.edu for dma in dmas: 811049Sbinkertn@umich.edu for cache in caches: 821269Sbinkertn@umich.edu names.append([bench, dma, cache]) 831049Sbinkertn@umich.edu 841269Sbinkertn@umich.edu for bench,dma,cache in names: 851269Sbinkertn@umich.edu base = '%s.%s.%s' % (bench, dma, cache) 861165Sbinkertn@umich.edu fname = 'data/%s.%s.dat' % (tag, base) 871049Sbinkertn@umich.edu f = open(fname, 'w') 881049Sbinkertn@umich.edu print >>f, '#set TITLE = %s' % base 891049Sbinkertn@umich.edu print >>f, '#set xlbl = Configuration' 901049Sbinkertn@umich.edu print >>f, '#set ylbl = %s' % label 911049Sbinkertn@umich.edu print >>f, '#set sublabels = %s' % ' '.join(configs) 921049Sbinkertn@umich.edu 931049Sbinkertn@umich.edu for speed,freq in zip(['s', 'q'],['4GHz','10GHz']): 941049Sbinkertn@umich.edu print >>f, '"%s"' % freq, 951049Sbinkertn@umich.edu for conf in configs: 961269Sbinkertn@umich.edu name = '%s.%s.%s.%s.%s' % (conf, bench, dma, cache, speed) 971049Sbinkertn@umich.edu run = info.source.allRunNames[name] 981049Sbinkertn@umich.edu info.display_run = run.run; 991049Sbinkertn@umich.edu val = float(value) 1001049Sbinkertn@umich.edu if val == 1e300*1e300: 1011049Sbinkertn@umich.edu print >>f, 0.0, 1021049Sbinkertn@umich.edu else: 1031049Sbinkertn@umich.edu print >>f, "%f" % val, 1041049Sbinkertn@umich.edu print >>f 1051049Sbinkertn@umich.edu f.close() 1061049Sbinkertn@umich.edu 1071049Sbinkertn@umich.edudef printdata(runs, value, invert = False): 1081049Sbinkertn@umich.edu import info 1091049Sbinkertn@umich.edu for run in runs: 1101049Sbinkertn@umich.edu info.display_run = run.run; 1111049Sbinkertn@umich.edu val = float(value) 1121049Sbinkertn@umich.edu printval(run.name, val) 1131049Sbinkertn@umich.edu 1141049Sbinkertn@umich.educlass CommandException(Exception): 1151049Sbinkertn@umich.edu pass 1161049Sbinkertn@umich.edu 1171049Sbinkertn@umich.edudef commands(options, command, args): 1181049Sbinkertn@umich.edu if command == 'database': 1191049Sbinkertn@umich.edu if len(args) == 0: raise CommandException 1201049Sbinkertn@umich.edu 1211049Sbinkertn@umich.edu import dbinit 1221049Sbinkertn@umich.edu mydb = dbinit.MyDB(options) 1231049Sbinkertn@umich.edu 1241049Sbinkertn@umich.edu if args[0] == 'drop': 1251049Sbinkertn@umich.edu if len(args) > 2: raise CommandException 1261049Sbinkertn@umich.edu mydb.admin() 1271049Sbinkertn@umich.edu mydb.drop() 1281049Sbinkertn@umich.edu if len(args) == 2 and args[1] == 'init': 1291049Sbinkertn@umich.edu mydb.create() 1301049Sbinkertn@umich.edu mydb.connect() 1311049Sbinkertn@umich.edu mydb.populate() 1321049Sbinkertn@umich.edu mydb.close() 1331049Sbinkertn@umich.edu return 1341049Sbinkertn@umich.edu 1351049Sbinkertn@umich.edu if args[0] == 'init': 1361049Sbinkertn@umich.edu if len(args) > 1: raise CommandException 1371049Sbinkertn@umich.edu mydb.admin() 1381049Sbinkertn@umich.edu mydb.create() 1391049Sbinkertn@umich.edu mydb.connect() 1401049Sbinkertn@umich.edu mydb.populate() 1411049Sbinkertn@umich.edu mydb.close() 1421049Sbinkertn@umich.edu return 1431049Sbinkertn@umich.edu 1441049Sbinkertn@umich.edu if args[0] == 'clean': 1451049Sbinkertn@umich.edu if len(args) > 1: raise CommandException 1461049Sbinkertn@umich.edu mydb.connect() 1471049Sbinkertn@umich.edu mydb.clean() 1481049Sbinkertn@umich.edu return 1491049Sbinkertn@umich.edu 1501049Sbinkertn@umich.edu raise CommandException 1511049Sbinkertn@umich.edu 1521049Sbinkertn@umich.edu import db, info 1531049Sbinkertn@umich.edu info.source = db.Database() 1541049Sbinkertn@umich.edu info.source.host = options.host 1551049Sbinkertn@umich.edu info.source.db = options.db 1561049Sbinkertn@umich.edu info.source.passwd = options.passwd 1571049Sbinkertn@umich.edu info.source.user = options.user 1581049Sbinkertn@umich.edu info.source.connect() 1591049Sbinkertn@umich.edu info.source.update_dict(globals()) 1601049Sbinkertn@umich.edu 1611049Sbinkertn@umich.edu if type(options.get) is str: 1621049Sbinkertn@umich.edu info.source.get = options.get 1631049Sbinkertn@umich.edu 1641049Sbinkertn@umich.edu if options.runs is None: 1651049Sbinkertn@umich.edu runs = info.source.allRuns 1661049Sbinkertn@umich.edu else: 1671049Sbinkertn@umich.edu rx = re.compile(options.runs) 1681049Sbinkertn@umich.edu runs = [] 1691049Sbinkertn@umich.edu for run in info.source.allRuns: 1701049Sbinkertn@umich.edu if rx.match(run.name): 1711049Sbinkertn@umich.edu runs.append(run) 1721049Sbinkertn@umich.edu 1731049Sbinkertn@umich.edu info.display_run = runs[0].run 1741049Sbinkertn@umich.edu 1751049Sbinkertn@umich.edu if command == 'runs': 1761049Sbinkertn@umich.edu user = None 1771049Sbinkertn@umich.edu opts, args = getopts(args, '-u') 1781049Sbinkertn@umich.edu if len(args): 1791049Sbinkertn@umich.edu raise CommandException 1801049Sbinkertn@umich.edu for o,a in opts: 1811049Sbinkertn@umich.edu if o == '-u': 1821049Sbinkertn@umich.edu user = a 1831049Sbinkertn@umich.edu info.source.listRuns(user) 1841049Sbinkertn@umich.edu return 1851049Sbinkertn@umich.edu 1861049Sbinkertn@umich.edu if command == 'stats': 1871049Sbinkertn@umich.edu if len(args) == 0: 1881049Sbinkertn@umich.edu info.source.listStats() 1891049Sbinkertn@umich.edu elif len(args) == 1: 1901049Sbinkertn@umich.edu info.source.listStats(args[0]) 1911049Sbinkertn@umich.edu else: 1921049Sbinkertn@umich.edu raise CommandException 1931049Sbinkertn@umich.edu 1941049Sbinkertn@umich.edu return 1951049Sbinkertn@umich.edu 1961049Sbinkertn@umich.edu if command == 'stat': 1971049Sbinkertn@umich.edu if len(args) != 1: 1981049Sbinkertn@umich.edu raise CommandException 1991049Sbinkertn@umich.edu 2001049Sbinkertn@umich.edu stats = info.source.getStat(args[0]) 2011049Sbinkertn@umich.edu for stat in stats: 2021076Sbinkertn@umich.edu if options.graph: 2031269Sbinkertn@umich.edu graphdata(runs, options, stat.name, stat.name, stat) 2041049Sbinkertn@umich.edu else: 2051301Ssaidi@eecs.umich.edu if options.ticks: 2061301Ssaidi@eecs.umich.edu print 'only displaying sample %s' % options.ticks 2071301Ssaidi@eecs.umich.edu stat.ticks = options.ticks 2081301Ssaidi@eecs.umich.edu 2091165Sbinkertn@umich.edu if options.binned: 2101165Sbinkertn@umich.edu print 'kernel ticks' 2111165Sbinkertn@umich.edu stat.bins = 'kernel' 2121165Sbinkertn@umich.edu printdata(runs, stat) 2131165Sbinkertn@umich.edu 2141165Sbinkertn@umich.edu print 'idle ticks' 2151165Sbinkertn@umich.edu stat.bins = 'idle' 2161165Sbinkertn@umich.edu printdata(runs, stat) 2171165Sbinkertn@umich.edu 2181165Sbinkertn@umich.edu print 'user ticks' 2191165Sbinkertn@umich.edu stat.bins = 'user' 2201165Sbinkertn@umich.edu printdata(runs, stat) 2211165Sbinkertn@umich.edu 2221165Sbinkertn@umich.edu print 'interrupt ticks' 2231301Ssaidi@eecs.umich.edu stat.bins = 'interrupt' 2241165Sbinkertn@umich.edu printdata(runs, stat) 2251165Sbinkertn@umich.edu 2261165Sbinkertn@umich.edu print 'total ticks' 2271165Sbinkertn@umich.edu 2281165Sbinkertn@umich.edu stat.bins = None 2291049Sbinkertn@umich.edu print stat.name 2301049Sbinkertn@umich.edu printdata(runs, stat) 2311049Sbinkertn@umich.edu return 2321049Sbinkertn@umich.edu 2331269Sbinkertn@umich.edu if command == 'formula': 2341269Sbinkertn@umich.edu if len(args) != 1: 2351269Sbinkertn@umich.edu raise CommandException 2361269Sbinkertn@umich.edu 2371269Sbinkertn@umich.edu stats = eval(args[0]) 2381269Sbinkertn@umich.edu for stat in stats: 2391269Sbinkertn@umich.edu if options.graph: 2401269Sbinkertn@umich.edu graphdata(runs, options, stat.name, stat.name, stat) 2411269Sbinkertn@umich.edu else: 2421269Sbinkertn@umich.edu if options.binned: 2431269Sbinkertn@umich.edu print 'kernel ticks' 2441269Sbinkertn@umich.edu stat.bins = 'kernel' 2451269Sbinkertn@umich.edu printdata(runs, stat) 2461269Sbinkertn@umich.edu 2471269Sbinkertn@umich.edu print 'idle ticks' 2481269Sbinkertn@umich.edu stat.bins = 'idle' 2491269Sbinkertn@umich.edu printdata(runs, stat) 2501269Sbinkertn@umich.edu 2511269Sbinkertn@umich.edu print 'user ticks' 2521269Sbinkertn@umich.edu stat.bins = 'user' 2531269Sbinkertn@umich.edu printdata(runs, stat) 2541269Sbinkertn@umich.edu 2551269Sbinkertn@umich.edu print 'interrupt ticks' 2561301Ssaidi@eecs.umich.edu stat.bins = 'interrupt' 2571269Sbinkertn@umich.edu printdata(runs, stat) 2581269Sbinkertn@umich.edu 2591269Sbinkertn@umich.edu print 'total ticks' 2601269Sbinkertn@umich.edu 2611269Sbinkertn@umich.edu stat.bins = None 2621269Sbinkertn@umich.edu print args[0] 2631269Sbinkertn@umich.edu printdata(runs, stat) 2641269Sbinkertn@umich.edu return 2651269Sbinkertn@umich.edu 2661049Sbinkertn@umich.edu if command == 'bins': 2671049Sbinkertn@umich.edu if len(args) == 0: 2681049Sbinkertn@umich.edu info.source.listBins() 2691049Sbinkertn@umich.edu elif len(args) == 1: 2701049Sbinkertn@umich.edu info.source.listBins(args[0]) 2711049Sbinkertn@umich.edu else: 2721049Sbinkertn@umich.edu raise CommandException 2731049Sbinkertn@umich.edu 2741049Sbinkertn@umich.edu return 2751049Sbinkertn@umich.edu 2761049Sbinkertn@umich.edu if command == 'formulas': 2771049Sbinkertn@umich.edu if len(args) == 0: 2781049Sbinkertn@umich.edu info.source.listFormulas() 2791049Sbinkertn@umich.edu elif len(args) == 1: 2801049Sbinkertn@umich.edu info.source.listFormulas(args[0]) 2811049Sbinkertn@umich.edu else: 2821049Sbinkertn@umich.edu raise CommandException 2831049Sbinkertn@umich.edu 2841049Sbinkertn@umich.edu return 2851049Sbinkertn@umich.edu 2861049Sbinkertn@umich.edu if command == 'samples': 2871049Sbinkertn@umich.edu if len(args): 2881049Sbinkertn@umich.edu raise CommandException 2891049Sbinkertn@umich.edu 2901049Sbinkertn@umich.edu info.source.listTicks(runs) 2911049Sbinkertn@umich.edu return 2921049Sbinkertn@umich.edu 2931049Sbinkertn@umich.edu if len(args): 2941049Sbinkertn@umich.edu raise CommandException 2951049Sbinkertn@umich.edu 2961209Sbinkertn@umich.edu system = info.source.__dict__[options.system] 2971209Sbinkertn@umich.edu 2981049Sbinkertn@umich.edu if command == 'usertime': 2991049Sbinkertn@umich.edu import copy 3001049Sbinkertn@umich.edu kernel = copy.copy(system.full_cpu.numCycles) 3011049Sbinkertn@umich.edu kernel.bins = 'kernel' 3021049Sbinkertn@umich.edu 3031049Sbinkertn@umich.edu user = copy.copy(system.full_cpu.numCycles) 3041049Sbinkertn@umich.edu user.bins = 'user' 3051049Sbinkertn@umich.edu 3061076Sbinkertn@umich.edu if options.graph: 3071269Sbinkertn@umich.edu graphdata(runs, options, 'usertime', 'User Fraction', 3081049Sbinkertn@umich.edu user / system.full_cpu.numCycles) 3091049Sbinkertn@umich.edu else: 3101049Sbinkertn@umich.edu printdata(runs, user / system.full_cpu.numCycles) 3111049Sbinkertn@umich.edu return 3121049Sbinkertn@umich.edu 3131049Sbinkertn@umich.edu if command == 'ticks': 3141076Sbinkertn@umich.edu if options.binned: 3151049Sbinkertn@umich.edu print 'kernel ticks' 3161049Sbinkertn@umich.edu system.full_cpu.numCycles.bins = 'kernel' 3171049Sbinkertn@umich.edu printdata(runs, system.full_cpu.numCycles) 3181049Sbinkertn@umich.edu 3191049Sbinkertn@umich.edu print 'idle ticks' 3201049Sbinkertn@umich.edu system.full_cpu.numCycles.bins = 'idle' 3211049Sbinkertn@umich.edu printdata(runs, system.full_cpu.numCycles) 3221049Sbinkertn@umich.edu 3231049Sbinkertn@umich.edu print 'user ticks' 3241049Sbinkertn@umich.edu system.full_cpu.numCycles.bins = 'user' 3251049Sbinkertn@umich.edu printdata(runs, system.full_cpu.numCycles) 3261049Sbinkertn@umich.edu 3271049Sbinkertn@umich.edu print 'total ticks' 3281049Sbinkertn@umich.edu 3291049Sbinkertn@umich.edu system.full_cpu.numCycles.bins = None 3301049Sbinkertn@umich.edu printdata(runs, system.full_cpu.numCycles) 3311049Sbinkertn@umich.edu return 3321049Sbinkertn@umich.edu 3331049Sbinkertn@umich.edu if command == 'packets': 3341162Sbinkertn@umich.edu packets = system.tsunami.etherdev.rxPackets 3351076Sbinkertn@umich.edu if options.graph: 3361269Sbinkertn@umich.edu graphdata(runs, options, 'packets', 'Packets', packets) 3371049Sbinkertn@umich.edu else: 3381049Sbinkertn@umich.edu printdata(runs, packets) 3391049Sbinkertn@umich.edu return 3401049Sbinkertn@umich.edu 3411049Sbinkertn@umich.edu if command == 'ppt' or command == 'tpp': 3421162Sbinkertn@umich.edu ppt = system.tsunami.etherdev.rxPackets / sim_ticks 3431049Sbinkertn@umich.edu printdata(runs, ppt, command == 'tpp') 3441049Sbinkertn@umich.edu return 3451049Sbinkertn@umich.edu 3461049Sbinkertn@umich.edu if command == 'pps': 3471162Sbinkertn@umich.edu pps = system.tsunami.etherdev.rxPackets / sim_seconds 3481076Sbinkertn@umich.edu if options.graph: 3491269Sbinkertn@umich.edu graphdata(runs, options, 'pps', 'Packets/s', pps) 3501049Sbinkertn@umich.edu else: 3511049Sbinkertn@umich.edu printdata(runs, pps) 3521049Sbinkertn@umich.edu return 3531049Sbinkertn@umich.edu 3541049Sbinkertn@umich.edu if command == 'bpt' or command == 'tpb': 3551162Sbinkertn@umich.edu bytes = system.tsunami.etherdev.rxBytes + system.tsunami.etherdev.txBytes 3561049Sbinkertn@umich.edu bpt = bytes / sim_ticks * 8 3571076Sbinkertn@umich.edu if options.graph: 3581269Sbinkertn@umich.edu graphdata(runs, options, 'bpt', 'bps / Hz', bpt) 3591049Sbinkertn@umich.edu else: 3601049Sbinkertn@umich.edu printdata(runs, bpt, command == 'tpb') 3611049Sbinkertn@umich.edu return 3621049Sbinkertn@umich.edu 3631049Sbinkertn@umich.edu if command == 'bptb' or command == 'tpbb': 3641162Sbinkertn@umich.edu bytes = system.tsunami.etherdev.rxBytes + system.tsunami.etherdev.txBytes 3651049Sbinkertn@umich.edu 3661049Sbinkertn@umich.edu print 'kernel stats' 3671049Sbinkertn@umich.edu bytes.bins = 'kernel' 3681049Sbinkertn@umich.edu printdata(runs, bytes / ticks) 3691049Sbinkertn@umich.edu 3701049Sbinkertn@umich.edu print 'idle stats' 3711049Sbinkertn@umich.edu bytes.bins = 'idle' 3721049Sbinkertn@umich.edu printdata(runs, bytes / ticks) 3731049Sbinkertn@umich.edu 3741049Sbinkertn@umich.edu print 'user stats' 3751049Sbinkertn@umich.edu bytes.bins = 'user' 3761049Sbinkertn@umich.edu printdata(runs, bytes / ticks) 3771049Sbinkertn@umich.edu 3781049Sbinkertn@umich.edu return 3791049Sbinkertn@umich.edu 3801049Sbinkertn@umich.edu if command == 'bytes': 3811162Sbinkertn@umich.edu stat = system.tsunami.etherdev.rxBytes + system.tsunami.etherdev.txBytes 3821049Sbinkertn@umich.edu 3831076Sbinkertn@umich.edu if options.binned: 3841049Sbinkertn@umich.edu print '%s kernel stats' % stat.name 3851049Sbinkertn@umich.edu stat.bins = 'kernel' 3861049Sbinkertn@umich.edu printdata(runs, stat) 3871049Sbinkertn@umich.edu 3881049Sbinkertn@umich.edu print '%s idle stats' % stat.name 3891049Sbinkertn@umich.edu stat.bins = 'idle' 3901049Sbinkertn@umich.edu printdata(runs, stat) 3911049Sbinkertn@umich.edu 3921049Sbinkertn@umich.edu print '%s user stats' % stat.name 3931049Sbinkertn@umich.edu stat.bins = 'user' 3941049Sbinkertn@umich.edu printdata(runs, stat) 3951049Sbinkertn@umich.edu 3961049Sbinkertn@umich.edu print '%s total stats' % stat.name 3971049Sbinkertn@umich.edu stat.bins = None 3981049Sbinkertn@umich.edu 3991049Sbinkertn@umich.edu printdata(runs, stat) 4001049Sbinkertn@umich.edu return 4011049Sbinkertn@umich.edu 4021049Sbinkertn@umich.edu if command == 'rxbps': 4031162Sbinkertn@umich.edu gbps = system.tsunami.etherdev.rxBandwidth / 1e9 4041076Sbinkertn@umich.edu if options.graph: 4051269Sbinkertn@umich.edu graphdata(runs, options, 'rxbps', 'Bandwidth (Gbps)', gbps) 4061049Sbinkertn@umich.edu else: 4071049Sbinkertn@umich.edu printdata(runs, gbps) 4081049Sbinkertn@umich.edu return 4091049Sbinkertn@umich.edu 4101049Sbinkertn@umich.edu if command == 'txbps': 4111162Sbinkertn@umich.edu gbps = system.tsunami.etherdev.txBandwidth / 1e9 4121076Sbinkertn@umich.edu if options.graph: 4131269Sbinkertn@umich.edu graphdata(runs, options, 'txbps', 'Bandwidth (Gbps)', gbps) 4141049Sbinkertn@umich.edu else: 4151049Sbinkertn@umich.edu printdata(runs, gbps) 4161049Sbinkertn@umich.edu return 4171049Sbinkertn@umich.edu 4181049Sbinkertn@umich.edu if command == 'bps': 4191162Sbinkertn@umich.edu rxbps = system.tsunami.etherdev.rxBandwidth 4201162Sbinkertn@umich.edu txbps = system.tsunami.etherdev.txBandwidth 4211049Sbinkertn@umich.edu gbps = (rxbps + txbps) / 1e9 4221076Sbinkertn@umich.edu if options.graph: 4231269Sbinkertn@umich.edu graphdata(runs, options, 'bps', 'Bandwidth (Gbps)', gbps) 4241049Sbinkertn@umich.edu else: 4251049Sbinkertn@umich.edu printdata(runs, gbps) 4261049Sbinkertn@umich.edu return 4271049Sbinkertn@umich.edu 4281049Sbinkertn@umich.edu if command == 'misses': 4291162Sbinkertn@umich.edu stat = system.L2.overall_mshr_misses 4301076Sbinkertn@umich.edu if options.binned: 4311049Sbinkertn@umich.edu print '%s kernel stats' % stat.name 4321049Sbinkertn@umich.edu stat.bins = 'kernel' 4331049Sbinkertn@umich.edu printdata(runs, stat) 4341049Sbinkertn@umich.edu 4351049Sbinkertn@umich.edu print '%s idle stats' % stat.name 4361049Sbinkertn@umich.edu stat.bins = 'idle' 4371049Sbinkertn@umich.edu printdata(runs, stat) 4381049Sbinkertn@umich.edu 4391049Sbinkertn@umich.edu print '%s user stats' % stat.name 4401049Sbinkertn@umich.edu stat.bins = 'user' 4411049Sbinkertn@umich.edu printdata(runs, stat) 4421049Sbinkertn@umich.edu 4431049Sbinkertn@umich.edu print '%s total stats' % stat.name 4441049Sbinkertn@umich.edu 4451049Sbinkertn@umich.edu stat.bins = None 4461076Sbinkertn@umich.edu if options.graph: 4471269Sbinkertn@umich.edu graphdata(runs, options, 'misses', 'Overall MSHR Misses', stat) 4481049Sbinkertn@umich.edu else: 4491049Sbinkertn@umich.edu printdata(runs, stat) 4501049Sbinkertn@umich.edu return 4511049Sbinkertn@umich.edu 4521049Sbinkertn@umich.edu if command == 'mpkb': 4531162Sbinkertn@umich.edu misses = system.L2.overall_mshr_misses 4541162Sbinkertn@umich.edu rxbytes = system.tsunami.etherdev.rxBytes 4551162Sbinkertn@umich.edu txbytes = system.tsunami.etherdev.txBytes 4561049Sbinkertn@umich.edu 4571076Sbinkertn@umich.edu if options.binned: 4581049Sbinkertn@umich.edu print 'mpkb kernel stats' 4591049Sbinkertn@umich.edu misses.bins = 'kernel' 4601049Sbinkertn@umich.edu mpkb = misses / ((rxbytes + txbytes) / 1024) 4611049Sbinkertn@umich.edu printdata(runs, mpkb) 4621049Sbinkertn@umich.edu 4631049Sbinkertn@umich.edu print 'mpkb idle stats' 4641049Sbinkertn@umich.edu misses.bins = 'idle' 4651049Sbinkertn@umich.edu mpkb = misses / ((rxbytes + txbytes) / 1024) 4661049Sbinkertn@umich.edu printdata(runs, mpkb) 4671049Sbinkertn@umich.edu 4681049Sbinkertn@umich.edu print 'mpkb user stats' 4691049Sbinkertn@umich.edu misses.bins = 'user' 4701049Sbinkertn@umich.edu mpkb = misses / ((rxbytes + txbytes) / 1024) 4711049Sbinkertn@umich.edu printdata(runs, mpkb) 4721049Sbinkertn@umich.edu 4731049Sbinkertn@umich.edu print 'mpkb total stats' 4741049Sbinkertn@umich.edu 4751049Sbinkertn@umich.edu mpkb = misses / ((rxbytes + txbytes) / 1024) 4761049Sbinkertn@umich.edu misses.bins = None 4771076Sbinkertn@umich.edu if options.graph: 4781269Sbinkertn@umich.edu graphdata(runs, options, 'mpkb', 'Misses / KB', mpkb) 4791049Sbinkertn@umich.edu else: 4801049Sbinkertn@umich.edu printdata(runs, mpkb) 4811049Sbinkertn@umich.edu return 4821049Sbinkertn@umich.edu 4831269Sbinkertn@umich.edu if command == 'ipkb': 4841269Sbinkertn@umich.edu interrupts = system.full_cpu.kern.faults[4] 4851269Sbinkertn@umich.edu rxbytes = system.tsunami.etherdev.rxBytes 4861269Sbinkertn@umich.edu txbytes = system.tsunami.etherdev.txBytes 4871269Sbinkertn@umich.edu 4881269Sbinkertn@umich.edu if options.binned: 4891269Sbinkertn@umich.edu print 'ipkb kernel stats' 4901269Sbinkertn@umich.edu interrupts.bins = 'kernel' 4911269Sbinkertn@umich.edu ipkb = interrupts / ((rxbytes + txbytes) / 1024) 4921269Sbinkertn@umich.edu printdata(runs, ipkb) 4931269Sbinkertn@umich.edu 4941269Sbinkertn@umich.edu print 'ipkb idle stats' 4951269Sbinkertn@umich.edu interrupts.bins = 'idle' 4961269Sbinkertn@umich.edu ipkb = interrupts / ((rxbytes + txbytes) / 1024) 4971269Sbinkertn@umich.edu printdata(runs, ipkb) 4981269Sbinkertn@umich.edu 4991269Sbinkertn@umich.edu print 'ipkb user stats' 5001269Sbinkertn@umich.edu interrupts.bins = 'user' 5011269Sbinkertn@umich.edu ipkb = interrupts / ((rxbytes + txbytes) / 1024) 5021269Sbinkertn@umich.edu printdata(runs, ipkb) 5031269Sbinkertn@umich.edu 5041269Sbinkertn@umich.edu print 'ipkb total stats' 5051269Sbinkertn@umich.edu 5061269Sbinkertn@umich.edu ipkb = interrupts / ((rxbytes + txbytes) / 1024) 5071269Sbinkertn@umich.edu interrupts.bins = None 5081269Sbinkertn@umich.edu if options.graph: 5091269Sbinkertn@umich.edu graphdata(runs, options, 'ipkb', 'Interrupts / KB', ipkb) 5101269Sbinkertn@umich.edu else: 5111269Sbinkertn@umich.edu printdata(runs, ipkb) 5121269Sbinkertn@umich.edu return 5131269Sbinkertn@umich.edu 5141049Sbinkertn@umich.edu if command == 'execute': 5151049Sbinkertn@umich.edu printdata(runs, system.full_cpu.ISSUE__count) 5161049Sbinkertn@umich.edu return 5171049Sbinkertn@umich.edu 5181049Sbinkertn@umich.edu if command == 'commit': 5191049Sbinkertn@umich.edu printdata(runs, system.full_cpu.COM__count) 5201049Sbinkertn@umich.edu return 5211049Sbinkertn@umich.edu 5221049Sbinkertn@umich.edu if command == 'fetch': 5231049Sbinkertn@umich.edu printdata(runs, system.full_cpu.FETCH__count) 5241049Sbinkertn@umich.edu return 5251049Sbinkertn@umich.edu 5261162Sbinkertn@umich.edu if command == 'bpp': 5271162Sbinkertn@umich.edu ed = system.tsunami.etherdev 5281162Sbinkertn@umich.edu bpp = (ed.rxBytes + ed.txBytes) / (ed.rxPackets + ed.txPackets) 5291162Sbinkertn@umich.edu if options.graph: 5301269Sbinkertn@umich.edu graphdata(runs, options, 'bpp', 'Bytes / Packet', bpp) 5311162Sbinkertn@umich.edu else: 5321162Sbinkertn@umich.edu printdata(runs, bpp) 5331162Sbinkertn@umich.edu return 5341162Sbinkertn@umich.edu 5351049Sbinkertn@umich.edu if command == 'rxbpp': 5361162Sbinkertn@umich.edu bpp = system.tsunami.etherdev.rxBytes / system.tsunami.etherdev.rxPackets 5371162Sbinkertn@umich.edu if options.graph: 5381269Sbinkertn@umich.edu graphdata(runs, options, 'rxbpp', 'Receive Bytes / Packet', bpp) 5391162Sbinkertn@umich.edu else: 5401162Sbinkertn@umich.edu printdata(runs, bpp) 5411049Sbinkertn@umich.edu return 5421049Sbinkertn@umich.edu 5431049Sbinkertn@umich.edu if command == 'txbpp': 5441162Sbinkertn@umich.edu bpp = system.tsunami.etherdev.txBytes / system.tsunami.etherdev.txPackets 5451162Sbinkertn@umich.edu if options.graph: 5461269Sbinkertn@umich.edu graphdata(runs, options, 'txbpp', 'Transmit Bytes / Packet', bpp) 5471162Sbinkertn@umich.edu else: 5481162Sbinkertn@umich.edu printdata(runs, bpp) 5491162Sbinkertn@umich.edu return 5501162Sbinkertn@umich.edu 5511162Sbinkertn@umich.edu if command == 'rtp': 5521162Sbinkertn@umich.edu rtp = system.tsunami.etherdev.rxPackets / system.tsunami.etherdev.txPackets 5531162Sbinkertn@umich.edu if options.graph: 5541269Sbinkertn@umich.edu graphdata(runs, options, 'rtp', 'rxPackets / txPackets', rtp) 5551162Sbinkertn@umich.edu else: 5561162Sbinkertn@umich.edu printdata(runs, rtp) 5571162Sbinkertn@umich.edu return 5581162Sbinkertn@umich.edu 5591162Sbinkertn@umich.edu if command == 'rtb': 5601162Sbinkertn@umich.edu rtb = system.tsunami.etherdev.rxBytes / system.tsunami.etherdev.txBytes 5611162Sbinkertn@umich.edu if options.graph: 5621269Sbinkertn@umich.edu graphdata(runs, options, 'rtb', 'rxBytes / txBytes', rtb) 5631162Sbinkertn@umich.edu else: 5641162Sbinkertn@umich.edu printdata(runs, rtb) 5651049Sbinkertn@umich.edu return 5661049Sbinkertn@umich.edu 5671049Sbinkertn@umich.edu raise CommandException 5681049Sbinkertn@umich.edu 5691049Sbinkertn@umich.edu 5701049Sbinkertn@umich.educlass Options: pass 5711049Sbinkertn@umich.edu 5721049Sbinkertn@umich.eduif __name__ == '__main__': 5731049Sbinkertn@umich.edu import getpass 5741049Sbinkertn@umich.edu 5751049Sbinkertn@umich.edu options = Options() 5761049Sbinkertn@umich.edu options.host = 'zizzer.pool' 5771049Sbinkertn@umich.edu options.db = None 5781049Sbinkertn@umich.edu options.passwd = '' 5791049Sbinkertn@umich.edu options.user = getpass.getuser() 5801049Sbinkertn@umich.edu options.runs = None 5811049Sbinkertn@umich.edu options.system = 'client' 5821049Sbinkertn@umich.edu options.get = None 5831076Sbinkertn@umich.edu options.binned = False 5841076Sbinkertn@umich.edu options.graph = False 5851301Ssaidi@eecs.umich.edu options.ticks = False 5861049Sbinkertn@umich.edu 5871301Ssaidi@eecs.umich.edu opts, args = getopts(sys.argv[1:], '-BEFGd:g:h:pr:s:u:T:') 5881049Sbinkertn@umich.edu for o,a in opts: 5891049Sbinkertn@umich.edu if o == '-B': 5901049Sbinkertn@umich.edu options.binned = True 5911049Sbinkertn@umich.edu if o == '-E': 5921049Sbinkertn@umich.edu printval.mode = 'E' 5931049Sbinkertn@umich.edu if o == '-F': 5941049Sbinkertn@umich.edu printval.mode = 'F' 5951049Sbinkertn@umich.edu if o == '-G': 5961049Sbinkertn@umich.edu options.graph = True; 5971049Sbinkertn@umich.edu if o == '-d': 5981049Sbinkertn@umich.edu options.db = a 5991049Sbinkertn@umich.edu if o == '-g': 6001049Sbinkertn@umich.edu options.get = a 6011049Sbinkertn@umich.edu if o == '-h': 6021049Sbinkertn@umich.edu options.host = a 6031049Sbinkertn@umich.edu if o == '-p': 6041049Sbinkertn@umich.edu options.passwd = getpass.getpass() 6051049Sbinkertn@umich.edu if o == '-r': 6061049Sbinkertn@umich.edu options.runs = a 6071049Sbinkertn@umich.edu if o == '-u': 6081049Sbinkertn@umich.edu options.user = a 6091049Sbinkertn@umich.edu if o == '-s': 6101049Sbinkertn@umich.edu options.system = a 6111301Ssaidi@eecs.umich.edu if o == '-T': 6121301Ssaidi@eecs.umich.edu options.ticks = a 6131049Sbinkertn@umich.edu 6141049Sbinkertn@umich.edu if len(args) == 0: 6151049Sbinkertn@umich.edu usage() 6161049Sbinkertn@umich.edu 6171049Sbinkertn@umich.edu command = args[0] 6181049Sbinkertn@umich.edu args = args[1:] 6191049Sbinkertn@umich.edu 6201049Sbinkertn@umich.edu try: 6211049Sbinkertn@umich.edu commands(options, command, args) 6221049Sbinkertn@umich.edu except CommandException: 6231049Sbinkertn@umich.edu usage() 624