From def8a0dcfae2ec139e040f8b92a21ce2febb3af9 Mon Sep 17 00:00:00 2001 From: Mac Mollison Date: Wed, 25 Feb 2009 03:01:59 -0500 Subject: Implemented very ruidamentery EDF test which is hacky and which is giving mainly wrong answers; also, increased complexity of run.py to make it easy to manage doing tests --- run.py | 54 ++++++++++++++++++++++++++++++---------- sta.py | 88 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 129 insertions(+), 13 deletions(-) diff --git a/run.py b/run.py index 5577a32..bcfd068 100755 --- a/run.py +++ b/run.py @@ -6,23 +6,51 @@ import sta ###################################### def main(): + myEDF() + #myTrace() + #switchToTrace() + #releaseTrace() - # A sample trace - trace = sta.Trace(g6_list) - trace.filter("pid==4125") - trace.sort('job') +def myEDF(): + test = sta.EDF(g6_list) + test.run_test() + +def myTrace(): + events_trace = sta.Trace(g6_list) + events_trace.filter('type!=1') + events_trace.filter('type!=2') + events_trace.filter('type!=3') + events_trace.filter('type!=4') + events_trace.filter('type!=8') + events_trace.filter('type!=9') + events_trace.filter('type!=10') + events_trace.sort('when') + events_trace.print_count(True) + events_trace.print_records() + +def switchToTrace(): + events_trace = sta.Trace(g6_list) + events_trace.filter('type==5') + events_trace.sort('when') + events_trace.print_count(True) + events_trace.print_records() + +def releaseTrace(): + events_trace = sta.Trace(g6_list) + events_trace.filter('type==3') + events_trace.sort('release_time') + events_trace.print_count(True) + events_trace.print_records() + +def sampleTrace(): + """A sample trace""" + trace.filter('pid==4129') + trace.filter('when>1323753839') + trace.filter('when<1331677799') + trace.sort('when') trace.print_count(True) trace.print_records() - #Some other things you can do (old commands I've used) - #trace.filter("exec_time>8828") - #trace.filter("job==12") - #trace.filter("when>2000000000") - #trace.filter("when<2500000000") - #trace.filter("forced?==True") - #trace.filter("type==1") - #trace.filter("type!=3") - ###################################### # Put lists of your trace files here # diff --git a/sta.py b/sta.py index 836fc27..b2b92f7 100755 --- a/sta.py +++ b/sta.py @@ -111,6 +111,94 @@ class Trace: print("") +################## +# EDF class # +################## + +class EDF: + """Object representing an EDF test""" + + def __init__(self,trace_files): + """Create an EDF test""" + self.trace_files = trace_files + + def run_test(self): + + #Build a trace of releases + release_trace = Trace(self.trace_files) + release_trace.filter('type==3') + release_trace.filter('type==3') + release_trace.sort('release_time') + releases = list(release_trace.iter) + print(str(len(releases))) + #This is a hack for the g6 set to get rid of initial job2 releases + releases = releases[28:] + print(str(len(releases))) + + #Build a trace of scheduler events (only type 5, 6, and 7) + events_trace = Trace(self.trace_files) + events_trace.filter('type!=1') + events_trace.filter('type!=2') + events_trace.filter('type!=3') + events_trace.filter('type!=4') + events_trace.filter('type!=8') + events_trace.filter('type!=9') + events_trace.filter('type!=10') + events_trace.sort('when') + events = list(events_trace.iter) + + #Do the test + started_releases = [] + num_errors = 0 + for event in events: + #StSwitchToData + if event['type'] == 5: + i = 0 + while True: + if (event['pid'] == releases[i]['pid'] and + event['job'] == releases[i]['job']): + started_releases.append(releases[i]) + print("="*50) + print("Valid SwitchTo:") + print(event) + print(releases[i]) + break + elif(releases[i]['release_time'] == + releases[i+1]['release_time']): + i += 1 + #print("Trying next...") + continue + else: + num_errors += 1 + print("="*50) + print('Invalid SwitchTo:') + print(event) + print(releases[0]) + print('Try counter: ' + str(i)) + break + #StSwitchAwayData + elif event['type'] == 6: + #Try to find the release among those started; + def func(release): + return (release['job'] == event['job'] and + release['pid'] == event['pid']) + possible_release = list(filter(func,started_releases)) + #Only take action if found (it may just be carrying over from + # previous job, in which case it's already on the releases + # list) + if len(possible_release) > 0: + release = possible_release[0] + releases.append(release) + def sortfunc(release): + return release['release_time'] + releases = sorted(releases,key=func) + #input("Continue?") + + #Test completed + print("Test completed!") + print("Number of errors: " + str(num_errors)) + + #################################### # Types for binary data conversion # #################################### -- cgit v1.2.2