aboutsummaryrefslogtreecommitdiffstats
path: root/compact_pm_ovd.py
diff options
context:
space:
mode:
Diffstat (limited to 'compact_pm_ovd.py')
-rwxr-xr-xcompact_pm_ovd.py111
1 files changed, 111 insertions, 0 deletions
diff --git a/compact_pm_ovd.py b/compact_pm_ovd.py
new file mode 100755
index 0000000..5024d61
--- /dev/null
+++ b/compact_pm_ovd.py
@@ -0,0 +1,111 @@
1#!/usr/bin/env python
2
3from os.path import splitext, basename, dirname
4from optparse import OptionParser
5
6def decode(name):
7 params = {}
8 parts = name.split('_')
9 for p in parts:
10 kv = p.split('=')
11 k = kv[0]
12 v = kv[1] if len(kv) > 1 else None
13 params[k] = v
14 return params
15
16
17def build_name(dirname, conf, wss_list):
18 if dirname == '':
19 dirname = '.'
20 outname = dirname + '/'
21 if 'hard' in conf:
22 outname += 'hard'
23 else:
24 outname += 'soft'
25 outname += '_pm_plugin=' + conf['plugin'] + '_dist=' + conf['dist']
26 # atm we use only uniform for PM (we also use only light, but...)
27 if 'light' in conf:
28 outname += '_light'
29 elif 'medium' in conf:
30 outname += '_medium'
31 elif 'heavy' in conf:
32 outname += '_heavy'
33
34 outname += '_wss='
35 for wss in wss_list:
36 if wss != wss_list[len(wss_list) - 1]:
37 outname += str(wss) + ','
38 else:
39 outname += str(wss)
40 outname += '_ovd=' + conf['ovd'] + '.csv'
41 return outname
42
43
44class WSSCompactor():
45 def __init__(self):
46 self.ovhead_table = {}
47 self.wss_list = []
48
49 def add_wss(self, wss):
50 self.wss_list.append(int(wss))
51
52 def read_csv(self, datafile):
53 csvf = open(datafile, 'r')
54 # csvf format is: tss, max, avg
55 for line in csvf:
56 tmp = line.split(', ')
57 if tmp[0] in self.ovhead_table.keys():
58 self.ovhead_table[tmp[0]] += [tmp[1], tmp[2].rstrip('\n')]
59 else:
60 self.ovhead_table[tmp[0]] = [tmp[1], tmp[2].rstrip('\n')]
61 csvf.close()
62
63 def write_csv(self, dirname, conf):
64 self.wss_list.sort()
65 outname = build_name(dirname, conf, self.wss_list)
66 csvf = open(outname, 'w')
67 csvf.write('# preemption and migration overhead for ' + \
68 conf['plugin'] + '\n')
69
70 wstr = '# tssize, '
71 for wss in self.wss_list:
72 wstr += 'wss=' + str(wss) + ':(max, avg), '
73 csvf.write(wstr[0:-2] + '\n')
74
75 tkeys = self.ovhead_table.keys()
76 for i in range(0,len(tkeys)):
77 tkeys[i] = int(tkeys[i])
78 tkeys.sort()
79
80 for key in tkeys:
81 wstr = str(key) + ', '
82 for value in self.ovhead_table[str(key)]:
83 wstr += value + ', '
84 wstr = wstr[0:-2]
85 csvf.write(wstr + '\n')
86
87 csvf.close()
88
89def main(args):
90 wsscmpctr = WSSCompactor()
91 for datafile in args:
92 bname = basename(datafile)
93 fname, ext = splitext(bname)
94 if ext != '.csv':
95 self.err("Warning: '%s' doesn't look like a CSV file."
96 % bname)
97 conf = decode(fname)
98 wsscmpctr.add_wss(conf['wss'])
99 wsscmpctr.read_csv(datafile)
100
101 # assume all files in same directory and same kind of overheads
102 wsscmpctr.write_csv(dirname(datafile), conf)
103
104if __name__ == "__main__":
105 usage = "Usage: %prog list-of-file"
106 parser = OptionParser(usage=usage)
107 (options, args) = parser.parse_args()
108 if len(args) < 1:
109 parser.error("Argument missing")
110 sys.exit(-1)
111 main(args)