diff options
author | Mac Mollison <mollison@cs.unc.edu> | 2009-02-25 03:01:59 -0500 |
---|---|---|
committer | Mac Mollison <mollison@cs.unc.edu> | 2009-02-25 03:01:59 -0500 |
commit | def8a0dcfae2ec139e040f8b92a21ce2febb3af9 (patch) | |
tree | 4a77db75449147ce0986613db6e7281848bca38a | |
parent | bb3dbe9e796dda0ea2a01b7648dd6a7023560330 (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-x | run.py | 54 | ||||
-rwxr-xr-x | sta.py | 88 |
2 files changed, 129 insertions, 13 deletions
@@ -6,23 +6,51 @@ import sta | |||
6 | ###################################### | 6 | ###################################### |
7 | 7 | ||
8 | def main(): | 8 | def main(): |
9 | myEDF() | ||
10 | #myTrace() | ||
11 | #switchToTrace() | ||
12 | #releaseTrace() | ||
9 | 13 | ||
10 | # A sample trace | 14 | def 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 | |
18 | def 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 | |||
31 | def 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 | |||
38 | def 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 | |||
45 | def 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 # |
@@ -111,6 +111,94 @@ class Trace: | |||
111 | print("") | 111 | print("") |
112 | 112 | ||
113 | 113 | ||
114 | ################## | ||
115 | # EDF class # | ||
116 | ################## | ||
117 | |||
118 | class 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 | #################################### |