Scheduler
shortReport.py
Go to the documentation of this file.
1 #!/usr/bin/env python
2 
3 import os
4 import re
5 import sys
6 import itertools
7 
8 def main():
9  configFilename = ""
10  if (len(sys.argv) < 2):
11  configFilename = "configuration.conf"
12  else:
13  configFilename = sys.argv[1]
14 
15  configPath = "configuration/" + configFilename
16 
17  #let's get the running time:
18  with open(configPath) as f:
19  for line in f:
20  entrymatch = re.match(r'^runningTime *= *([0-9]+)', line) #TODO we should also check that we are in section [scheduler]...
21  if entrymatch:
22  runningTime = float(entrymatch.group(1))
23  print "running time = ", runningTime
24 
25  reportsFolder = "scratch"
26  agingFilename = reportsFolder + "/" + configFilename + "instantaneousAgingReport.txt"
27  reportFilename = reportsFolder + "/" + configFilename + "shortReport.txt"
28  resultfile = "data/" + configFilename
29 
30  with open(reportFilename, 'a') as f:
31  f.write("hello from " + reportFilename + "\n")
32 
33  deadlineMisses(reportsFolder, configFilename, reportFilename, runningTime)
34  temperature(reportsFolder, configFilename, reportFilename);
35 
36 def deadlineMisses(reportsFolder, configFilename, reportFilename, runningTime):
37  ratio = 0.999
38  missFilename = reportsFolder + "/" + configFilename + "deadlineMissesReport.txt"
39  with open(missFilename) as f:
40  with open(reportFilename, "a") as res:
41  f.readline() #discard first line
42  entries = [[float(elem) for elem in line.split(":")] for line in f]
43  if len(entries) == 0:
44  print "miss ok"
45  res.write("deadline misses OK\n");
46  else:
47  if entries[len(entries)-1][0] < runningTime*ratio:
48  print "miss ok"
49  res.write("deadline misses OK\n");
50  else:
51  res.write("deadline misses FAIL\n");
52  print "MISS FAIL"
53  (time, pid) = itertools.izip(*entries)
54  missNumber = str(recursiveSearch(time, ratio*runningTime))
55  res.write("number of misses: " + str(missNumber))
56 
57 
58 
59 
60 # with open(agingFilename) as f:
61 # f.readline()
62 # #entries = [[float(elem) for elem in line.split(":") if (len(elem) == 2 and float(elem[0]) > 0.9*runningTime)] for line in f if line != ""]
63 # entries = [[float(elem) for elem in line.split(":")] for line in f if line != ""]
64 # entries = [e for e in entries if e[0] > 0.9*runningTime]
65 # print "entries are listed"
66 # print "there are ",len(entries) , " entries"
67 # print "entries[0] = ", entries[0]
68 # (time, agingIncrements) = itertools.izip(*entries)
69 # print "time and aging separated"
70 # #index = len(time) - recursiveSearch(time, 0.9*runningTime);
71 # #print "index is ", index
72 # #agingIncrements = agingIncrements[index:len(agingIncrements)-1]
73 # cumul = []
74 # for e in agingIncrements:
75 # if (len(cumul) == 0):
76 # cumul.append(float(e))
77 # else:
78 # cumul.append(cumul[len(cumul)-1] + float(e))
79 # with open(resultfile, 'a') as res:
80 # if len(cumul) > 0:
81 # res.write(configFilename + str(cumul[len(cumul)-1]) + "\n")
82 # else:
83 # res.write(configFilename + "Problem: cumul is empty\n")
84 
85 # with open(agingFilename) as f:
86 # f.readline()
87 # cumul = []
88 # for line in f:
89 # if (line == ""):
90 # continue;
91 # entry = line.split(":")
92 # if (len(cumul) == 0):
93 # cumul.append(float(entry[1]))
94 # else:
95 # if (len(entry) != 2):
96 # print "line is:", line;
97 # cumul.append(cumul[len(cumul)-1] + float(entry[1]))
98 # with open(resultfile, 'a') as res:
99 # if len(cumul) > 0:
100 # res.write(configFilename + str(cumul[len(cumul)-1]) + "\n")
101 # else:
102 # res.write(configFilename + "Problem: cumul is empty\n")
103 
104 def temperature(reportsFolder, configFilename, reportFilename):
105  tempFilename = reportsFolder + "/" + configFilename + "temperatureReport.txt"
106  with open(tempFilename) as f, open(reportFilename, 'a') as shortReportFile:
107  f.readline() #discard first line
108  entries = [[float(elem) for elem in line.split(":")] for line in f]
109  size = len(entries)
110  if size == 0:
111  print "TEMPERATURE ERROR"
112  shortReportFile.write("TEMPERATURE ERROR\n")
113  temps = [e[1] for e in entries]
114  maxTemp = max(temps)
115  print "maximum temperature reached:", maxTemp
116  shortReportFile.write("maximum temperature reached: " + str(maxTemp) + "\n")
117  try:
118  os.remove(tempFilename)
119  except OSError:
120  pass
121 
122 #The goal is to count the number of deadline misses that occur after the cutoff time.
123 #the cutoff time is defined close to the end of the timulation time (eg at 90% of the total simulation time).
124 #To count, we use a dichotomic search.
125 #Maybe ther eexist a built in python function to do it, but I didn't find it...
126 def recursiveSearch(timeArray, cutoffTime):
127  if (len(timeArray) == 0):
128  return 0;
129  if (len(timeArray) == 1):
130  if (timeArray[0] < cutoffTime):
131  return 0;
132  else:
133  return 1;
134  halflen = len(timeArray)/2
135  #print "timeArray[halflen] =", str(timeArray[halflen])
136  if (timeArray[halflen] < cutoffTime):
137  retval = recursiveSearch(timeArray[halflen+1:len(timeArray)], cutoffTime)
138  return retval
139  else:
140  retval = recursiveSearch(timeArray[0:halflen], cutoffTime) + len(timeArray[halflen:len(timeArray)])
141  return retval
142 
143 
144 if __name__ == '__main__':
145  main()
146 
147 
def temperature(reportsFolder, configFilename, reportFilename)
Definition: shortReport.py:104
def main()
Definition: shortReport.py:8
def recursiveSearch(timeArray, cutoffTime)
Definition: shortReport.py:126
def deadlineMisses(reportsFolder, configFilename, reportFilename, runningTime)
Definition: shortReport.py:36