a lot of fixes and improvements
diff --git a/scripts/generate_load.py b/scripts/generate_load.py
new file mode 100644
index 0000000..4d43964
--- /dev/null
+++ b/scripts/generate_load.py
@@ -0,0 +1,84 @@
+# BLOCK_SIZES = "1k 4k 64k 256k 1m"
+# OPERATIONS="randwrite write randread read"
+# SYNC_TYPES="s a d"
+# REPEAT_COUNT="3"
+# CONCURRENCES="1 8 64"
+
+from utils import ssize_to_kb
+
+SYNC_FACTOR = "x500"
+DIRECT_FACTOR = "x10000"
+ASYNC_FACTOR = "r2"
+
+
+def make_list(x):
+ if not isinstance(x, (list, tuple)):
+ return [x]
+ return x
+
+HDD_SIZE_KB = 45 * 1000 * 1000
+
+
+def make_load(sizes, opers, sync_types, concurrence,
+ tester_type='iozone', repeat_count=3):
+
+ iodepth = 1
+ for conc in make_list(concurrence):
+ for bsize in make_list(sizes):
+ for oper in make_list(opers):
+ for sync_type in make_list(sync_types):
+
+ # filter out too slow options
+ if bsize in "1k 4k" and sync_type == "a":
+ continue
+
+ # filter out sync reads
+ if oper in "read randread" and sync_type == "s":
+ continue
+
+ if sync_type == "s":
+ size_sync_opts = "--iosize {0} -s".format(SYNC_FACTOR)
+ elif sync_type == "d":
+ if oper == 'randread':
+ assert SYNC_FACTOR[0] == 'x'
+ max_f = int(SYNC_FACTOR[1:])
+ else:
+ max_f = None
+
+ mmax_f = HDD_SIZE_KB / (int(conc) * ssize_to_kb(bsize))
+
+ if max_f is None or mmax_f > max_f:
+ max_f = mmax_f
+
+ assert DIRECT_FACTOR[0] == 'x'
+ if max_f > int(DIRECT_FACTOR[1:]):
+ max_f = DIRECT_FACTOR
+ else:
+ max_f = "x{0}".format(max_f)
+
+ size_sync_opts = "--iosize {0} -d".format(max_f)
+
+ else:
+ size_sync_opts = "--iosize {0}".format(ASYNC_FACTOR)
+
+ # size_sync_opts = get_file_size_opts(sync_type)
+
+ io_opts = "--type {0} ".format(tester_type)
+ io_opts += "-a {0} ".format(oper)
+ io_opts += "--iodepth {0} ".format(iodepth)
+ io_opts += "--blocksize {0} ".format(bsize)
+ io_opts += size_sync_opts + " "
+ io_opts += "--concurrency {0}".format(conc)
+
+ for i in range(repeat_count):
+ yield io_opts
+
+
+sizes = "4k 64k 2m".split()
+opers = "randwrite write randread read".split()
+sync_types = "s a d".split()
+concurrence = "1 8 64".split()
+
+for io_opts in make_load(sizes=sizes, concurrence=concurrence,
+ sync_types=sync_types, opers=opers):
+ print io_opts