Add proper per-file copyright notices/licenses and top-level license.
[bluesky.git] / microbench / parse-results.py
index 64a17d3..cfc826d 100755 (executable)
@@ -1,6 +1,6 @@
 #!/usr/bin/python2
 
-import os, re
+import os, re, sys
 
 def load_results(prefix):
     settings_file = open(prefix + ".settings")
@@ -31,6 +31,11 @@ def load_results(prefix):
     return (settings, results)
 
 def extract(data, params={}, ty='read', index=0):
+    if ty == 'mixed':
+        ty = ('read', 'write')
+    else:
+        ty = (ty,)
+
     results = {}
     for (s, r) in data:
         match = True
@@ -40,26 +45,51 @@ def extract(data, params={}, ty='read', index=0):
 
         ops = int(s['BENCH_OPS'])
 
-        vals = [x[ty][index] for x in r]
-        vals = vals[5:]
+        vs = 0.0
+        for t in ty:
+            vals = [x[t][index] for x in r]
+            vals = vals[5:]
+            vs += sum(vals) / (len(vals) or 1)
+        results[ops] = vs
 
-        results[ops] = sum(vals) / len(vals)
     return results
 
 data = []
 if __name__ == '__main__':
-    for f in os.listdir('results'):
+    dirname = '20110310'
+    for f in os.listdir(dirname):
         if f.endswith('.settings'):
-            data.append(load_results('results/' + f[:-len('.settings')]))
+            data.append(load_results(dirname + '/' + f[:-len('.settings')]))
+
+ratios = {'read': '0.0', 'write': '1.0', 'mixed': '0.5'}
+
+blocksizes = set(int(s[0]['BENCH_BLOCKSIZE'])
+                   or int(s[0]['BENCH_FILESIZE'])
+                 for s in data)
+print blocksizes
+sizes = set(int(s[0]['BENCH_FILESIZE']) * int(s[0]['BENCH_FILECOUNT']) / 1024**2
+                for s in data)
+print sizes
 
-for size in [128, 512, 1024, 2048]:
-    params = {'BLUESKY_TARGET': 'native', 'BENCH_WRITERATIO': '1.0',
-              'BENCH_FILECOUNT': str(size / 4)}
+for size in sorted(sizes):
+    for blocksize in sorted(blocksizes):
+        for ratio in ratios:
+            params = {'BLUESKY_TARGET': 's3:mvrable-bluesky-west',
+                      'BENCH_WRITERATIO': ratios[ratio],
+                      'BENCH_FILECOUNT': str(size),
+                      'BENCH_BLOCKSIZE': str(blocksize)}
+            basesize = 1 << 20
+            if blocksize < basesize:
+                params['BENCH_BLOCKSIZE'] = str(blocksize)
+                params['BENCH_FILESIZE'] = str(basesize)
+            elif blocksize >= basesize:
+                params['BENCH_BLOCKSIZE'] = str(0)
+                params['BENCH_FILESIZE'] = str(blocksize)
 
-    d0 = extract(data, params, ty='write', index=0)
-    d1 = extract(data, params, ty='write', index=1)
+            d0 = extract(data, params, ty=ratio, index=0)
+            d1 = extract(data, params, ty=ratio, index=1)
 
-    fp = open('%s-%d-write.data' % (params['BLUESKY_TARGET'], size), 'w')
-    for k in sorted(d0.keys()):
-        fp.write("%d\t%f\t%f\n" % (k, d0[k], d1[k]))
-    fp.close()
+            fp = open('%s-%d-%s-%dk.data' % (params['BLUESKY_TARGET'], size, ratio, blocksize / 1024), 'w')
+            for k in sorted(d0.keys()):
+                fp.write("%d\t%f\t%f\n" % (k, d0[k], d1[k]))
+            fp.close()