Check in some minor changes to microbenchmark runs.
[bluesky.git] / microbench / parse-results.py
1 #!/usr/bin/python2
2
3 import os, re
4
5 def load_results(prefix):
6     settings_file = open(prefix + ".settings")
7     results_file = open(prefix + ".results")
8
9     settings = {}
10     for l in settings_file:
11         l = l.strip()
12         try:
13             (k, v) = l.split('=', 1)
14             settings[k] = v
15         except: pass
16
17     results = []
18     result_group = {}
19     for l in results_file:
20         l = l.strip()
21         if len(l) == 0 and len(result_group) > 0:
22             results.append(result_group)
23             result_group = {}
24         m = re.match(r"^(\w+): \[(.*)\]$", l)
25         if m:
26             vals = [float(x.strip()) for x in m.group(2).split(',')]
27             result_group[m.group(1)] = vals
28     if len(result_group) > 0:
29         results.append(result_group)
30
31     return (settings, results)
32
33 def extract(data, params={}, ty='read', index=0):
34     if ty == 'mixed':
35         ty = ('read', 'write')
36     else:
37         ty = (ty,)
38
39     results = {}
40     for (s, r) in data:
41         match = True
42         for (k, v) in params.items():
43             if s[k] != v: match = False
44         if not match: continue
45
46         ops = int(s['BENCH_OPS'])
47
48         vs = 0.0
49         for t in ty:
50             vals = [x[t][index] for x in r]
51             vals = vals[5:]
52             vs += sum(vals) / len(vals)
53         results[ops] = vs
54
55     return results
56
57 data = []
58 if __name__ == '__main__':
59     for f in os.listdir('results'):
60         if f.endswith('.settings'):
61             data.append(load_results('results/' + f[:-len('.settings')]))
62
63 ratios = {'read': '0.0', 'write': '1.0', 'mixed': '0.5'}
64
65 for size in [128, 512, 1024, 2048]:
66     for blocksize in [4096, 32768]:
67         for ratio in ratios:
68             params = {'BLUESKY_TARGET': 's3',
69                       'BENCH_WRITERATIO': ratios[ratio],
70                       'BENCH_FILECOUNT': str(size),
71                       'BENCH_BLOCKSIZE': str(blocksize)}
72
73             d0 = extract(data, params, ty=ratio, index=0)
74             d1 = extract(data, params, ty=ratio, index=1)
75
76             fp = open('%s-%d-%s-%dk.data' % (params['BLUESKY_TARGET'], size, ratio, blocksize / 1024), 'w')
77             for k in sorted(d0.keys()):
78                 fp.write("%d\t%f\t%f\n" % (k, d0[k], d1[k]))
79             fp.close()