]> git.rkrishnan.org Git - tahoe-lafs/zfec.git/blobdiff - zfec/bench/bench_zfec.py
bench: take --k= and --m= options on the cmdline and print out more explanation of...
[tahoe-lafs/zfec.git] / zfec / bench / bench_zfec.py
index 9ddec17dac5ee185fb0341c25e805707fed203ab..fceaed4f3e98003158743041aecb6d8daf100d05 100644 (file)
@@ -1,7 +1,7 @@
 from zfec import easyfec, Encoder, filefec
 from pyutil import mathutil
 
-import os
+import os, sys
 
 from pyutil import benchutil
 
@@ -20,17 +20,17 @@ d = ""
 ds = []
 easyfecenc = None
 fecenc = None
-def _make_new_rand_data(size):
+def _make_new_rand_data(size, k, m):
     global d, easyfecenc, fecenc
     d = os.urandom(size)
     del ds[:]
-    ds.extend([None]*K)
-    blocksize = mathutil.div_ceil(size, K)
-    for i in range(K):
+    ds.extend([None]*k)
+    blocksize = mathutil.div_ceil(size, k)
+    for i in range(k):
         ds[i] = d[i*blocksize:(i+1)*blocksize]
     ds[-1] = ds[-1] + "\x00" * (len(ds[-2]) - len(ds[-1]))
-    easyfecenc = easyfec.Encoder(K,M)
-    fecenc = Encoder(K,M)
+    easyfecenc = easyfec.Encoder(k, m)
+    fecenc = Encoder(k, m)
 
 import sha
 hashers = [ sha.new() for i in range(M) ]
@@ -40,10 +40,10 @@ def hashem(results, reslenthing):
 
 def _encode_file(N):
     filefec.encode_file(open(FNAME, "rb"), donothing, K, M)
-   
+
 def _encode_file_stringy(N):
     filefec.encode_file_stringy(open(FNAME, "rb"), donothing, K, M)
-   
+
 def _encode_file_stringy_easyfec(N):
     filefec.encode_file_stringy_easyfec(open(FNAME, "rb"), donothing, K, M)
 
@@ -69,13 +69,25 @@ def _encode_data_easyfec(N):
 def _encode_data_fec(N):
     fecenc.encode(ds)
 
-def bench():
+def bench(k, m):
     # for f in [_encode_file_stringy_easyfec, _encode_file_stringy, _encode_file, _encode_file_not_really,]:
     # for f in [_encode_file,]:
     # for f in [_encode_file_not_really, _encode_file_not_really_and_hash, _encode_file, _encode_file_and_hash,]:
     # for f in [_encode_data_not_really, _encode_data_easyfec, _encode_data_fec,]:
+    print "measuring encoding of data with K=%d, M=%d, reporting results in nanoseconds per byte after encoding 4 MB..." % (k, m)
     for f in [_encode_data_fec,]:
-        print f
-        benchutil.bench(f, initfunc=_make_new_rand_data, TOPXP=24, MAXREPS=256, MAXTIME=64)
-
-bench()
+        def _init_func(size):
+            return _make_new_rand_data(size, k, m)
+        for BSIZE in [2**22]:
+            benchutil.rep_bench(f, n=BSIZE, initfunc=_init_func, MAXREPS=64, MAXTIME=None, UNITS_PER_SECOND=1000000000)
+            benchutil.print_bench_footer(UNITS_PER_SECOND=1000000000)
+
+k = K
+m = M
+for arg in sys.argv:
+    if arg.startswith('--k='):
+        k = int(arg[len('--k='):])
+    if arg.startswith('--m='):
+        m = int(arg[len('--m='):])
+
+bench(k, m)