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""" |