summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMac Mollison <mollison@cs.unc.edu>2009-02-25 03:01:59 -0500
committerMac Mollison <mollison@cs.unc.edu>2009-02-25 03:01:59 -0500
commitdef8a0dcfae2ec139e040f8b92a21ce2febb3af9 (patch)
tree4a77db75449147ce0986613db6e7281848bca38a
parentbb3dbe9e796dda0ea2a01b7648dd6a7023560330 (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-xrun.py54
-rwxr-xr-xsta.py88
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
6###################################### 6######################################
7 7
8def main(): 8def main():
9 myEDF()
10 #myTrace()
11 #switchToTrace()
12 #releaseTrace()
9 13
10 # A sample trace 14def 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
18def 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
31def 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
38def 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
45def 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 #
diff --git a/sta.py b/sta.py
index 836fc27..b2b92f7 100755
--- a/sta.py
+++ b/sta.py
@@ -111,6 +111,94 @@ class Trace:
111 print("") 111 print("")
112 112
113 113
114##################
115# EDF class #
116##################
117
118class 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####################################