stats.py revision 1758
11049Sbinkertn@umich.edu#!/usr/bin/env python 21758Ssaidi@eecs.umich.edu 31758Ssaidi@eecs.umich.edu# Copyright (c) 2003-2004 The Regents of The University of Michigan 41758Ssaidi@eecs.umich.edu# All rights reserved. 51758Ssaidi@eecs.umich.edu# 61758Ssaidi@eecs.umich.edu# Redistribution and use in source and binary forms, with or without 71758Ssaidi@eecs.umich.edu# modification, are permitted provided that the following conditions are 81758Ssaidi@eecs.umich.edu# met: redistributions of source code must retain the above copyright 91758Ssaidi@eecs.umich.edu# notice, this list of conditions and the following disclaimer; 101758Ssaidi@eecs.umich.edu# redistributions in binary form must reproduce the above copyright 111758Ssaidi@eecs.umich.edu# notice, this list of conditions and the following disclaimer in the 121758Ssaidi@eecs.umich.edu# documentation and/or other materials provided with the distribution; 131758Ssaidi@eecs.umich.edu# neither the name of the copyright holders nor the names of its 141758Ssaidi@eecs.umich.edu# contributors may be used to endorse or promote products derived from 151758Ssaidi@eecs.umich.edu# this software without specific prior written permission. 161758Ssaidi@eecs.umich.edu# 171758Ssaidi@eecs.umich.edu# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 181758Ssaidi@eecs.umich.edu# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 191758Ssaidi@eecs.umich.edu# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 201758Ssaidi@eecs.umich.edu# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 211758Ssaidi@eecs.umich.edu# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 221758Ssaidi@eecs.umich.edu# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 231758Ssaidi@eecs.umich.edu# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 241758Ssaidi@eecs.umich.edu# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 251758Ssaidi@eecs.umich.edu# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 261758Ssaidi@eecs.umich.edu# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 271758Ssaidi@eecs.umich.edu# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 281758Ssaidi@eecs.umich.edu 291758Ssaidi@eecs.umich.edu#Permission is granted to use, copy, create derivative works and 301758Ssaidi@eecs.umich.edu#redistribute this software and such derivative works for any purpose, 311758Ssaidi@eecs.umich.edu#so long as the copyright notice above, this grant of permission, and 321758Ssaidi@eecs.umich.edu#the disclaimer below appear in all copies made; and so long as the 331758Ssaidi@eecs.umich.edu#name of The University of Michigan is not used in any advertising or 341758Ssaidi@eecs.umich.edu#publicity pertaining to the use or distribution of this software 351758Ssaidi@eecs.umich.edu#without specific, written prior authorization. 361758Ssaidi@eecs.umich.edu# 371758Ssaidi@eecs.umich.edu#THIS SOFTWARE IS PROVIDED AS IS, WITHOUT REPRESENTATION FROM THE 381758Ssaidi@eecs.umich.edu#UNIVERSITY OF MICHIGAN AS TO ITS FITNESS FOR ANY PURPOSE, AND WITHOUT 391758Ssaidi@eecs.umich.edu#WARRANTY BY THE UNIVERSITY OF MICHIGAN OF ANY KIND, EITHER EXPRESS OR 401758Ssaidi@eecs.umich.edu#IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF 411758Ssaidi@eecs.umich.edu#MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE REGENTS OF 421758Ssaidi@eecs.umich.edu#THE UNIVERSITY OF MICHIGAN SHALL NOT BE LIABLE FOR ANY DAMAGES, 431758Ssaidi@eecs.umich.edu#INCLUDING DIRECT, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL 441758Ssaidi@eecs.umich.edu#DAMAGES, WITH RESPECT TO ANY CLAIM ARISING OUT OF OR IN CONNECTION 451758Ssaidi@eecs.umich.edu#WITH THE USE OF THE SOFTWARE, EVEN IF IT HAS BEEN OR IS HEREAFTER 461758Ssaidi@eecs.umich.edu#ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 471758Ssaidi@eecs.umich.edu 481049Sbinkertn@umich.edufrom __future__ import division 491318Ssaidi@eecs.umich.eduimport re, sys, math 501049Sbinkertn@umich.edu 511329Ssaidi@eecs.umich.edu 521049Sbinkertn@umich.edudef usage(): 531049Sbinkertn@umich.edu print '''\ 541049Sbinkertn@umich.eduUsage: %s [-E] [-F] [-d <db> ] [-g <get> ] [-h <host>] [-p] 551331Ssaidi@eecs.umich.edu [-s <system>] [-r <runs> ] [-T <samples>] [-u <username>] 561331Ssaidi@eecs.umich.edu <command> [command args] 571331Ssaidi@eecs.umich.edu 581331Ssaidi@eecs.umich.edu commands extra parameters description 591331Ssaidi@eecs.umich.edu ----------- ------------------ --------------------------------------- 601331Ssaidi@eecs.umich.edu bins [regex] List bins (only matching regex) 611331Ssaidi@eecs.umich.edu formula <formula> Evaluated formula specified 621331Ssaidi@eecs.umich.edu formulas [regex] List formulas (only matching regex) 631331Ssaidi@eecs.umich.edu runs none List all runs in database 641331Ssaidi@eecs.umich.edu samples none List samples present in database 651331Ssaidi@eecs.umich.edu stability <pairnum> <stats> Calculated statistical info about stats 661331Ssaidi@eecs.umich.edu stat <regex> Show stat data (only matching regex) 671331Ssaidi@eecs.umich.edu stats [regex] List all stats (only matching regex) 681596Ssaidi@eecs.umich.edu 691596Ssaidi@eecs.umich.edu database <command> Where command is drop, init, or clean 701596Ssaidi@eecs.umich.edu 711049Sbinkertn@umich.edu''' % sys.argv[0] 721049Sbinkertn@umich.edu sys.exit(1) 731049Sbinkertn@umich.edu 741049Sbinkertn@umich.edudef getopts(list, flags): 751049Sbinkertn@umich.edu import getopt 761049Sbinkertn@umich.edu try: 771049Sbinkertn@umich.edu opts, args = getopt.getopt(list, flags) 781049Sbinkertn@umich.edu except getopt.GetoptError: 791049Sbinkertn@umich.edu usage() 801049Sbinkertn@umich.edu 811049Sbinkertn@umich.edu return opts, args 821049Sbinkertn@umich.edu 831049Sbinkertn@umich.edudef printval(name, value, invert = False): 841049Sbinkertn@umich.edu if invert and value != 0.0: 851049Sbinkertn@umich.edu value = 1 / value 861049Sbinkertn@umich.edu 871049Sbinkertn@umich.edu if value == (1e300*1e300): 881049Sbinkertn@umich.edu return 891049Sbinkertn@umich.edu 901049Sbinkertn@umich.edu if printval.mode == 'G': 911049Sbinkertn@umich.edu print '%s: %g' % (name, value) 921049Sbinkertn@umich.edu elif printval.mode != 'F' and value > 1e6: 931049Sbinkertn@umich.edu print '%s: %0.5e' % (name, value) 941049Sbinkertn@umich.edu else: 951049Sbinkertn@umich.edu print '%s: %f' % (name, value) 961049Sbinkertn@umich.edu 971049Sbinkertn@umich.eduprintval.mode = 'G' 981049Sbinkertn@umich.edu 991049Sbinkertn@umich.edudef unique(list): 1001049Sbinkertn@umich.edu set = {} 1011049Sbinkertn@umich.edu map(set.__setitem__, list, []) 1021049Sbinkertn@umich.edu return set.keys() 1031049Sbinkertn@umich.edu 1041621Sbinkertn@umich.edu#benchmarks = [ 'm', 's', 'snt', 'nb1', 'w1', 'w2', 'w3', 'w4', 'nm', 'ns', 'nw1', 'nw2', 'nw3' ] 1051621Sbinkertn@umich.edu 1061621Sbinkertn@umich.edudef graphdata(runs, options, tag, label, value): 1071307Sbinkertn@umich.edu import info 1081307Sbinkertn@umich.edu 1091307Sbinkertn@umich.edu bench_system = { 1101307Sbinkertn@umich.edu 'm' : 'client', 1111307Sbinkertn@umich.edu 's' : 'client', 1121307Sbinkertn@umich.edu 'snt' : 'client', 1131307Sbinkertn@umich.edu 'nb1' : 'server', 1141307Sbinkertn@umich.edu 'nb2' : 'server', 1151307Sbinkertn@umich.edu 'nt1' : 'server', 1161307Sbinkertn@umich.edu 'nt2' : 'server', 1171307Sbinkertn@umich.edu 'w1' : 'server', 1181307Sbinkertn@umich.edu 'w2' : 'server', 1191307Sbinkertn@umich.edu 'w3' : 'server', 1201307Sbinkertn@umich.edu 'w4' : 'server', 1211307Sbinkertn@umich.edu 'w1s' : 'server', 1221307Sbinkertn@umich.edu 'w2s' : 'server', 1231307Sbinkertn@umich.edu 'w3s' : 'server', 1241307Sbinkertn@umich.edu 'ns' : 'natbox', 1251307Sbinkertn@umich.edu 'nm' : 'natbox', 1261307Sbinkertn@umich.edu 'nw1' : 'natbox', 1271307Sbinkertn@umich.edu 'nw2' : 'natbox', 1281307Sbinkertn@umich.edu 'nw3' : 'natbox' 1291307Sbinkertn@umich.edu } 1301307Sbinkertn@umich.edu 1311621Sbinkertn@umich.edu system_configs = { 1321621Sbinkertn@umich.edu 's1' : 'Uni 4GHz', 1331621Sbinkertn@umich.edu 'm1' : 'Uni 6GHz', 1341621Sbinkertn@umich.edu 'f1' : 'Uni 8GHz', 1351621Sbinkertn@umich.edu 'q1' : 'Uni 10GHz', 1361621Sbinkertn@umich.edu 's2' : 'Dual 4GHz', 1371621Sbinkertn@umich.edu 'm2' : 'Dual 6GHz', 1381621Sbinkertn@umich.edu 's4' : 'Quad 4GHz', 1391621Sbinkertn@umich.edu 'm4' : 'Quad 6GHz' } 1401621Sbinkertn@umich.edu 1411621Sbinkertn@umich.edu configs = ['ste', 'hte', 'htd', 'ocm', 'occ', 'ocp' ] 1421621Sbinkertn@umich.edu benchmarks = [ 'm', 'snt', 'w2', 'nm', 'nw2' ] 1431621Sbinkertn@umich.edu caches = [ '0', '2', '4' ] 1441621Sbinkertn@umich.edu 1451621Sbinkertn@umich.edu names = [] 1461307Sbinkertn@umich.edu for bench in benchmarks: 1471307Sbinkertn@umich.edu if bench_system[bench] != options.system: 1481307Sbinkertn@umich.edu continue 1491307Sbinkertn@umich.edu 1501621Sbinkertn@umich.edu for cache in caches: 1511621Sbinkertn@umich.edu names.append([bench, cache]) 1521307Sbinkertn@umich.edu 1531621Sbinkertn@umich.edu for bench,cache in names: 1541621Sbinkertn@umich.edu base = '%s.%s' % (bench, cache) 1551621Sbinkertn@umich.edu fname = 'data/uni.%s.%s.dat' % (tag, base) 1561307Sbinkertn@umich.edu f = open(fname, 'w') 1571307Sbinkertn@umich.edu print >>f, '#set TITLE = ' 1581307Sbinkertn@umich.edu print >>f, '#set ylbl = %s' % label 1591307Sbinkertn@umich.edu #print >>f, '#set sublabels = %s' % ' '.join(configs) 1601307Sbinkertn@umich.edu print >>f, '#set sublabels = ste hte htd ocm occ ocs' 1611307Sbinkertn@umich.edu 1621621Sbinkertn@umich.edu for speed in ('s1', 'm1', 'f1', 'q1'): 1631621Sbinkertn@umich.edu label = system_configs[speed] 1641621Sbinkertn@umich.edu print >>f, '"%s"' % label, 1651307Sbinkertn@umich.edu for conf in configs: 1661621Sbinkertn@umich.edu name = '%s.%s.%s.%s' % (conf, bench, cache, speed) 1671307Sbinkertn@umich.edu run = info.source.allRunNames[name] 1681307Sbinkertn@umich.edu info.display_run = run.run; 1691307Sbinkertn@umich.edu val = float(value) 1701307Sbinkertn@umich.edu if val == 1e300*1e300: 1711307Sbinkertn@umich.edu print >>f, 0.0, 1721307Sbinkertn@umich.edu else: 1731307Sbinkertn@umich.edu print >>f, "%f" % val, 1741307Sbinkertn@umich.edu print >>f 1751307Sbinkertn@umich.edu f.close() 1761307Sbinkertn@umich.edu 1771269Sbinkertn@umich.edu configs = ['ste', 'hte', 'htd', 'ocm', 'occ', 'ocp' ] 1781621Sbinkertn@umich.edu benchmarks = [ 'w2'] 1791621Sbinkertn@umich.edu caches = [ '0', '2', '4' ] 1801049Sbinkertn@umich.edu 1811049Sbinkertn@umich.edu names = [] 1821049Sbinkertn@umich.edu for bench in benchmarks: 1831269Sbinkertn@umich.edu if bench_system[bench] != options.system: 1841269Sbinkertn@umich.edu continue 1851269Sbinkertn@umich.edu 1861621Sbinkertn@umich.edu for cache in caches: 1871621Sbinkertn@umich.edu names.append([bench, cache]) 1881049Sbinkertn@umich.edu 1891621Sbinkertn@umich.edu for bench,cache in names: 1901621Sbinkertn@umich.edu base = '%s.%s' % (bench, cache) 1911621Sbinkertn@umich.edu fname = 'data/mp.%s.%s.dat' % (tag, base) 1921049Sbinkertn@umich.edu f = open(fname, 'w') 1931307Sbinkertn@umich.edu print >>f, '#set TITLE = ' 1941049Sbinkertn@umich.edu print >>f, '#set ylbl = %s' % label 1951307Sbinkertn@umich.edu #print >>f, '#set sublabels = %s' % ' '.join(configs) 1961307Sbinkertn@umich.edu print >>f, '#set sublabels = ste hte htd ocm occ ocs' 1971049Sbinkertn@umich.edu 1981621Sbinkertn@umich.edu for speed in ('s2', 'm2', 's4', 'm4'): 1991621Sbinkertn@umich.edu label = system_configs[speed] 2001621Sbinkertn@umich.edu print >>f, '"%s"' % label, 2011049Sbinkertn@umich.edu for conf in configs: 2021621Sbinkertn@umich.edu name = '%s.%s.%s.%s' % (conf, bench, cache, speed) 2031049Sbinkertn@umich.edu run = info.source.allRunNames[name] 2041049Sbinkertn@umich.edu info.display_run = run.run; 2051049Sbinkertn@umich.edu val = float(value) 2061049Sbinkertn@umich.edu if val == 1e300*1e300: 2071049Sbinkertn@umich.edu print >>f, 0.0, 2081049Sbinkertn@umich.edu else: 2091049Sbinkertn@umich.edu print >>f, "%f" % val, 2101049Sbinkertn@umich.edu print >>f 2111049Sbinkertn@umich.edu f.close() 2121049Sbinkertn@umich.edu 2131049Sbinkertn@umich.edudef printdata(runs, value, invert = False): 2141049Sbinkertn@umich.edu import info 2151049Sbinkertn@umich.edu for run in runs: 2161049Sbinkertn@umich.edu info.display_run = run.run; 2171049Sbinkertn@umich.edu val = float(value) 2181049Sbinkertn@umich.edu printval(run.name, val) 2191049Sbinkertn@umich.edu 2201049Sbinkertn@umich.educlass CommandException(Exception): 2211049Sbinkertn@umich.edu pass 2221049Sbinkertn@umich.edu 2231049Sbinkertn@umich.edudef commands(options, command, args): 2241049Sbinkertn@umich.edu if command == 'database': 2251049Sbinkertn@umich.edu if len(args) == 0: raise CommandException 2261049Sbinkertn@umich.edu 2271049Sbinkertn@umich.edu import dbinit 2281049Sbinkertn@umich.edu mydb = dbinit.MyDB(options) 2291049Sbinkertn@umich.edu 2301049Sbinkertn@umich.edu if args[0] == 'drop': 2311049Sbinkertn@umich.edu if len(args) > 2: raise CommandException 2321049Sbinkertn@umich.edu mydb.admin() 2331049Sbinkertn@umich.edu mydb.drop() 2341049Sbinkertn@umich.edu if len(args) == 2 and args[1] == 'init': 2351049Sbinkertn@umich.edu mydb.create() 2361049Sbinkertn@umich.edu mydb.connect() 2371049Sbinkertn@umich.edu mydb.populate() 2381049Sbinkertn@umich.edu mydb.close() 2391049Sbinkertn@umich.edu return 2401049Sbinkertn@umich.edu 2411049Sbinkertn@umich.edu if args[0] == 'init': 2421049Sbinkertn@umich.edu if len(args) > 1: raise CommandException 2431049Sbinkertn@umich.edu mydb.admin() 2441049Sbinkertn@umich.edu mydb.create() 2451049Sbinkertn@umich.edu mydb.connect() 2461049Sbinkertn@umich.edu mydb.populate() 2471049Sbinkertn@umich.edu mydb.close() 2481049Sbinkertn@umich.edu return 2491049Sbinkertn@umich.edu 2501049Sbinkertn@umich.edu if args[0] == 'clean': 2511049Sbinkertn@umich.edu if len(args) > 1: raise CommandException 2521049Sbinkertn@umich.edu mydb.connect() 2531049Sbinkertn@umich.edu mydb.clean() 2541049Sbinkertn@umich.edu return 2551049Sbinkertn@umich.edu 2561049Sbinkertn@umich.edu raise CommandException 2571049Sbinkertn@umich.edu 2581049Sbinkertn@umich.edu import db, info 2591049Sbinkertn@umich.edu info.source = db.Database() 2601049Sbinkertn@umich.edu info.source.host = options.host 2611049Sbinkertn@umich.edu info.source.db = options.db 2621049Sbinkertn@umich.edu info.source.passwd = options.passwd 2631049Sbinkertn@umich.edu info.source.user = options.user 2641049Sbinkertn@umich.edu info.source.connect() 2651049Sbinkertn@umich.edu info.source.update_dict(globals()) 2661049Sbinkertn@umich.edu 2671049Sbinkertn@umich.edu if type(options.get) is str: 2681049Sbinkertn@umich.edu info.source.get = options.get 2691049Sbinkertn@umich.edu 2701049Sbinkertn@umich.edu if options.runs is None: 2711049Sbinkertn@umich.edu runs = info.source.allRuns 2721049Sbinkertn@umich.edu else: 2731049Sbinkertn@umich.edu rx = re.compile(options.runs) 2741049Sbinkertn@umich.edu runs = [] 2751049Sbinkertn@umich.edu for run in info.source.allRuns: 2761049Sbinkertn@umich.edu if rx.match(run.name): 2771049Sbinkertn@umich.edu runs.append(run) 2781049Sbinkertn@umich.edu 2791049Sbinkertn@umich.edu info.display_run = runs[0].run 2801049Sbinkertn@umich.edu 2811049Sbinkertn@umich.edu if command == 'runs': 2821049Sbinkertn@umich.edu user = None 2831049Sbinkertn@umich.edu opts, args = getopts(args, '-u') 2841049Sbinkertn@umich.edu if len(args): 2851049Sbinkertn@umich.edu raise CommandException 2861049Sbinkertn@umich.edu for o,a in opts: 2871049Sbinkertn@umich.edu if o == '-u': 2881049Sbinkertn@umich.edu user = a 2891049Sbinkertn@umich.edu info.source.listRuns(user) 2901049Sbinkertn@umich.edu return 2911049Sbinkertn@umich.edu 2921309Ssaidi@eecs.umich.edu if command == 'stability': 2931331Ssaidi@eecs.umich.edu if len(args) < 2: 2941331Ssaidi@eecs.umich.edu raise CommandException 2951331Ssaidi@eecs.umich.edu 2961331Ssaidi@eecs.umich.edu try: 2971331Ssaidi@eecs.umich.edu merge = int(args[0]) 2981331Ssaidi@eecs.umich.edu except ValueError: 2991331Ssaidi@eecs.umich.edu usage() 3001331Ssaidi@eecs.umich.edu stats = info.source.getStat(args[1]) 3011331Ssaidi@eecs.umich.edu info.source.get = "sum" 3021331Ssaidi@eecs.umich.edu 3031309Ssaidi@eecs.umich.edu 3041309Ssaidi@eecs.umich.edu #loop through all the stats selected 3051309Ssaidi@eecs.umich.edu for stat in stats: 3061309Ssaidi@eecs.umich.edu 3071317Ssaidi@eecs.umich.edu print "%s:" % stat.name 3081331Ssaidi@eecs.umich.edu print "%-20s %12s %12s %4s %5s %5s %5s %10s" % \ 3091329Ssaidi@eecs.umich.edu ("run name", "average", "stdev", ">10%", ">1SDV", ">2SDV", "SAMP", "CV") 3101331Ssaidi@eecs.umich.edu print "%-20s %12s %12s %4s %5s %5s %5s %10s" % \ 3111329Ssaidi@eecs.umich.edu ("--------------------", "------------", 3121331Ssaidi@eecs.umich.edu "------------", "----", "-----", "-----", "-----", "----------") 3131309Ssaidi@eecs.umich.edu #loop through all the selected runs 3141309Ssaidi@eecs.umich.edu for run in runs: 3151309Ssaidi@eecs.umich.edu info.display_run = run.run; 3161309Ssaidi@eecs.umich.edu runTicks = info.source.retTicks([ run ]) 3171309Ssaidi@eecs.umich.edu #throw away the first one, it's 0 3181309Ssaidi@eecs.umich.edu runTicks.pop(0) 3191329Ssaidi@eecs.umich.edu info.globalTicks = runTicks 3201331Ssaidi@eecs.umich.edu avg = 0 3211317Ssaidi@eecs.umich.edu stdev = 0 3221317Ssaidi@eecs.umich.edu numoutsideavg = 0 3231318Ssaidi@eecs.umich.edu numoutside1std = 0 3241318Ssaidi@eecs.umich.edu numoutside2std = 0 3251331Ssaidi@eecs.umich.edu pairRunTicks = [] 3261331Ssaidi@eecs.umich.edu if float(stat) == 1e300*1e300: 3271331Ssaidi@eecs.umich.edu continue 3281331Ssaidi@eecs.umich.edu for t in range(0, len(runTicks)-(merge-1), merge): 3291331Ssaidi@eecs.umich.edu tempPair = [] 3301331Ssaidi@eecs.umich.edu for p in range(0,merge): 3311331Ssaidi@eecs.umich.edu tempPair.append(runTicks[t+p]) 3321331Ssaidi@eecs.umich.edu pairRunTicks.append(tempPair) 3331309Ssaidi@eecs.umich.edu #loop through all the various ticks for each run 3341331Ssaidi@eecs.umich.edu for tick in pairRunTicks: 3351331Ssaidi@eecs.umich.edu info.globalTicks = tick 3361331Ssaidi@eecs.umich.edu avg += float(stat) 3371331Ssaidi@eecs.umich.edu avg /= len(pairRunTicks) 3381331Ssaidi@eecs.umich.edu for tick in pairRunTicks: 3391331Ssaidi@eecs.umich.edu info.globalTicks = tick 3401331Ssaidi@eecs.umich.edu val = float(stat) 3411331Ssaidi@eecs.umich.edu stdev += pow((val-avg),2) 3421331Ssaidi@eecs.umich.edu stdev = math.sqrt(stdev / len(pairRunTicks)) 3431331Ssaidi@eecs.umich.edu for tick in pairRunTicks: 3441331Ssaidi@eecs.umich.edu info.globalTicks = tick 3451309Ssaidi@eecs.umich.edu val = float(stat) 3461309Ssaidi@eecs.umich.edu if (val < (avg * .9)) or (val > (avg * 1.1)): 3471317Ssaidi@eecs.umich.edu numoutsideavg += 1 3481317Ssaidi@eecs.umich.edu if (val < (avg - stdev)) or (val > (avg + stdev)): 3491318Ssaidi@eecs.umich.edu numoutside1std += 1 3501318Ssaidi@eecs.umich.edu if (val < (avg - (2*stdev))) or (val > (avg + (2*stdev))): 3511318Ssaidi@eecs.umich.edu numoutside2std += 1 3521331Ssaidi@eecs.umich.edu if avg > 1000: 3531331Ssaidi@eecs.umich.edu print "%-20s %12s %12s %4s %5s %5s %5s %10s" % \ 3541331Ssaidi@eecs.umich.edu (run.name, "%.1f" % avg, "%.1f" % stdev, 3551331Ssaidi@eecs.umich.edu "%d" % numoutsideavg, "%d" % numoutside1std, 3561331Ssaidi@eecs.umich.edu "%d" % numoutside2std, "%d" % len(pairRunTicks), 3571331Ssaidi@eecs.umich.edu "%.3f" % (stdev/avg*100)) 3581331Ssaidi@eecs.umich.edu elif avg > 100: 3591331Ssaidi@eecs.umich.edu print "%-20s %12s %12s %4s %5s %5s %5s %10s" % \ 3601331Ssaidi@eecs.umich.edu (run.name, "%.1f" % avg, "%.1f" % stdev, 3611331Ssaidi@eecs.umich.edu "%d" % numoutsideavg, "%d" % numoutside1std, 3621331Ssaidi@eecs.umich.edu "%d" % numoutside2std, "%d" % len(pairRunTicks), 3631331Ssaidi@eecs.umich.edu "%.5f" % (stdev/avg*100)) 3641331Ssaidi@eecs.umich.edu else: 3651331Ssaidi@eecs.umich.edu print "%-20s %12s %12s %4s %5s %5s %5s %10s" % \ 3661331Ssaidi@eecs.umich.edu (run.name, "%.5f" % avg, "%.5f" % stdev, 3671331Ssaidi@eecs.umich.edu "%d" % numoutsideavg, "%d" % numoutside1std, 3681331Ssaidi@eecs.umich.edu "%d" % numoutside2std, "%d" % len(pairRunTicks), 3691331Ssaidi@eecs.umich.edu "%.7f" % (stdev/avg*100)) 3701309Ssaidi@eecs.umich.edu return 3711309Ssaidi@eecs.umich.edu 3721049Sbinkertn@umich.edu if command == 'stats': 3731049Sbinkertn@umich.edu if len(args) == 0: 3741049Sbinkertn@umich.edu info.source.listStats() 3751049Sbinkertn@umich.edu elif len(args) == 1: 3761049Sbinkertn@umich.edu info.source.listStats(args[0]) 3771049Sbinkertn@umich.edu else: 3781049Sbinkertn@umich.edu raise CommandException 3791049Sbinkertn@umich.edu 3801049Sbinkertn@umich.edu return 3811049Sbinkertn@umich.edu 3821049Sbinkertn@umich.edu if command == 'stat': 3831049Sbinkertn@umich.edu if len(args) != 1: 3841049Sbinkertn@umich.edu raise CommandException 3851049Sbinkertn@umich.edu 3861049Sbinkertn@umich.edu stats = info.source.getStat(args[0]) 3871049Sbinkertn@umich.edu for stat in stats: 3881076Sbinkertn@umich.edu if options.graph: 3891269Sbinkertn@umich.edu graphdata(runs, options, stat.name, stat.name, stat) 3901049Sbinkertn@umich.edu else: 3911301Ssaidi@eecs.umich.edu if options.ticks: 3921301Ssaidi@eecs.umich.edu print 'only displaying sample %s' % options.ticks 3931329Ssaidi@eecs.umich.edu info.globalTicks = [ int(x) for x in options.ticks.split() ] 3941301Ssaidi@eecs.umich.edu 3951165Sbinkertn@umich.edu if options.binned: 3961165Sbinkertn@umich.edu print 'kernel ticks' 3971165Sbinkertn@umich.edu stat.bins = 'kernel' 3981165Sbinkertn@umich.edu printdata(runs, stat) 3991165Sbinkertn@umich.edu 4001165Sbinkertn@umich.edu print 'idle ticks' 4011165Sbinkertn@umich.edu stat.bins = 'idle' 4021165Sbinkertn@umich.edu printdata(runs, stat) 4031165Sbinkertn@umich.edu 4041165Sbinkertn@umich.edu print 'user ticks' 4051165Sbinkertn@umich.edu stat.bins = 'user' 4061165Sbinkertn@umich.edu printdata(runs, stat) 4071165Sbinkertn@umich.edu 4081165Sbinkertn@umich.edu print 'interrupt ticks' 4091301Ssaidi@eecs.umich.edu stat.bins = 'interrupt' 4101165Sbinkertn@umich.edu printdata(runs, stat) 4111165Sbinkertn@umich.edu 4121165Sbinkertn@umich.edu print 'total ticks' 4131165Sbinkertn@umich.edu 4141165Sbinkertn@umich.edu stat.bins = None 4151049Sbinkertn@umich.edu print stat.name 4161049Sbinkertn@umich.edu printdata(runs, stat) 4171049Sbinkertn@umich.edu return 4181049Sbinkertn@umich.edu 4191269Sbinkertn@umich.edu if command == 'formula': 4201269Sbinkertn@umich.edu if len(args) != 1: 4211269Sbinkertn@umich.edu raise CommandException 4221269Sbinkertn@umich.edu 4231269Sbinkertn@umich.edu stats = eval(args[0]) 4241269Sbinkertn@umich.edu for stat in stats: 4251269Sbinkertn@umich.edu if options.graph: 4261269Sbinkertn@umich.edu graphdata(runs, options, stat.name, stat.name, stat) 4271269Sbinkertn@umich.edu else: 4281269Sbinkertn@umich.edu if options.binned: 4291269Sbinkertn@umich.edu print 'kernel ticks' 4301269Sbinkertn@umich.edu stat.bins = 'kernel' 4311269Sbinkertn@umich.edu printdata(runs, stat) 4321269Sbinkertn@umich.edu 4331269Sbinkertn@umich.edu print 'idle ticks' 4341269Sbinkertn@umich.edu stat.bins = 'idle' 4351269Sbinkertn@umich.edu printdata(runs, stat) 4361269Sbinkertn@umich.edu 4371269Sbinkertn@umich.edu print 'user ticks' 4381269Sbinkertn@umich.edu stat.bins = 'user' 4391269Sbinkertn@umich.edu printdata(runs, stat) 4401269Sbinkertn@umich.edu 4411269Sbinkertn@umich.edu print 'interrupt ticks' 4421301Ssaidi@eecs.umich.edu stat.bins = 'interrupt' 4431269Sbinkertn@umich.edu printdata(runs, stat) 4441269Sbinkertn@umich.edu 4451269Sbinkertn@umich.edu print 'total ticks' 4461269Sbinkertn@umich.edu 4471269Sbinkertn@umich.edu stat.bins = None 4481269Sbinkertn@umich.edu print args[0] 4491269Sbinkertn@umich.edu printdata(runs, stat) 4501269Sbinkertn@umich.edu return 4511269Sbinkertn@umich.edu 4521049Sbinkertn@umich.edu if command == 'bins': 4531049Sbinkertn@umich.edu if len(args) == 0: 4541049Sbinkertn@umich.edu info.source.listBins() 4551049Sbinkertn@umich.edu elif len(args) == 1: 4561049Sbinkertn@umich.edu info.source.listBins(args[0]) 4571049Sbinkertn@umich.edu else: 4581049Sbinkertn@umich.edu raise CommandException 4591049Sbinkertn@umich.edu 4601049Sbinkertn@umich.edu return 4611049Sbinkertn@umich.edu 4621049Sbinkertn@umich.edu if command == 'formulas': 4631049Sbinkertn@umich.edu if len(args) == 0: 4641049Sbinkertn@umich.edu info.source.listFormulas() 4651049Sbinkertn@umich.edu elif len(args) == 1: 4661049Sbinkertn@umich.edu info.source.listFormulas(args[0]) 4671049Sbinkertn@umich.edu else: 4681049Sbinkertn@umich.edu raise CommandException 4691049Sbinkertn@umich.edu 4701049Sbinkertn@umich.edu return 4711049Sbinkertn@umich.edu 4721049Sbinkertn@umich.edu if command == 'samples': 4731049Sbinkertn@umich.edu if len(args): 4741049Sbinkertn@umich.edu raise CommandException 4751049Sbinkertn@umich.edu 4761049Sbinkertn@umich.edu info.source.listTicks(runs) 4771049Sbinkertn@umich.edu return 4781049Sbinkertn@umich.edu 4791049Sbinkertn@umich.edu if len(args): 4801049Sbinkertn@umich.edu raise CommandException 4811049Sbinkertn@umich.edu 4821209Sbinkertn@umich.edu system = info.source.__dict__[options.system] 4831209Sbinkertn@umich.edu 4841049Sbinkertn@umich.edu if command == 'usertime': 4851049Sbinkertn@umich.edu import copy 4861604Srdreslin@umich.edu kernel = copy.copy(system.full0.numCycles) 4871049Sbinkertn@umich.edu kernel.bins = 'kernel' 4881049Sbinkertn@umich.edu 4891604Srdreslin@umich.edu user = copy.copy(system.full0.numCycles) 4901049Sbinkertn@umich.edu user.bins = 'user' 4911049Sbinkertn@umich.edu 4921076Sbinkertn@umich.edu if options.graph: 4931269Sbinkertn@umich.edu graphdata(runs, options, 'usertime', 'User Fraction', 4941604Srdreslin@umich.edu user / system.full0.numCycles) 4951049Sbinkertn@umich.edu else: 4961604Srdreslin@umich.edu printdata(runs, user / system.full0.numCycles) 4971049Sbinkertn@umich.edu return 4981049Sbinkertn@umich.edu 4991049Sbinkertn@umich.edu if command == 'ticks': 5001076Sbinkertn@umich.edu if options.binned: 5011049Sbinkertn@umich.edu print 'kernel ticks' 5021604Srdreslin@umich.edu system.full0.numCycles.bins = 'kernel' 5031604Srdreslin@umich.edu printdata(runs, system.full0.numCycles) 5041049Sbinkertn@umich.edu 5051049Sbinkertn@umich.edu print 'idle ticks' 5061604Srdreslin@umich.edu system.full0.numCycles.bins = 'idle' 5071604Srdreslin@umich.edu printdata(runs, system.full0.numCycles) 5081049Sbinkertn@umich.edu 5091049Sbinkertn@umich.edu print 'user ticks' 5101604Srdreslin@umich.edu system.full0.numCycles.bins = 'user' 5111604Srdreslin@umich.edu printdata(runs, system.full0.numCycles) 5121049Sbinkertn@umich.edu 5131049Sbinkertn@umich.edu print 'total ticks' 5141049Sbinkertn@umich.edu 5151604Srdreslin@umich.edu system.full0.numCycles.bins = None 5161604Srdreslin@umich.edu printdata(runs, system.full0.numCycles) 5171049Sbinkertn@umich.edu return 5181049Sbinkertn@umich.edu 5191049Sbinkertn@umich.edu if command == 'packets': 5201604Srdreslin@umich.edu packets = system.tsunami.etherdev0.rxPackets 5211076Sbinkertn@umich.edu if options.graph: 5221269Sbinkertn@umich.edu graphdata(runs, options, 'packets', 'Packets', packets) 5231049Sbinkertn@umich.edu else: 5241049Sbinkertn@umich.edu printdata(runs, packets) 5251049Sbinkertn@umich.edu return 5261049Sbinkertn@umich.edu 5271049Sbinkertn@umich.edu if command == 'ppt' or command == 'tpp': 5281604Srdreslin@umich.edu ppt = system.tsunami.etherdev0.rxPackets / sim_ticks 5291049Sbinkertn@umich.edu printdata(runs, ppt, command == 'tpp') 5301049Sbinkertn@umich.edu return 5311049Sbinkertn@umich.edu 5321049Sbinkertn@umich.edu if command == 'pps': 5331604Srdreslin@umich.edu pps = system.tsunami.etherdev0.rxPackets / sim_seconds 5341076Sbinkertn@umich.edu if options.graph: 5351269Sbinkertn@umich.edu graphdata(runs, options, 'pps', 'Packets/s', pps) 5361049Sbinkertn@umich.edu else: 5371049Sbinkertn@umich.edu printdata(runs, pps) 5381049Sbinkertn@umich.edu return 5391049Sbinkertn@umich.edu 5401049Sbinkertn@umich.edu if command == 'bpt' or command == 'tpb': 5411604Srdreslin@umich.edu bytes = system.tsunami.etherdev0.rxBytes + system.tsunami.etherdev0.txBytes 5421049Sbinkertn@umich.edu bpt = bytes / sim_ticks * 8 5431076Sbinkertn@umich.edu if options.graph: 5441269Sbinkertn@umich.edu graphdata(runs, options, 'bpt', 'bps / Hz', bpt) 5451049Sbinkertn@umich.edu else: 5461049Sbinkertn@umich.edu printdata(runs, bpt, command == 'tpb') 5471049Sbinkertn@umich.edu return 5481049Sbinkertn@umich.edu 5491049Sbinkertn@umich.edu if command == 'bptb' or command == 'tpbb': 5501604Srdreslin@umich.edu bytes = system.tsunami.etherdev0.rxBytes + system.tsunami.etherdev0.txBytes 5511049Sbinkertn@umich.edu 5521049Sbinkertn@umich.edu print 'kernel stats' 5531049Sbinkertn@umich.edu bytes.bins = 'kernel' 5541049Sbinkertn@umich.edu printdata(runs, bytes / ticks) 5551049Sbinkertn@umich.edu 5561049Sbinkertn@umich.edu print 'idle stats' 5571049Sbinkertn@umich.edu bytes.bins = 'idle' 5581049Sbinkertn@umich.edu printdata(runs, bytes / ticks) 5591049Sbinkertn@umich.edu 5601049Sbinkertn@umich.edu print 'user stats' 5611049Sbinkertn@umich.edu bytes.bins = 'user' 5621049Sbinkertn@umich.edu printdata(runs, bytes / ticks) 5631049Sbinkertn@umich.edu 5641049Sbinkertn@umich.edu return 5651049Sbinkertn@umich.edu 5661049Sbinkertn@umich.edu if command == 'bytes': 5671604Srdreslin@umich.edu stat = system.tsunami.etherdev0.rxBytes + system.tsunami.etherdev0.txBytes 5681049Sbinkertn@umich.edu 5691076Sbinkertn@umich.edu if options.binned: 5701049Sbinkertn@umich.edu print '%s kernel stats' % stat.name 5711049Sbinkertn@umich.edu stat.bins = 'kernel' 5721049Sbinkertn@umich.edu printdata(runs, stat) 5731049Sbinkertn@umich.edu 5741049Sbinkertn@umich.edu print '%s idle stats' % stat.name 5751049Sbinkertn@umich.edu stat.bins = 'idle' 5761049Sbinkertn@umich.edu printdata(runs, stat) 5771049Sbinkertn@umich.edu 5781049Sbinkertn@umich.edu print '%s user stats' % stat.name 5791049Sbinkertn@umich.edu stat.bins = 'user' 5801049Sbinkertn@umich.edu printdata(runs, stat) 5811049Sbinkertn@umich.edu 5821049Sbinkertn@umich.edu print '%s total stats' % stat.name 5831049Sbinkertn@umich.edu stat.bins = None 5841049Sbinkertn@umich.edu 5851049Sbinkertn@umich.edu printdata(runs, stat) 5861049Sbinkertn@umich.edu return 5871049Sbinkertn@umich.edu 5881049Sbinkertn@umich.edu if command == 'rxbps': 5891604Srdreslin@umich.edu gbps = system.tsunami.etherdev0.rxBandwidth / 1e9 5901076Sbinkertn@umich.edu if options.graph: 5911269Sbinkertn@umich.edu graphdata(runs, options, 'rxbps', 'Bandwidth (Gbps)', gbps) 5921049Sbinkertn@umich.edu else: 5931049Sbinkertn@umich.edu printdata(runs, gbps) 5941049Sbinkertn@umich.edu return 5951049Sbinkertn@umich.edu 5961049Sbinkertn@umich.edu if command == 'txbps': 5971604Srdreslin@umich.edu gbps = system.tsunami.etherdev0.txBandwidth / 1e9 5981076Sbinkertn@umich.edu if options.graph: 5991269Sbinkertn@umich.edu graphdata(runs, options, 'txbps', 'Bandwidth (Gbps)', gbps) 6001049Sbinkertn@umich.edu else: 6011049Sbinkertn@umich.edu printdata(runs, gbps) 6021049Sbinkertn@umich.edu return 6031049Sbinkertn@umich.edu 6041049Sbinkertn@umich.edu if command == 'bps': 6051604Srdreslin@umich.edu rxbps = system.tsunami.etherdev0.rxBandwidth 6061604Srdreslin@umich.edu txbps = system.tsunami.etherdev0.txBandwidth 6071049Sbinkertn@umich.edu gbps = (rxbps + txbps) / 1e9 6081076Sbinkertn@umich.edu if options.graph: 6091269Sbinkertn@umich.edu graphdata(runs, options, 'bps', 'Bandwidth (Gbps)', gbps) 6101049Sbinkertn@umich.edu else: 6111049Sbinkertn@umich.edu printdata(runs, gbps) 6121049Sbinkertn@umich.edu return 6131049Sbinkertn@umich.edu 6141049Sbinkertn@umich.edu if command == 'misses': 6151604Srdreslin@umich.edu stat = system.l2.overall_mshr_misses 6161076Sbinkertn@umich.edu if options.binned: 6171049Sbinkertn@umich.edu print '%s kernel stats' % stat.name 6181049Sbinkertn@umich.edu stat.bins = 'kernel' 6191049Sbinkertn@umich.edu printdata(runs, stat) 6201049Sbinkertn@umich.edu 6211049Sbinkertn@umich.edu print '%s idle stats' % stat.name 6221049Sbinkertn@umich.edu stat.bins = 'idle' 6231049Sbinkertn@umich.edu printdata(runs, stat) 6241049Sbinkertn@umich.edu 6251049Sbinkertn@umich.edu print '%s user stats' % stat.name 6261049Sbinkertn@umich.edu stat.bins = 'user' 6271049Sbinkertn@umich.edu printdata(runs, stat) 6281049Sbinkertn@umich.edu 6291049Sbinkertn@umich.edu print '%s total stats' % stat.name 6301049Sbinkertn@umich.edu 6311049Sbinkertn@umich.edu stat.bins = None 6321076Sbinkertn@umich.edu if options.graph: 6331269Sbinkertn@umich.edu graphdata(runs, options, 'misses', 'Overall MSHR Misses', stat) 6341049Sbinkertn@umich.edu else: 6351049Sbinkertn@umich.edu printdata(runs, stat) 6361049Sbinkertn@umich.edu return 6371049Sbinkertn@umich.edu 6381049Sbinkertn@umich.edu if command == 'mpkb': 6391604Srdreslin@umich.edu misses = system.l2.overall_mshr_misses 6401604Srdreslin@umich.edu rxbytes = system.tsunami.etherdev0.rxBytes 6411604Srdreslin@umich.edu txbytes = system.tsunami.etherdev0.txBytes 6421049Sbinkertn@umich.edu 6431076Sbinkertn@umich.edu if options.binned: 6441049Sbinkertn@umich.edu print 'mpkb kernel stats' 6451049Sbinkertn@umich.edu misses.bins = 'kernel' 6461049Sbinkertn@umich.edu mpkb = misses / ((rxbytes + txbytes) / 1024) 6471049Sbinkertn@umich.edu printdata(runs, mpkb) 6481049Sbinkertn@umich.edu 6491049Sbinkertn@umich.edu print 'mpkb idle stats' 6501049Sbinkertn@umich.edu misses.bins = 'idle' 6511049Sbinkertn@umich.edu mpkb = misses / ((rxbytes + txbytes) / 1024) 6521049Sbinkertn@umich.edu printdata(runs, mpkb) 6531049Sbinkertn@umich.edu 6541049Sbinkertn@umich.edu print 'mpkb user stats' 6551049Sbinkertn@umich.edu misses.bins = 'user' 6561049Sbinkertn@umich.edu mpkb = misses / ((rxbytes + txbytes) / 1024) 6571049Sbinkertn@umich.edu printdata(runs, mpkb) 6581049Sbinkertn@umich.edu 6591049Sbinkertn@umich.edu print 'mpkb total stats' 6601049Sbinkertn@umich.edu 6611049Sbinkertn@umich.edu mpkb = misses / ((rxbytes + txbytes) / 1024) 6621049Sbinkertn@umich.edu misses.bins = None 6631076Sbinkertn@umich.edu if options.graph: 6641269Sbinkertn@umich.edu graphdata(runs, options, 'mpkb', 'Misses / KB', mpkb) 6651049Sbinkertn@umich.edu else: 6661049Sbinkertn@umich.edu printdata(runs, mpkb) 6671049Sbinkertn@umich.edu return 6681049Sbinkertn@umich.edu 6691269Sbinkertn@umich.edu if command == 'ipkb': 6701604Srdreslin@umich.edu interrupts = system.full0.kern.faults[4] 6711604Srdreslin@umich.edu rxbytes = system.tsunami.etherdev0.rxBytes 6721604Srdreslin@umich.edu txbytes = system.tsunami.etherdev0.txBytes 6731269Sbinkertn@umich.edu 6741269Sbinkertn@umich.edu if options.binned: 6751269Sbinkertn@umich.edu print 'ipkb kernel stats' 6761269Sbinkertn@umich.edu interrupts.bins = 'kernel' 6771269Sbinkertn@umich.edu ipkb = interrupts / ((rxbytes + txbytes) / 1024) 6781269Sbinkertn@umich.edu printdata(runs, ipkb) 6791269Sbinkertn@umich.edu 6801269Sbinkertn@umich.edu print 'ipkb idle stats' 6811269Sbinkertn@umich.edu interrupts.bins = 'idle' 6821269Sbinkertn@umich.edu ipkb = interrupts / ((rxbytes + txbytes) / 1024) 6831269Sbinkertn@umich.edu printdata(runs, ipkb) 6841269Sbinkertn@umich.edu 6851269Sbinkertn@umich.edu print 'ipkb user stats' 6861269Sbinkertn@umich.edu interrupts.bins = 'user' 6871269Sbinkertn@umich.edu ipkb = interrupts / ((rxbytes + txbytes) / 1024) 6881269Sbinkertn@umich.edu printdata(runs, ipkb) 6891269Sbinkertn@umich.edu 6901269Sbinkertn@umich.edu print 'ipkb total stats' 6911269Sbinkertn@umich.edu 6921269Sbinkertn@umich.edu ipkb = interrupts / ((rxbytes + txbytes) / 1024) 6931269Sbinkertn@umich.edu interrupts.bins = None 6941269Sbinkertn@umich.edu if options.graph: 6951269Sbinkertn@umich.edu graphdata(runs, options, 'ipkb', 'Interrupts / KB', ipkb) 6961269Sbinkertn@umich.edu else: 6971269Sbinkertn@umich.edu printdata(runs, ipkb) 6981269Sbinkertn@umich.edu return 6991269Sbinkertn@umich.edu 7001049Sbinkertn@umich.edu if command == 'execute': 7011604Srdreslin@umich.edu printdata(runs, system.full0.ISSUE__count) 7021049Sbinkertn@umich.edu return 7031049Sbinkertn@umich.edu 7041049Sbinkertn@umich.edu if command == 'commit': 7051604Srdreslin@umich.edu printdata(runs, system.full0.COM__count) 7061049Sbinkertn@umich.edu return 7071049Sbinkertn@umich.edu 7081049Sbinkertn@umich.edu if command == 'fetch': 7091604Srdreslin@umich.edu printdata(runs, system.full0.FETCH__count) 7101049Sbinkertn@umich.edu return 7111049Sbinkertn@umich.edu 7121162Sbinkertn@umich.edu if command == 'bpp': 7131604Srdreslin@umich.edu ed = system.tsunami.etherdev0 7141162Sbinkertn@umich.edu bpp = (ed.rxBytes + ed.txBytes) / (ed.rxPackets + ed.txPackets) 7151162Sbinkertn@umich.edu if options.graph: 7161269Sbinkertn@umich.edu graphdata(runs, options, 'bpp', 'Bytes / Packet', bpp) 7171162Sbinkertn@umich.edu else: 7181162Sbinkertn@umich.edu printdata(runs, bpp) 7191162Sbinkertn@umich.edu return 7201162Sbinkertn@umich.edu 7211049Sbinkertn@umich.edu if command == 'rxbpp': 7221604Srdreslin@umich.edu bpp = system.tsunami.etherdev0.rxBytes / system.tsunami.etherdev0.rxPackets 7231162Sbinkertn@umich.edu if options.graph: 7241269Sbinkertn@umich.edu graphdata(runs, options, 'rxbpp', 'Receive Bytes / Packet', bpp) 7251162Sbinkertn@umich.edu else: 7261162Sbinkertn@umich.edu printdata(runs, bpp) 7271049Sbinkertn@umich.edu return 7281049Sbinkertn@umich.edu 7291049Sbinkertn@umich.edu if command == 'txbpp': 7301604Srdreslin@umich.edu bpp = system.tsunami.etherdev0.txBytes / system.tsunami.etherdev0.txPackets 7311162Sbinkertn@umich.edu if options.graph: 7321269Sbinkertn@umich.edu graphdata(runs, options, 'txbpp', 'Transmit Bytes / Packet', bpp) 7331162Sbinkertn@umich.edu else: 7341162Sbinkertn@umich.edu printdata(runs, bpp) 7351162Sbinkertn@umich.edu return 7361162Sbinkertn@umich.edu 7371162Sbinkertn@umich.edu if command == 'rtp': 7381604Srdreslin@umich.edu rtp = system.tsunami.etherdev0.rxPackets / system.tsunami.etherdev0.txPackets 7391162Sbinkertn@umich.edu if options.graph: 7401269Sbinkertn@umich.edu graphdata(runs, options, 'rtp', 'rxPackets / txPackets', rtp) 7411162Sbinkertn@umich.edu else: 7421162Sbinkertn@umich.edu printdata(runs, rtp) 7431162Sbinkertn@umich.edu return 7441162Sbinkertn@umich.edu 7451162Sbinkertn@umich.edu if command == 'rtb': 7461604Srdreslin@umich.edu rtb = system.tsunami.etherdev0.rxBytes / system.tsunami.etherdev0.txBytes 7471162Sbinkertn@umich.edu if options.graph: 7481269Sbinkertn@umich.edu graphdata(runs, options, 'rtb', 'rxBytes / txBytes', rtb) 7491162Sbinkertn@umich.edu else: 7501162Sbinkertn@umich.edu printdata(runs, rtb) 7511049Sbinkertn@umich.edu return 7521049Sbinkertn@umich.edu 7531049Sbinkertn@umich.edu raise CommandException 7541049Sbinkertn@umich.edu 7551049Sbinkertn@umich.edu 7561049Sbinkertn@umich.educlass Options: pass 7571049Sbinkertn@umich.edu 7581049Sbinkertn@umich.eduif __name__ == '__main__': 7591049Sbinkertn@umich.edu import getpass 7601049Sbinkertn@umich.edu 7611049Sbinkertn@umich.edu options = Options() 7621049Sbinkertn@umich.edu options.host = 'zizzer.pool' 7631049Sbinkertn@umich.edu options.db = None 7641049Sbinkertn@umich.edu options.passwd = '' 7651049Sbinkertn@umich.edu options.user = getpass.getuser() 7661049Sbinkertn@umich.edu options.runs = None 7671049Sbinkertn@umich.edu options.system = 'client' 7681049Sbinkertn@umich.edu options.get = None 7691076Sbinkertn@umich.edu options.binned = False 7701076Sbinkertn@umich.edu options.graph = False 7711301Ssaidi@eecs.umich.edu options.ticks = False 7721049Sbinkertn@umich.edu 7731308Ssaidi@eecs.umich.edu opts, args = getopts(sys.argv[1:], '-6BEFGd:g:h:pr:s:u:T:') 7741049Sbinkertn@umich.edu for o,a in opts: 7751049Sbinkertn@umich.edu if o == '-B': 7761049Sbinkertn@umich.edu options.binned = True 7771049Sbinkertn@umich.edu if o == '-E': 7781049Sbinkertn@umich.edu printval.mode = 'E' 7791049Sbinkertn@umich.edu if o == '-F': 7801049Sbinkertn@umich.edu printval.mode = 'F' 7811049Sbinkertn@umich.edu if o == '-G': 7821049Sbinkertn@umich.edu options.graph = True; 7831049Sbinkertn@umich.edu if o == '-d': 7841049Sbinkertn@umich.edu options.db = a 7851049Sbinkertn@umich.edu if o == '-g': 7861049Sbinkertn@umich.edu options.get = a 7871049Sbinkertn@umich.edu if o == '-h': 7881049Sbinkertn@umich.edu options.host = a 7891049Sbinkertn@umich.edu if o == '-p': 7901049Sbinkertn@umich.edu options.passwd = getpass.getpass() 7911049Sbinkertn@umich.edu if o == '-r': 7921049Sbinkertn@umich.edu options.runs = a 7931049Sbinkertn@umich.edu if o == '-u': 7941049Sbinkertn@umich.edu options.user = a 7951049Sbinkertn@umich.edu if o == '-s': 7961049Sbinkertn@umich.edu options.system = a 7971301Ssaidi@eecs.umich.edu if o == '-T': 7981301Ssaidi@eecs.umich.edu options.ticks = a 7991049Sbinkertn@umich.edu 8001049Sbinkertn@umich.edu if len(args) == 0: 8011049Sbinkertn@umich.edu usage() 8021049Sbinkertn@umich.edu 8031049Sbinkertn@umich.edu command = args[0] 8041049Sbinkertn@umich.edu args = args[1:] 8051049Sbinkertn@umich.edu 8061049Sbinkertn@umich.edu try: 8071049Sbinkertn@umich.edu commands(options, command, args) 8081049Sbinkertn@umich.edu except CommandException: 8091049Sbinkertn@umich.edu usage() 810