summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMac Mollison <mollison@cs.unc.edu>2009-02-28 17:23:47 -0500
committerMac Mollison <mollison@cs.unc.edu>2009-02-28 17:23:47 -0500
commita67ab292bd7b58b6bebca2c1d4d9105b47b7420c (patch)
tree5efa65fa3cef9470529418aac3dac72cb6775c9b
parent2d8a5216ab1dda1742652c5de842af63b6706058 (diff)
EDF test seems much better, now getting 2329 corrects and 190 errors in
g6
-rwxr-xr-xrun.py2
-rwxr-xr-xsta.py61
2 files changed, 40 insertions, 23 deletions
diff --git a/run.py b/run.py
index 624acdf..5fcdb83 100755
--- a/run.py
+++ b/run.py
@@ -20,7 +20,7 @@ def oneCPU():
20 trace.print_records() 20 trace.print_records()
21 21
22def myEDF(): 22def myEDF():
23 test = sta.EDF(g6_list) 23 test = sta.EDF(g6_list,0)
24 test.run_test() 24 test.run_test()
25 25
26def myTrace(): 26def myTrace():
diff --git a/sta.py b/sta.py
index 8c457ae..f3d5408 100755
--- a/sta.py
+++ b/sta.py
@@ -131,9 +131,10 @@ class Trace:
131class EDF: 131class 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"""