Commit script to parse microbenchmark results.
[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     results = {}
35     for (s, r) in data:
36         match = True
37         for (k, v) in params.items():
38             if s[k] != v: match = False
39         if not match: continue
40
41         ops = int(s['BENCH_OPS'])
42
43         vals = [x[ty][index] for x in r]
44         vals = vals[5:]
45
46         results[ops] = sum(vals) / len(vals)
47     return results
48
49 data = []
50 if __name__ == '__main__':
51     for f in os.listdir('results'):
52         if f.endswith('.settings'):
53             data.append(load_results('results/' + f[:-len('.settings')]))
54
55 for size in [128, 512, 1024, 2048]:
56     params = {'BLUESKY_TARGET': 'native', 'BENCH_WRITERATIO': '1.0',
57               'BENCH_FILECOUNT': str(size / 4)}
58
59     d0 = extract(data, params, ty='write', index=0)
60     d1 = extract(data, params, ty='write', index=1)
61
62     fp = open('%s-%d-write.data' % (params['BLUESKY_TARGET'], size), 'w')
63     for k in sorted(d0.keys()):
64         fp.write("%d\t%f\t%f\n" % (k, d0[k], d1[k]))
65     fp.close()