summaryrefslogtreecommitdiffstats
path: root/sta.py
diff options
context:
space:
mode:
Diffstat (limited to 'sta.py')
-rwxr-xr-xsta.py88
1 files changed, 88 insertions, 0 deletions
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####################################