diff options
| author | Mac Mollison <mollison@cs.unc.edu> | 2009-02-28 17:23:47 -0500 |
|---|---|---|
| committer | Mac Mollison <mollison@cs.unc.edu> | 2009-02-28 17:23:47 -0500 |
| commit | a67ab292bd7b58b6bebca2c1d4d9105b47b7420c (patch) | |
| tree | 5efa65fa3cef9470529418aac3dac72cb6775c9b | |
| parent | 2d8a5216ab1dda1742652c5de842af63b6706058 (diff) | |
EDF test seems much better, now getting 2329 corrects and 190 errors in
g6
| -rwxr-xr-x | run.py | 2 | ||||
| -rwxr-xr-x | sta.py | 61 |
2 files changed, 40 insertions, 23 deletions
| @@ -20,7 +20,7 @@ def oneCPU(): | |||
| 20 | trace.print_records() | 20 | trace.print_records() |
| 21 | 21 | ||
| 22 | def myEDF(): | 22 | def myEDF(): |
| 23 | test = sta.EDF(g6_list) | 23 | test = sta.EDF(g6_list,0) |
| 24 | test.run_test() | 24 | test.run_test() |
| 25 | 25 | ||
| 26 | def myTrace(): | 26 | def myTrace(): |
| @@ -131,9 +131,10 @@ class Trace: | |||
| 131 | class EDF: | 131 | class EDF: |
| 132 | """Object representing an EDF test""" | 132 | """Object representing an EDF test""" |
| 133 | 133 | ||
| 134 | def __init__(self,trace_files): | 134 | def __init__(self,trace_files, fudge_factor=0): |
| 135 | """Create an EDF test""" | 135 | """Create an EDF test""" |
| 136 | self.trace_files = trace_files | 136 | self.trace_files = trace_files |
| 137 | self.fudge_factor = fudge_factor | ||
| 137 | self.errors = 0 | 138 | self.errors = 0 |
| 138 | self.corrects = 0 | 139 | self.corrects = 0 |
| 139 | 140 | ||
| @@ -156,44 +157,44 @@ class EDF: | |||
| 156 | if record['type'] == 3: | 157 | if record['type'] == 3: |
| 157 | if not self.check_duplicate_release(record): | 158 | if not self.check_duplicate_release(record): |
| 158 | self.runnables.append(record) | 159 | self.runnables.append(record) |
| 159 | debug("Added {0} to runnables" | 160 | debug("{0} became runnable" |
| 160 | .format(Trace.getStr(record))) | 161 | .format(Trace.getStr(record))) |
| 161 | debug(record) | ||
| 162 | 162 | ||
| 163 | #Switch Tos | 163 | #Switch Tos |
| 164 | elif record['type'] == 5: | 164 | elif record['type'] == 5: |
| 165 | release_record = EDF.pop_job(record, self.runnables) | 165 | release_record = EDF.pop_job(record, self.runnables) |
| 166 | self.runnings.append(release_record) | 166 | self.runnings.append(release_record) |
| 167 | debug("Added {0} to runnings" | 167 | check_tuple = self.check_deadline(release_record) |
| 168 | .format(Trace.getStr(release_record))) | 168 | if check_tuple[0] == True: |
| 169 | debug(release_record) | 169 | debug("{0} became running (VALID)" |
| 170 | if self.check_deadline(release_record): | 170 | .format(Trace.getStr(release_record))) |
| 171 | print("Valid") | ||
| 172 | self.corrects += 1 | 171 | self.corrects += 1 |
| 173 | else: | 172 | else: |
| 174 | print("Invalid") | 173 | debug('='*50) |
| 174 | debug("{0} became running (INVALID)" | ||
| 175 | .format(Trace.getStr(release_record))) | ||
| 176 | debug('Deadline of {0} greater than deadline of {1} in the following record:' | ||
| 177 | .format(release_record['deadline'], | ||
| 178 | check_tuple[1]['deadline'])) | ||
| 179 | debug(check_tuple[1]) | ||
| 180 | debug('='*50) | ||
| 175 | self.errors += 1 | 181 | self.errors += 1 |
| 176 | 182 | ||
| 177 | #Switch Aways | 183 | #Switch Aways |
| 178 | elif record['type'] == 6: | 184 | elif record['type'] == 6: |
| 179 | release_record = EDF.pop_job(record, self.runnings) | 185 | release_record = EDF.pop_job(record, self.runnings) |
| 180 | if release_record: | 186 | if release_record: |
| 181 | debug("Removed {0} from runnings" | ||
| 182 | .format(Trace.getStr(release_record))) | ||
| 183 | debug(release_record) | ||
| 184 | self.runnables.append(release_record) | 187 | self.runnables.append(release_record) |
| 185 | debug("Added {0} to runnables" | 188 | debug('{0} went from running to runnable' |
| 186 | .format(Trace.getStr(release_record))) | 189 | .format(Trace.getStr(release_record))) |
| 187 | debug(release_record) | ||
| 188 | 190 | ||
| 189 | #Completions | 191 | #Completions |
| 190 | elif record['type'] == 7: | 192 | elif record['type'] == 7: |
| 191 | release_record = EDF.pop_job(record,self.runnings) | 193 | release_record = EDF.pop_job(record,self.runnings) |
| 192 | if not release_record: | 194 | if not release_record: |
| 193 | release_record = EDF.pop_job(record,self.runnables) | 195 | release_record = EDF.pop_job(record,self.runnables) |
| 194 | debug("Completed {0}, removed from runnings" | 196 | debug('{0} completed' |
| 195 | .format(Trace.getStr(release_record))) | 197 | .format(Trace.getStr(release_record))) |
| 196 | debug(release_record) | ||
| 197 | 198 | ||
| 198 | print('Corrects: {0}'.format(self.corrects)) | 199 | print('Corrects: {0}'.format(self.corrects)) |
| 199 | print('Errors : {0}'.format(self.errors)) | 200 | print('Errors : {0}'.format(self.errors)) |
| @@ -212,14 +213,30 @@ class EDF: | |||
| 212 | def check_deadline(self, record): | 213 | def check_deadline(self, record): |
| 213 | """Check to see if a release record has an equal or earlier deadline | 214 | """Check to see if a release record has an equal or earlier deadline |
| 214 | than all those that are runnable""" | 215 | than all those that are runnable""" |
| 216 | |||
| 217 | #Set up the variables we will need | ||
| 215 | minDeadline = None | 218 | minDeadline = None |
| 216 | for record in self.runnables: | 219 | lowest_deadline_record = None |
| 217 | if minDeadline == None or record['deadline'] < minDeadline: | 220 | diff = None |
| 218 | minDeadline = record['deadline'] | 221 | |
| 219 | if minDeadline == None or minDeadline >= record['deadline']: | 222 | #Find the minimum deadline in runnables and the associated record |
| 220 | return True | 223 | for record2 in self.runnables: |
| 224 | if minDeadline == None or record2['deadline'] < minDeadline: | ||
| 225 | minDeadline = record2['deadline'] | ||
| 226 | lowest_deadline_record = record2 | ||
| 227 | |||
| 228 | #Compute the difference btw. the one we sheduled and the minimum | ||
| 229 | # in runnables | ||
| 230 | if minDeadline == None: | ||
| 231 | diff = 0 | ||
| 232 | else: | ||
| 233 | diff = record['deadline'] - minDeadline | ||
| 234 | |||
| 235 | #Determine if the difference is acceptable | ||
| 236 | if diff <= self.fudge_factor: | ||
| 237 | return (True,lowest_deadline_record) | ||
| 221 | else: | 238 | else: |
| 222 | return False | 239 | return (False,lowest_deadline_record) |
| 223 | 240 | ||
| 224 | def check_duplicate_release(self, record): | 241 | def check_duplicate_release(self, record): |
| 225 | """Make sure we don't get duplicate releases""" | 242 | """Make sure we don't get duplicate releases""" |
