Commit f05456ea by Tobias Langer

Added script which produces plotable data.

parent e46daa28
#!/usr/bin/env python3
import argparse
import math
def calc_utilization(tasks):
util = 0
for task in tasks:
util += task['wcet'] / task['period']
return util
def main():
parser = argparse.ArgumentParser(description='Generate plotable results from the experiments.')
parser.add_argument('results', type=str, nargs='+', help='file containing experiment results.')
args = parser.parse_args()
out = {}
for result in args.results:
with open(result, 'r') as result_file:
tasks = {}
instances = {}
for line in result_file:
tokens = line.strip().split(' ')
if tokens[0] == 'task':
#task 0 wcet 5 period 39 deadline 32 executions 15480
task_id = int(tokens[1])
wcet = int(tokens[3])
period = int(tokens[5])
deadline = int(tokens[7])
executions = int(tokens[9])
tasks[task_id] = { 'id': task_id, 'wcet': wcet, 'period': period, 'deadline': deadline, 'executions': executions }
instances[task_id] = { 's2s':0, 'e2e':0, 'misses':0, 'response':0 }
elif tokens[0] == 'instance':
#instance 12 start 478 end 487 core_id 0
start = int(tokens[3])
end = int(tokens[5])
if start == 0 and end == 0:
# Ignore not executed tasks, not realy that clean but it
# happens hardly, so nobody should care...
tasks[task_id]['executions'] -= 1
continue
release = start - (start % tasks[task_id]['period'])
abs_deadline = release + tasks[task_id]['deadline']
instances[task_id]['s2s'] += start - release
instances[task_id]['e2e'] += end - release
instances[task_id]['response'] += end - release
if end > abs_deadline:
instances[task_id]['misses'] += 1
else:
continue
util = calc_utilization(tasks.values())
s2s = 0
e2e = 0
misses = 0
response = 0
for task_id, task in instances.items():
s2s += math.sqrt(task['s2s'] / tasks[task_id]['executions'])
e2e += math.sqrt(task['e2e'] / tasks[task_id]['executions'])
misses += task['misses']
response += (task['response'] / tasks[task_id]['executions']) / tasks[task_id]['period']
s2s /= len(tasks)
e2e /= len(tasks)
response /= len(tasks)
outkey = round(util, 2)
try:
out[outkey].append((s2s, e2e, misses, response))
except KeyError:
out[outkey] = [(s2s, e2e, misses, response)]
with open('analysis/s2s.dat', 'w') as s2sfile:
for key, value in out.items():
for elem in value:
print('{}; {}'.format(key, elem[0]), file=s2sfile)
with open('analysis/e2e.dat', 'w') as e2efile:
for key, value in out.items():
for elem in value:
print('{}; {}'.format(key, elem[1]), file=e2efile)
with open('analysis/misses.dat', 'w') as missesfile:
for key, value in out.items():
for elem in value:
print('{}; {}'.format(key, elem[2]), file=missesfile)
with open('analysis/response.dat', 'w') as responsefile:
for key, value in out.items():
for elem in value:
print('{}; {}'.format(key, elem[3]), file=responsefile)
if __name__ == '__main__':
main()
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment