diff options
| author | Mac Mollison <mollison@cs.unc.edu> | 2009-02-25 03:01:59 -0500 |
|---|---|---|
| committer | Mac Mollison <mollison@cs.unc.edu> | 2009-02-25 03:01:59 -0500 |
| commit | def8a0dcfae2ec139e040f8b92a21ce2febb3af9 (patch) | |
| tree | 4a77db75449147ce0986613db6e7281848bca38a | |
| parent | bb3dbe9e796dda0ea2a01b7648dd6a7023560330 (diff) | |
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
| -rwxr-xr-x | run.py | 54 | ||||
| -rwxr-xr-x | sta.py | 88 |
2 files changed, 129 insertions, 13 deletions
| @@ -6,23 +6,51 @@ import sta | |||
| 6 | ###################################### | 6 | ###################################### |
| 7 | 7 | ||
| 8 | def main(): | 8 | def main(): |
| 9 | myEDF() | ||
| 10 | #myTrace() | ||
| 11 | #switchToTrace() | ||
| 12 | #releaseTrace() | ||
| 9 | 13 | ||
| 10 | # A sample trace | 14 | def myEDF(): |
| 11 | trace = sta.Trace(g6_list) | 15 | test = sta.EDF(g6_list) |
| 12 | trace.filter("pid==4125") | 16 | test.run_test() |
| 13 | trace.sort('job') | 17 | |
| 18 | def myTrace(): | ||
| 19 | events_trace = sta.Trace(g6_list) | ||
| 20 | events_trace.filter('type!=1') | ||
| 21 | events_trace.filter('type!=2') | ||
| 22 | events_trace.filter('type!=3') | ||
| 23 | events_trace.filter('type!=4') | ||
| 24 | events_trace.filter('type!=8') | ||
| 25 | events_trace.filter('type!=9') | ||
| 26 | events_trace.filter('type!=10') | ||
| 27 | events_trace.sort('when') | ||
| 28 | events_trace.print_count(True) | ||
| 29 | events_trace.print_records() | ||
| 30 | |||
| 31 | def switchToTrace(): | ||
| 32 | events_trace = sta.Trace(g6_list) | ||
| 33 | events_trace.filter('type==5') | ||
| 34 | events_trace.sort('when') | ||
| 35 | events_trace.print_count(True) | ||
| 36 | events_trace.print_records() | ||
| 37 | |||
| 38 | def releaseTrace(): | ||
| 39 | events_trace = sta.Trace(g6_list) | ||
| 40 | events_trace.filter('type==3') | ||
| 41 | events_trace.sort('release_time') | ||
| 42 | events_trace.print_count(True) | ||
| 43 | events_trace.print_records() | ||
| 44 | |||
| 45 | def sampleTrace(): | ||
| 46 | """A sample trace""" | ||
| 47 | trace.filter('pid==4129') | ||
| 48 | trace.filter('when>1323753839') | ||
| 49 | trace.filter('when<1331677799') | ||
| 50 | trace.sort('when') | ||
| 14 | trace.print_count(True) | 51 | trace.print_count(True) |
| 15 | trace.print_records() | 52 | trace.print_records() |
| 16 | 53 | ||
| 17 | #Some other things you can do (old commands I've used) | ||
| 18 | #trace.filter("exec_time>8828") | ||
| 19 | #trace.filter("job==12") | ||
| 20 | #trace.filter("when>2000000000") | ||
| 21 | #trace.filter("when<2500000000") | ||
| 22 | #trace.filter("forced?==True") | ||
| 23 | #trace.filter("type==1") | ||
| 24 | #trace.filter("type!=3") | ||
| 25 | |||
| 26 | 54 | ||
| 27 | ###################################### | 55 | ###################################### |
| 28 | # Put lists of your trace files here # | 56 | # Put lists of your trace files here # |
| @@ -111,6 +111,94 @@ class Trace: | |||
| 111 | print("") | 111 | print("") |
| 112 | 112 | ||
| 113 | 113 | ||
| 114 | ################## | ||
| 115 | # EDF class # | ||
| 116 | ################## | ||
| 117 | |||
| 118 | class EDF: | ||
| 119 | """Object representing an EDF test""" | ||
| 120 | |||
| 121 | def __init__(self,trace_files): | ||
| 122 | """Create an EDF test""" | ||
| 123 | self.trace_files = trace_files | ||
| 124 | |||
| 125 | def run_test(self): | ||
| 126 | |||
| 127 | #Build a trace of releases | ||
| 128 | release_trace = Trace(self.trace_files) | ||
| 129 | release_trace.filter('type==3') | ||
| 130 | release_trace.filter('type==3') | ||
| 131 | release_trace.sort('release_time') | ||
| 132 | releases = list(release_trace.iter) | ||
| 133 | print(str(len(releases))) | ||
| 134 | #This is a hack for the g6 set to get rid of initial job2 releases | ||
| 135 | releases = releases[28:] | ||
| 136 | print(str(len(releases))) | ||
| 137 | |||
| 138 | #Build a trace of scheduler events (only type 5, 6, and 7) | ||
| 139 | events_trace = Trace(self.trace_files) | ||
| 140 | events_trace.filter('type!=1') | ||
| 141 | events_trace.filter('type!=2') | ||
| 142 | events_trace.filter('type!=3') | ||
| 143 | events_trace.filter('type!=4') | ||
| 144 | events_trace.filter('type!=8') | ||
| 145 | events_trace.filter('type!=9') | ||
| 146 | events_trace.filter('type!=10') | ||
| 147 | events_trace.sort('when') | ||
| 148 | events = list(events_trace.iter) | ||
| 149 | |||
| 150 | #Do the test | ||
| 151 | started_releases = [] | ||
| 152 | num_errors = 0 | ||
| 153 | for event in events: | ||
| 154 | #StSwitchToData | ||
| 155 | if event['type'] == 5: | ||
| 156 | i = 0 | ||
| 157 | while True: | ||
| 158 | if (event['pid'] == releases[i]['pid'] and | ||
| 159 | event['job'] == releases[i]['job']): | ||
| 160 | started_releases.append(releases[i]) | ||
| 161 | print("="*50) | ||
| 162 | print("Valid SwitchTo:") | ||
| 163 | print(event) | ||
| 164 | print(releases[i]) | ||
| 165 | break | ||
| 166 | elif(releases[i]['release_time'] == | ||
| 167 | releases[i+1]['release_time']): | ||
| 168 | i += 1 | ||
| 169 | #print("Trying next...") | ||
| 170 | continue | ||
| 171 | else: | ||
| 172 | num_errors += 1 | ||
| 173 | print("="*50) | ||
| 174 | print('Invalid SwitchTo:') | ||
| 175 | print(event) | ||
| 176 | print(releases[0]) | ||
| 177 | print('Try counter: ' + str(i)) | ||
| 178 | break | ||
| 179 | #StSwitchAwayData | ||
| 180 | elif event['type'] == 6: | ||
| 181 | #Try to find the release among those started; | ||
| 182 | def func(release): | ||
| 183 | return (release['job'] == event['job'] and | ||
| 184 | release['pid'] == event['pid']) | ||
| 185 | possible_release = list(filter(func,started_releases)) | ||
| 186 | #Only take action if found (it may just be carrying over from | ||
| 187 | # previous job, in which case it's already on the releases | ||
| 188 | # list) | ||
| 189 | if len(possible_release) > 0: | ||
| 190 | release = possible_release[0] | ||
| 191 | releases.append(release) | ||
| 192 | def sortfunc(release): | ||
| 193 | return release['release_time'] | ||
| 194 | releases = sorted(releases,key=func) | ||
| 195 | #input("Continue?") | ||
| 196 | |||
| 197 | #Test completed | ||
| 198 | print("Test completed!") | ||
| 199 | print("Number of errors: " + str(num_errors)) | ||
| 200 | |||
| 201 | |||
| 114 | #################################### | 202 | #################################### |
| 115 | # Types for binary data conversion # | 203 | # Types for binary data conversion # |
| 116 | #################################### | 204 | #################################### |
