stats.py revision 1317
113540Sandrea.mondelli@ucf.edu#!/usr/bin/env python 21376Sbinkertn@umich.edufrom __future__ import division 31376Sbinkertn@umich.eduimport re, sys 41376Sbinkertn@umich.edu 51376Sbinkertn@umich.edudef usage(): 61376Sbinkertn@umich.edu print '''\ 71376Sbinkertn@umich.eduUsage: %s [-E] [-F] [-d <db> ] [-g <get> ] [-h <host>] [-p] 81376Sbinkertn@umich.edu [-s <system>] [-r <runs> ] [-u <username>] <command> [command args] 91376Sbinkertn@umich.edu''' % sys.argv[0] 101376Sbinkertn@umich.edu sys.exit(1) 111376Sbinkertn@umich.edu 121376Sbinkertn@umich.edudef getopts(list, flags): 131376Sbinkertn@umich.edu import getopt 141376Sbinkertn@umich.edu try: 151376Sbinkertn@umich.edu opts, args = getopt.getopt(list, flags) 161376Sbinkertn@umich.edu except getopt.GetoptError: 171376Sbinkertn@umich.edu usage() 181376Sbinkertn@umich.edu 191376Sbinkertn@umich.edu return opts, args 201376Sbinkertn@umich.edu 211376Sbinkertn@umich.edudef printval(name, value, invert = False): 221376Sbinkertn@umich.edu if invert and value != 0.0: 231376Sbinkertn@umich.edu value = 1 / value 241376Sbinkertn@umich.edu 251376Sbinkertn@umich.edu if value == (1e300*1e300): 261376Sbinkertn@umich.edu return 271376Sbinkertn@umich.edu 281376Sbinkertn@umich.edu if printval.mode == 'G': 291376Sbinkertn@umich.edu print '%s: %g' % (name, value) 301376Sbinkertn@umich.edu elif printval.mode != 'F' and value > 1e6: 311385Sbinkertn@umich.edu print '%s: %0.5e' % (name, value) 321376Sbinkertn@umich.edu else: 331816Sbinkertn@umich.edu print '%s: %f' % (name, value) 341376Sbinkertn@umich.edu 351816Sbinkertn@umich.eduprintval.mode = 'G' 361376Sbinkertn@umich.edu 371385Sbinkertn@umich.edudef unique(list): 381385Sbinkertn@umich.edu set = {} 391385Sbinkertn@umich.edu map(set.__setitem__, list, []) 401385Sbinkertn@umich.edu return set.keys() 411385Sbinkertn@umich.edu 421385Sbinkertn@umich.edudef graphdata68(runs, options, tag, label, value): 431385Sbinkertn@umich.edu import info 441816Sbinkertn@umich.edu configs = ['ste', 'hte', 'htd', 'ocm', 'occ', 'ocp' ] 451816Sbinkertn@umich.edu benchmarks = [ 'm', 's', 'snt', 'nb1', 'w1', 'w2', 'w3', 'w4', 'nm', 'ns', 'nw1', 'nw2', 'nw3' ] 461816Sbinkertn@umich.edu dmas = [ 'x' ] 471816Sbinkertn@umich.edu caches = [ '2', '4' ] 481816Sbinkertn@umich.edu 491816Sbinkertn@umich.edu names = [] 501816Sbinkertn@umich.edu 511816Sbinkertn@umich.edu bench_system = { 521816Sbinkertn@umich.edu 'm' : 'client', 531816Sbinkertn@umich.edu 's' : 'client', 541816Sbinkertn@umich.edu 'snt' : 'client', 551816Sbinkertn@umich.edu 'nb1' : 'server', 561816Sbinkertn@umich.edu 'nb2' : 'server', 571816Sbinkertn@umich.edu 'nt1' : 'server', 581816Sbinkertn@umich.edu 'nt2' : 'server', 591816Sbinkertn@umich.edu 'w1' : 'server', 601816Sbinkertn@umich.edu 'w2' : 'server', 611816Sbinkertn@umich.edu 'w3' : 'server', 621816Sbinkertn@umich.edu 'w4' : 'server', 631816Sbinkertn@umich.edu 'w1s' : 'server', 641816Sbinkertn@umich.edu 'w2s' : 'server', 651816Sbinkertn@umich.edu 'w3s' : 'server', 661816Sbinkertn@umich.edu 'ns' : 'natbox', 671816Sbinkertn@umich.edu 'nm' : 'natbox', 681816Sbinkertn@umich.edu 'nw1' : 'natbox', 691816Sbinkertn@umich.edu 'nw2' : 'natbox', 701816Sbinkertn@umich.edu 'nw3' : 'natbox' 711816Sbinkertn@umich.edu } 721816Sbinkertn@umich.edu 731816Sbinkertn@umich.edu for bench in benchmarks: 741816Sbinkertn@umich.edu if bench_system[bench] != options.system: 751816Sbinkertn@umich.edu continue 761385Sbinkertn@umich.edu 771376Sbinkertn@umich.edu for dma in dmas: 781376Sbinkertn@umich.edu for cache in caches: 791376Sbinkertn@umich.edu names.append([bench, dma, cache]) 801602Sbinkertn@umich.edu 811376Sbinkertn@umich.edu for bench,dma,cache in names: 821956Ssaidi@eecs.umich.edu base = '%s.%s.%s' % (bench, dma, cache) 831956Ssaidi@eecs.umich.edu fname = 'data/%s.%s.68.dat' % (tag, base) 841376Sbinkertn@umich.edu f = open(fname, 'w') 851376Sbinkertn@umich.edu print >>f, '#set TITLE = ' 861376Sbinkertn@umich.edu print >>f, '#set ylbl = %s' % label 871916Sbinkertn@umich.edu #print >>f, '#set sublabels = %s' % ' '.join(configs) 881376Sbinkertn@umich.edu print >>f, '#set sublabels = ste hte htd ocm occ ocs' 891376Sbinkertn@umich.edu 901602Sbinkertn@umich.edu for speed,freq in zip(['s', '6', '8', 'q'],['4GHz', '6GHz','8GHz', '10GHz']): 911916Sbinkertn@umich.edu print >>f, '"%s"' % freq, 921376Sbinkertn@umich.edu for conf in configs: 931376Sbinkertn@umich.edu name = '%s.%s.%s.%s.%s' % (conf, bench, dma, cache, speed) 941376Sbinkertn@umich.edu run = info.source.allRunNames[name] 951376Sbinkertn@umich.edu info.display_run = run.run; 961376Sbinkertn@umich.edu val = float(value) 971376Sbinkertn@umich.edu if val == 1e300*1e300: 981376Sbinkertn@umich.edu print >>f, 0.0, 991376Sbinkertn@umich.edu else: 1001376Sbinkertn@umich.edu print >>f, "%f" % val, 1011948Sbinkertn@umich.edu print >>f 1021376Sbinkertn@umich.edu f.close() 1031376Sbinkertn@umich.edu 1041376Sbinkertn@umich.edudef graphdata(runs, options, tag, label, value): 1051916Sbinkertn@umich.edu if options.graph68: 1061376Sbinkertn@umich.edu graphdata68(runs, options, tag, label, value) 1071376Sbinkertn@umich.edu return 1081376Sbinkertn@umich.edu 1091376Sbinkertn@umich.edu import info 1101376Sbinkertn@umich.edu configs = ['ste', 'hte', 'htd', 'ocm', 'occ', 'ocp' ] 1111376Sbinkertn@umich.edu #benchmarks = [ 'm', 's', 'nb1', 'nb2', 'nt1', 'nt2', 'w1', 'w2', 'w3', 'w4', 'ns', 'nm', 'nw1', 'nw2', 'nw3' ] 1121376Sbinkertn@umich.edu #benchmarks = [ 'm', 's', 'nb1', 'nb2', 'nt1', 'w1', 'w2', 'w3', 'ns', 'nm', 'w1s' ] 1131916Sbinkertn@umich.edu benchmarks = [ 'm', 's', 'nb1', 'nb2', 'w1', 'w2', 'w3', 'w4', 'ns', 'nm', 'nw1', 'snt' ] 1141881Sbinkertn@umich.edu #dmas = [ 'x', 'd', 'b' ] 1151881Sbinkertn@umich.edu dmas = [ 'x' ] 1161881Sbinkertn@umich.edu caches = [ '2', '4' ] 1171916Sbinkertn@umich.edu 1181948Sbinkertn@umich.edu names = [] 1191881Sbinkertn@umich.edu 1201381Sbinkertn@umich.edu bench_system = { 1211881Sbinkertn@umich.edu 'm' : 'client', 1221881Sbinkertn@umich.edu 's' : 'client', 1231381Sbinkertn@umich.edu 'snt' : 'client', 1241376Sbinkertn@umich.edu 'nb1' : 'server', 1251916Sbinkertn@umich.edu 'nb2' : 'server', 1261916Sbinkertn@umich.edu 'nt1' : 'server', 1271381Sbinkertn@umich.edu 'nt2' : 'server', 1281376Sbinkertn@umich.edu 'w1' : 'server', 1291381Sbinkertn@umich.edu 'w2' : 'server', 1301376Sbinkertn@umich.edu 'w3' : 'server', 1311381Sbinkertn@umich.edu 'w4' : 'server', 1321376Sbinkertn@umich.edu 'w1s' : 'server', 1331376Sbinkertn@umich.edu 'w2s' : 'server', 1341602Sbinkertn@umich.edu 'w3s' : 'server', 1351602Sbinkertn@umich.edu 'ns' : 'natbox', 1361381Sbinkertn@umich.edu 'nm' : 'natbox', 1371376Sbinkertn@umich.edu 'nw1' : 'natbox', 1381948Sbinkertn@umich.edu 'nw2' : 'natbox', 1391948Sbinkertn@umich.edu 'nw3' : 'natbox' 1401381Sbinkertn@umich.edu } 1411381Sbinkertn@umich.edu 1421916Sbinkertn@umich.edu for bench in benchmarks: 1431916Sbinkertn@umich.edu if bench_system[bench] != options.system: 1441916Sbinkertn@umich.edu continue 1451916Sbinkertn@umich.edu 1461381Sbinkertn@umich.edu for dma in dmas: 1471376Sbinkertn@umich.edu for cache in caches: 1481376Sbinkertn@umich.edu names.append([bench, dma, cache]) 1491881Sbinkertn@umich.edu 1501881Sbinkertn@umich.edu for bench,dma,cache in names: 1511381Sbinkertn@umich.edu base = '%s.%s.%s' % (bench, dma, cache) 1521376Sbinkertn@umich.edu fname = 'data/%s.%s.dat' % (tag, base) 1531376Sbinkertn@umich.edu f = open(fname, 'w') 1541376Sbinkertn@umich.edu print >>f, '#set TITLE = ' 1551881Sbinkertn@umich.edu print >>f, '#set ylbl = %s' % label 1561881Sbinkertn@umich.edu #print >>f, '#set sublabels = %s' % ' '.join(configs) 1571881Sbinkertn@umich.edu print >>f, '#set sublabels = ste hte htd ocm occ ocs' 1581881Sbinkertn@umich.edu 1591881Sbinkertn@umich.edu for speed,freq in zip(['s', 'q'],['4GHz','10GHz']): 1601948Sbinkertn@umich.edu print >>f, '"%s"' % freq, 1611385Sbinkertn@umich.edu for conf in configs: 1621385Sbinkertn@umich.edu name = '%s.%s.%s.%s.%s' % (conf, bench, dma, cache, speed) 1631916Sbinkertn@umich.edu run = info.source.allRunNames[name] 1641916Sbinkertn@umich.edu info.display_run = run.run; 1651881Sbinkertn@umich.edu val = float(value) 1661376Sbinkertn@umich.edu if val == 1e300*1e300: 1671881Sbinkertn@umich.edu print >>f, 0.0, 1681881Sbinkertn@umich.edu else: 1691376Sbinkertn@umich.edu print >>f, "%f" % val, 1701881Sbinkertn@umich.edu print >>f 1711881Sbinkertn@umich.edu f.close() 1721881Sbinkertn@umich.edu 1731881Sbinkertn@umich.edudef printdata(runs, value, invert = False): 1741881Sbinkertn@umich.edu import info 1751881Sbinkertn@umich.edu for run in runs: 1761376Sbinkertn@umich.edu info.display_run = run.run; 1771881Sbinkertn@umich.edu val = float(value) 1781881Sbinkertn@umich.edu printval(run.name, val) 1791376Sbinkertn@umich.edu 1801376Sbinkertn@umich.educlass CommandException(Exception): 1811881Sbinkertn@umich.edu pass 1821881Sbinkertn@umich.edu 1831881Sbinkertn@umich.edudef commands(options, command, args): 1841881Sbinkertn@umich.edu if command == 'database': 1851881Sbinkertn@umich.edu if len(args) == 0: raise CommandException 1861881Sbinkertn@umich.edu 1871881Sbinkertn@umich.edu import dbinit 1881376Sbinkertn@umich.edu mydb = dbinit.MyDB(options) 1891376Sbinkertn@umich.edu 1901376Sbinkertn@umich.edu if args[0] == 'drop': 1911881Sbinkertn@umich.edu if len(args) > 2: raise CommandException 1921881Sbinkertn@umich.edu mydb.admin() 1931376Sbinkertn@umich.edu mydb.drop() 1941881Sbinkertn@umich.edu if len(args) == 2 and args[1] == 'init': 1951881Sbinkertn@umich.edu mydb.create() 1961376Sbinkertn@umich.edu mydb.connect() 1971376Sbinkertn@umich.edu mydb.populate() 1981376Sbinkertn@umich.edu mydb.close() 1991881Sbinkertn@umich.edu return 2001881Sbinkertn@umich.edu 2011881Sbinkertn@umich.edu if args[0] == 'init': 2021881Sbinkertn@umich.edu if len(args) > 1: raise CommandException 2031376Sbinkertn@umich.edu mydb.admin() 2041881Sbinkertn@umich.edu mydb.create() 2051881Sbinkertn@umich.edu mydb.connect() 2061376Sbinkertn@umich.edu mydb.populate() 2071376Sbinkertn@umich.edu mydb.close() 2081881Sbinkertn@umich.edu return 2091881Sbinkertn@umich.edu 2101881Sbinkertn@umich.edu if args[0] == 'clean': 2111881Sbinkertn@umich.edu if len(args) > 1: raise CommandException 2121376Sbinkertn@umich.edu mydb.connect() 2131376Sbinkertn@umich.edu mydb.clean() 2141376Sbinkertn@umich.edu return 2151881Sbinkertn@umich.edu 2161376Sbinkertn@umich.edu raise CommandException 2171881Sbinkertn@umich.edu 2181881Sbinkertn@umich.edu import db, info 2191881Sbinkertn@umich.edu info.source = db.Database() 2201376Sbinkertn@umich.edu info.source.host = options.host 2211881Sbinkertn@umich.edu info.source.db = options.db 2221881Sbinkertn@umich.edu info.source.passwd = options.passwd 2231881Sbinkertn@umich.edu info.source.user = options.user 2241881Sbinkertn@umich.edu info.source.connect() 2251881Sbinkertn@umich.edu info.source.update_dict(globals()) 2261816Sbinkertn@umich.edu 2271881Sbinkertn@umich.edu if type(options.get) is str: 2281881Sbinkertn@umich.edu info.source.get = options.get 2291881Sbinkertn@umich.edu 2301881Sbinkertn@umich.edu if options.runs is None: 2311881Sbinkertn@umich.edu runs = info.source.allRuns 2321816Sbinkertn@umich.edu else: 2331881Sbinkertn@umich.edu rx = re.compile(options.runs) 2341881Sbinkertn@umich.edu runs = [] 2351881Sbinkertn@umich.edu for run in info.source.allRuns: 2361881Sbinkertn@umich.edu if rx.match(run.name): 2371881Sbinkertn@umich.edu runs.append(run) 2381376Sbinkertn@umich.edu 2391881Sbinkertn@umich.edu info.display_run = runs[0].run 2401881Sbinkertn@umich.edu 2411881Sbinkertn@umich.edu if command == 'runs': 2421881Sbinkertn@umich.edu user = None 2431881Sbinkertn@umich.edu opts, args = getopts(args, '-u') 2441881Sbinkertn@umich.edu if len(args): 2451881Sbinkertn@umich.edu raise CommandException 2461376Sbinkertn@umich.edu for o,a in opts: 2471881Sbinkertn@umich.edu if o == '-u': 2481881Sbinkertn@umich.edu user = a 2491881Sbinkertn@umich.edu info.source.listRuns(user) 2501881Sbinkertn@umich.edu return 2511881Sbinkertn@umich.edu 2521881Sbinkertn@umich.edu if command == 'stability': 2531916Sbinkertn@umich.edu stats = info.source.getStat(args[0]) 2541916Sbinkertn@umich.edu info.source.get = "avg" 2551916Sbinkertn@umich.edu 2561881Sbinkertn@umich.edu #loop through all the stats selected 2571881Sbinkertn@umich.edu for stat in stats: 2581881Sbinkertn@umich.edu 2591881Sbinkertn@umich.edu print "%s:" % stat.name 2601881Sbinkertn@umich.edu print "%-30s %12s %12s %4s %5s %6s" % \ 2611385Sbinkertn@umich.edu ("run name", "average", "stdev", ">10%", ">1SDV", "SAMP") 2621376Sbinkertn@umich.edu print "%-30s %12s %12s %4s %5s %6s" % \ 2631376Sbinkertn@umich.edu ("------------------------------", "------------", "------------", "----", "-----", "------") 2641376Sbinkertn@umich.edu #loop through all the selected runs 2651881Sbinkertn@umich.edu for run in runs: 2661881Sbinkertn@umich.edu info.display_run = run.run; 2671376Sbinkertn@umich.edu runTicks = info.source.retTicks([ run ]) 2681916Sbinkertn@umich.edu #throw away the first one, it's 0 2691881Sbinkertn@umich.edu runTicks.pop(0) 2701881Sbinkertn@umich.edu stat.ticks = runTicks 2711916Sbinkertn@umich.edu avg = float(stat) 2721916Sbinkertn@umich.edu stdev = 0 2731916Sbinkertn@umich.edu numoutsideavg = 0 2741376Sbinkertn@umich.edu 2751385Sbinkertn@umich.edu #loop through all the various ticks for each run 2761376Sbinkertn@umich.edu for tick in runTicks: 2771385Sbinkertn@umich.edu stat.ticks = str(tick) 2781385Sbinkertn@umich.edu val = float(stat) 2791385Sbinkertn@umich.edu if (val < (avg * .9)) or (val > (avg * 1.1)): 2801385Sbinkertn@umich.edu numoutsideavg += 1 2811385Sbinkertn@umich.edu stdev += pow((val-avg),2) 2821385Sbinkertn@umich.edu 2831816Sbinkertn@umich.edu stdev = pow(stdev / len(runTicks), 0.5) 2841816Sbinkertn@umich.edu numoutsidestd = 0 2851881Sbinkertn@umich.edu for tick in runTicks: 2861881Sbinkertn@umich.edu stat.ticks = str(tick) 2871908Sbinkertn@umich.edu val = float(stat) 2881908Sbinkertn@umich.edu if (val < (avg - stdev)) or (val > (avg + stdev)): 2891881Sbinkertn@umich.edu numoutsidestd += 1 2901881Sbinkertn@umich.edu 2911385Sbinkertn@umich.edu print "%-30s %12s %12s %4s %5s %6s" % \ 2921385Sbinkertn@umich.edu (run.name, "%.1f" % avg, "%.1f" % stdev, 293 "%d" % numoutsideavg, "%d" % numoutsidestd, 294 "%d" % len(runTicks)) 295 return 296 297 298 if command == 'stats': 299 if len(args) == 0: 300 info.source.listStats() 301 elif len(args) == 1: 302 info.source.listStats(args[0]) 303 else: 304 raise CommandException 305 306 return 307 308 if command == 'stat': 309 if len(args) != 1: 310 raise CommandException 311 312 stats = info.source.getStat(args[0]) 313 for stat in stats: 314 if options.graph: 315 graphdata(runs, options, stat.name, stat.name, stat) 316 else: 317 if options.ticks: 318 print 'only displaying sample %s' % options.ticks 319 stat.ticks = options.ticks 320 321 if options.binned: 322 print 'kernel ticks' 323 stat.bins = 'kernel' 324 printdata(runs, stat) 325 326 print 'idle ticks' 327 stat.bins = 'idle' 328 printdata(runs, stat) 329 330 print 'user ticks' 331 stat.bins = 'user' 332 printdata(runs, stat) 333 334 print 'interrupt ticks' 335 stat.bins = 'interrupt' 336 printdata(runs, stat) 337 338 print 'total ticks' 339 340 stat.bins = None 341 print stat.name 342 printdata(runs, stat) 343 return 344 345 if command == 'formula': 346 if len(args) != 1: 347 raise CommandException 348 349 stats = eval(args[0]) 350 for stat in stats: 351 if options.graph: 352 graphdata(runs, options, stat.name, stat.name, stat) 353 else: 354 if options.binned: 355 print 'kernel ticks' 356 stat.bins = 'kernel' 357 printdata(runs, stat) 358 359 print 'idle ticks' 360 stat.bins = 'idle' 361 printdata(runs, stat) 362 363 print 'user ticks' 364 stat.bins = 'user' 365 printdata(runs, stat) 366 367 print 'interrupt ticks' 368 stat.bins = 'interrupt' 369 printdata(runs, stat) 370 371 print 'total ticks' 372 373 stat.bins = None 374 print args[0] 375 printdata(runs, stat) 376 return 377 378 if command == 'bins': 379 if len(args) == 0: 380 info.source.listBins() 381 elif len(args) == 1: 382 info.source.listBins(args[0]) 383 else: 384 raise CommandException 385 386 return 387 388 if command == 'formulas': 389 if len(args) == 0: 390 info.source.listFormulas() 391 elif len(args) == 1: 392 info.source.listFormulas(args[0]) 393 else: 394 raise CommandException 395 396 return 397 398 if command == 'samples': 399 if len(args): 400 raise CommandException 401 402 info.source.listTicks(runs) 403 return 404 405 if len(args): 406 raise CommandException 407 408 system = info.source.__dict__[options.system] 409 410 if command == 'usertime': 411 import copy 412 kernel = copy.copy(system.full_cpu.numCycles) 413 kernel.bins = 'kernel' 414 415 user = copy.copy(system.full_cpu.numCycles) 416 user.bins = 'user' 417 418 if options.graph: 419 graphdata(runs, options, 'usertime', 'User Fraction', 420 user / system.full_cpu.numCycles) 421 else: 422 printdata(runs, user / system.full_cpu.numCycles) 423 return 424 425 if command == 'ticks': 426 if options.binned: 427 print 'kernel ticks' 428 system.full_cpu.numCycles.bins = 'kernel' 429 printdata(runs, system.full_cpu.numCycles) 430 431 print 'idle ticks' 432 system.full_cpu.numCycles.bins = 'idle' 433 printdata(runs, system.full_cpu.numCycles) 434 435 print 'user ticks' 436 system.full_cpu.numCycles.bins = 'user' 437 printdata(runs, system.full_cpu.numCycles) 438 439 print 'total ticks' 440 441 system.full_cpu.numCycles.bins = None 442 printdata(runs, system.full_cpu.numCycles) 443 return 444 445 if command == 'packets': 446 packets = system.tsunami.etherdev.rxPackets 447 if options.graph: 448 graphdata(runs, options, 'packets', 'Packets', packets) 449 else: 450 printdata(runs, packets) 451 return 452 453 if command == 'ppt' or command == 'tpp': 454 ppt = system.tsunami.etherdev.rxPackets / sim_ticks 455 printdata(runs, ppt, command == 'tpp') 456 return 457 458 if command == 'pps': 459 pps = system.tsunami.etherdev.rxPackets / sim_seconds 460 if options.graph: 461 graphdata(runs, options, 'pps', 'Packets/s', pps) 462 else: 463 printdata(runs, pps) 464 return 465 466 if command == 'bpt' or command == 'tpb': 467 bytes = system.tsunami.etherdev.rxBytes + system.tsunami.etherdev.txBytes 468 bpt = bytes / sim_ticks * 8 469 if options.graph: 470 graphdata(runs, options, 'bpt', 'bps / Hz', bpt) 471 else: 472 printdata(runs, bpt, command == 'tpb') 473 return 474 475 if command == 'bptb' or command == 'tpbb': 476 bytes = system.tsunami.etherdev.rxBytes + system.tsunami.etherdev.txBytes 477 478 print 'kernel stats' 479 bytes.bins = 'kernel' 480 printdata(runs, bytes / ticks) 481 482 print 'idle stats' 483 bytes.bins = 'idle' 484 printdata(runs, bytes / ticks) 485 486 print 'user stats' 487 bytes.bins = 'user' 488 printdata(runs, bytes / ticks) 489 490 return 491 492 if command == 'bytes': 493 stat = system.tsunami.etherdev.rxBytes + system.tsunami.etherdev.txBytes 494 495 if options.binned: 496 print '%s kernel stats' % stat.name 497 stat.bins = 'kernel' 498 printdata(runs, stat) 499 500 print '%s idle stats' % stat.name 501 stat.bins = 'idle' 502 printdata(runs, stat) 503 504 print '%s user stats' % stat.name 505 stat.bins = 'user' 506 printdata(runs, stat) 507 508 print '%s total stats' % stat.name 509 stat.bins = None 510 511 printdata(runs, stat) 512 return 513 514 if command == 'rxbps': 515 gbps = system.tsunami.etherdev.rxBandwidth / 1e9 516 if options.graph: 517 graphdata(runs, options, 'rxbps', 'Bandwidth (Gbps)', gbps) 518 else: 519 printdata(runs, gbps) 520 return 521 522 if command == 'txbps': 523 gbps = system.tsunami.etherdev.txBandwidth / 1e9 524 if options.graph: 525 graphdata(runs, options, 'txbps', 'Bandwidth (Gbps)', gbps) 526 else: 527 printdata(runs, gbps) 528 return 529 530 if command == 'bps': 531 rxbps = system.tsunami.etherdev.rxBandwidth 532 txbps = system.tsunami.etherdev.txBandwidth 533 gbps = (rxbps + txbps) / 1e9 534 if options.graph: 535 graphdata(runs, options, 'bps', 'Bandwidth (Gbps)', gbps) 536 else: 537 printdata(runs, gbps) 538 return 539 540 if command == 'misses': 541 stat = system.L2.overall_mshr_misses 542 if options.binned: 543 print '%s kernel stats' % stat.name 544 stat.bins = 'kernel' 545 printdata(runs, stat) 546 547 print '%s idle stats' % stat.name 548 stat.bins = 'idle' 549 printdata(runs, stat) 550 551 print '%s user stats' % stat.name 552 stat.bins = 'user' 553 printdata(runs, stat) 554 555 print '%s total stats' % stat.name 556 557 stat.bins = None 558 if options.graph: 559 graphdata(runs, options, 'misses', 'Overall MSHR Misses', stat) 560 else: 561 printdata(runs, stat) 562 return 563 564 if command == 'mpkb': 565 misses = system.L2.overall_mshr_misses 566 rxbytes = system.tsunami.etherdev.rxBytes 567 txbytes = system.tsunami.etherdev.txBytes 568 569 if options.binned: 570 print 'mpkb kernel stats' 571 misses.bins = 'kernel' 572 mpkb = misses / ((rxbytes + txbytes) / 1024) 573 printdata(runs, mpkb) 574 575 print 'mpkb idle stats' 576 misses.bins = 'idle' 577 mpkb = misses / ((rxbytes + txbytes) / 1024) 578 printdata(runs, mpkb) 579 580 print 'mpkb user stats' 581 misses.bins = 'user' 582 mpkb = misses / ((rxbytes + txbytes) / 1024) 583 printdata(runs, mpkb) 584 585 print 'mpkb total stats' 586 587 mpkb = misses / ((rxbytes + txbytes) / 1024) 588 misses.bins = None 589 if options.graph: 590 graphdata(runs, options, 'mpkb', 'Misses / KB', mpkb) 591 else: 592 printdata(runs, mpkb) 593 return 594 595 if command == 'ipkb': 596 interrupts = system.full_cpu.kern.faults[4] 597 rxbytes = system.tsunami.etherdev.rxBytes 598 txbytes = system.tsunami.etherdev.txBytes 599 600 if options.binned: 601 print 'ipkb kernel stats' 602 interrupts.bins = 'kernel' 603 ipkb = interrupts / ((rxbytes + txbytes) / 1024) 604 printdata(runs, ipkb) 605 606 print 'ipkb idle stats' 607 interrupts.bins = 'idle' 608 ipkb = interrupts / ((rxbytes + txbytes) / 1024) 609 printdata(runs, ipkb) 610 611 print 'ipkb user stats' 612 interrupts.bins = 'user' 613 ipkb = interrupts / ((rxbytes + txbytes) / 1024) 614 printdata(runs, ipkb) 615 616 print 'ipkb total stats' 617 618 ipkb = interrupts / ((rxbytes + txbytes) / 1024) 619 interrupts.bins = None 620 if options.graph: 621 graphdata(runs, options, 'ipkb', 'Interrupts / KB', ipkb) 622 else: 623 printdata(runs, ipkb) 624 return 625 626 if command == 'execute': 627 printdata(runs, system.full_cpu.ISSUE__count) 628 return 629 630 if command == 'commit': 631 printdata(runs, system.full_cpu.COM__count) 632 return 633 634 if command == 'fetch': 635 printdata(runs, system.full_cpu.FETCH__count) 636 return 637 638 if command == 'bpp': 639 ed = system.tsunami.etherdev 640 bpp = (ed.rxBytes + ed.txBytes) / (ed.rxPackets + ed.txPackets) 641 if options.graph: 642 graphdata(runs, options, 'bpp', 'Bytes / Packet', bpp) 643 else: 644 printdata(runs, bpp) 645 return 646 647 if command == 'rxbpp': 648 bpp = system.tsunami.etherdev.rxBytes / system.tsunami.etherdev.rxPackets 649 if options.graph: 650 graphdata(runs, options, 'rxbpp', 'Receive Bytes / Packet', bpp) 651 else: 652 printdata(runs, bpp) 653 return 654 655 if command == 'txbpp': 656 bpp = system.tsunami.etherdev.txBytes / system.tsunami.etherdev.txPackets 657 if options.graph: 658 graphdata(runs, options, 'txbpp', 'Transmit Bytes / Packet', bpp) 659 else: 660 printdata(runs, bpp) 661 return 662 663 if command == 'rtp': 664 rtp = system.tsunami.etherdev.rxPackets / system.tsunami.etherdev.txPackets 665 if options.graph: 666 graphdata(runs, options, 'rtp', 'rxPackets / txPackets', rtp) 667 else: 668 printdata(runs, rtp) 669 return 670 671 if command == 'rtb': 672 rtb = system.tsunami.etherdev.rxBytes / system.tsunami.etherdev.txBytes 673 if options.graph: 674 graphdata(runs, options, 'rtb', 'rxBytes / txBytes', rtb) 675 else: 676 printdata(runs, rtb) 677 return 678 679 raise CommandException 680 681 682class Options: pass 683 684if __name__ == '__main__': 685 import getpass 686 687 options = Options() 688 options.host = 'zizzer.pool' 689 options.db = None 690 options.passwd = '' 691 options.user = getpass.getuser() 692 options.runs = None 693 options.system = 'client' 694 options.get = None 695 options.binned = False 696 options.graph = False 697 options.graph68 = False 698 options.ticks = False 699 700 opts, args = getopts(sys.argv[1:], '-6BEFGd:g:h:pr:s:u:T:') 701 for o,a in opts: 702 if o == '-6': 703 options.graph68 = True 704 if o == '-B': 705 options.binned = True 706 if o == '-E': 707 printval.mode = 'E' 708 if o == '-F': 709 printval.mode = 'F' 710 if o == '-G': 711 options.graph = True; 712 if o == '-d': 713 options.db = a 714 if o == '-g': 715 options.get = a 716 if o == '-h': 717 options.host = a 718 if o == '-p': 719 options.passwd = getpass.getpass() 720 if o == '-r': 721 options.runs = a 722 if o == '-u': 723 options.user = a 724 if o == '-s': 725 options.system = a 726 if o == '-T': 727 options.ticks = a 728 729 if len(args) == 0: 730 usage() 731 732 command = args[0] 733 args = args[1:] 734 735 try: 736 commands(options, command, args) 737 except CommandException: 738 usage() 739