2.0 ready
diff --git a/wally/suits/io/ceph.cfg b/wally/suits/io/ceph.cfg
index 48c1ec6..4093b06 100644
--- a/wally/suits/io/ceph.cfg
+++ b/wally/suits/io/ceph.cfg
@@ -1,12 +1,12 @@
 [global]
 include defaults.cfg
 
-NUMJOBS_R={% 1, 5, 10, 15, 25, 40, 80 %}
-NUMJOBS_W={% 1, 5, 10, 15, 25 %}
+NUMJOBS_R={% 1, 5, 10, 15, 25, 40, 80, 120 %}
+NUMJOBS_W={% 1, 5, 10, 15, 25, 40 %}
 NUMJOBS_SEQ_OPS={% 1, 3, 10 %}
 
 ramp_time=60
-runtime=240
+runtime=180
 
 # ---------------------------------------------------------------------
 # check different thread count, sync mode. (latency, iops) = func(th_count)
diff --git a/wally/suits/io/cinder_iscsi.cfg b/wally/suits/io/cinder_iscsi.cfg
index 01439b3..b0f575b 100644
--- a/wally/suits/io/cinder_iscsi.cfg
+++ b/wally/suits/io/cinder_iscsi.cfg
@@ -45,5 +45,6 @@
 # ---------------------------------------------------------------------
 [cinder_iscsi_{TEST_SUMM}]
 ramp_time=240
+runtime=240
 blocksize=4k
 rw=randwrite
diff --git a/wally/suits/io/fio.py b/wally/suits/io/fio.py
index f9f1d1b..777ae5f 100644
--- a/wally/suits/io/fio.py
+++ b/wally/suits/io/fio.py
@@ -67,7 +67,7 @@
     return TimeSeriesValue(vals)
 
 
-def load_test_results(cls, folder, run_num):
+def load_test_results(folder, run_num):
     res = {}
     params = None
 
@@ -101,17 +101,6 @@
 
         mm_res[key] = MeasurementMatrix(matr, conn_ids)
 
-    # iops_from_lat_matr = []
-    # for node_ts in mm_res['lat'].data:
-    #     iops_from_lat_matr.append([])
-    #     for thread_ts in node_ts:
-    #         ndt = [(start + ln, 1000000. / val)
-    #                for (start, ln, val) in thread_ts.data]
-    #         new_ts = TimeSeriesValue(ndt)
-    #         iops_from_lat_matr[-1].append(new_ts)
-
-    # mm_res['iops_from_lat'] = MeasurementMatrix(iops_from_lat_matr, conn_ids)
-
     raw_res = {}
     for conn_id in conn_ids:
         fn = os.path.join(folder, "{0}_{1}_rawres.json".format(run_num, conn_id_s))
@@ -124,7 +113,7 @@
     fio_task.vals.update(params['vals'])
 
     config = TestConfig('io', params, None, params['nodes'], folder, None)
-    return cls(config, fio_task, mm_res, raw_res, params['intervals'])
+    return FioRunResult(config, fio_task, mm_res, raw_res, params['intervals'], run_num)
 
 
 class Attrmapper(object):
@@ -192,7 +181,24 @@
     return perc_50 / 1000., perc_95 / 1000.
 
 
-class IOTestResult(TestResults):
+class IOTestResults(object):
+    def __init__(self, suite_name, fio_results, log_directory):
+        self.suite_name = suite_name
+        self.fio_results = fio_results
+        self.log_directory = log_directory
+
+    def __iter__(self):
+        return iter(self.fio_results)
+
+    def __len__(self):
+        return len(self.fio_results)
+
+    def get_yamable(self):
+        items = [(fio_res.summary(), fio_res.idx) for fio_res in self]
+        return {self.suite_name: [self.log_directory] + items}
+
+
+class FioRunResult(TestResults):
     """
     Fio run results
     config: TestConfig
@@ -201,18 +207,15 @@
     raw_result: ????
     run_interval:(float, float) - test tun time, used for sensors
     """
-    def __init__(self, config, fio_task, ts_results, raw_result, run_interval):
+    def __init__(self, config, fio_task, ts_results, raw_result, run_interval, idx):
 
         self.name = fio_task.name.rsplit("_", 1)[0]
         self.fio_task = fio_task
+        self.idx = idx
 
         self.bw = ts_results.get('bw')
         self.lat = ts_results.get('lat')
         self.iops = ts_results.get('iops')
-        # self.iops_from_lat = ts_results.get('iops_from_lat')
-
-        # self.slat = drop_warmup(res.get('clat', None), self.params)
-        # self.clat = drop_warmup(res.get('slat', None), self.params)
 
         res = {"bw": self.bw, "lat": self.lat, "iops": self.iops}
 
@@ -243,9 +246,6 @@
     def summary_tpl(self):
         return get_test_summary_tuple(self.fio_task, len(self.config.nodes))
 
-    def get_yamable(self):
-        return self.summary()
-
     def get_lat_perc_50_95_multy(self):
         lat_mks = collections.defaultdict(lambda: 0)
         num_res = 0
@@ -278,23 +278,18 @@
                              self.params,
                              testnodes_count)
 
-        # ramp_time = self.fio_task.vals.get('ramp_time', 0)
-
         def prepare(data, drop=1):
             if data is None:
                 return data
 
             res = []
             for ts_data in data:
-                # if ramp_time > 0:
-                    # ts_data = ts_data.skip(ramp_time)
-
                 if ts_data.average_interval() < avg_interval:
                     ts_data = ts_data.derived(avg_interval)
 
                 # drop last value on bounds
                 # as they may contains ranges without activities
-                assert len(ts_data.values) >= drop + 1
+                assert len(ts_data.values) >= drop + 1, str(drop) + " " + str(ts_data.values)
 
                 if drop > 0:
                     res.append(ts_data.values[:-drop])
@@ -412,11 +407,13 @@
         self.fio_configs = list(self.fio_configs)
 
     @classmethod
-    def load(cls, folder):
+    def load(cls, suite_name, folder):
+        res = []
         for fname in os.listdir(folder):
             if re.match("\d+_params.yaml$", fname):
                 num = int(fname.split('_')[0])
-                yield load_test_results(IOTestResult, folder, num)
+                res.append(load_test_results(folder, num))
+        return IOTestResults(suite_name, res, folder)
 
     def cleanup(self):
         # delete_file(conn, self.io_py_remote)
@@ -685,7 +682,7 @@
                 with open(os.path.join(self.config.log_directory, fname), "w") as fd:
                     fd.write(dumps(params))
 
-                res = load_test_results(IOTestResult, self.config.log_directory, pos)
+                res = load_test_results(self.config.log_directory, pos)
                 results.append(res)
 
                 if self.max_latency is not None:
@@ -702,7 +699,8 @@
                     if self.min_bw_per_thread > average(test_res['bw']):
                         lat_bw_limit_reached.add(test_descr)
 
-        return results
+        return IOTestResults(self.config.params['cfg'],
+                             results, self.config.log_directory)
 
     def do_run(self, node, barrier, fio_cfg, pos, nolog=False):
         if self.use_sudo:
@@ -938,7 +936,6 @@
         tab.set_cols_align([f.allign for f in cls.fiels_and_header])
         sep = ["-" * f.size for f in cls.fiels_and_header]
         tab.header([f.header for f in cls.fiels_and_header])
-
         prev_k = None
         for item in cls.prepare_data(results):
             if prev_k is not None:
diff --git a/wally/suits/io/hdd.cfg b/wally/suits/io/hdd.cfg
index b3c6293..95c8cec 100644
--- a/wally/suits/io/hdd.cfg
+++ b/wally/suits/io/hdd.cfg
@@ -7,6 +7,7 @@
 
 ramp_time=30
 runtime=120
+
 direct=1
 
 # ---------------------------------------------------------------------
@@ -39,6 +40,5 @@
 # check IOPS randwrite.
 # ---------------------------------------------------------------------
 [hdd_{TEST_SUMM}]
-ramp_time=240
 blocksize=4k
 rw=randwrite
diff --git a/wally/suits/io/rrd.cfg b/wally/suits/io/rrd.cfg
index 86a73c5..27cb1a0 100644
--- a/wally/suits/io/rrd.cfg
+++ b/wally/suits/io/rrd.cfg
@@ -20,15 +20,16 @@
 
 # ---------------------------------------------------------------------
 [test_{TEST_SUMM}]
-blocksize=64m
-rw=randread
-numjobs=1
+blocksize=4k
+rw=randwrite
+sync=1
+numjobs={% 10,50,100 %}
 
 # ---------------------------------------------------------------------
-[test_{TEST_SUMM}]
-blocksize=4m
-rw=write
-numjobs=1
+# [test_{TEST_SUMM}]
+# blocksize=4m
+# rw=write
+# numjobs=1
 
 # ---------------------------------------------------------------------
 # [rws_{TEST_SUMM}]
diff --git a/wally/suits/io/verify.cfg b/wally/suits/io/verify.cfg
index 35cf48a..7882633 100644
--- a/wally/suits/io/verify.cfg
+++ b/wally/suits/io/verify.cfg
@@ -2,24 +2,17 @@
 include defaults.cfg
 
 size={TEST_FILE_SIZE}
-ramp_time=90
-runtime=600
+ramp_time=0
+runtime=15
 
 # ---------------------------------------------------------------------
 [verify_{TEST_SUMM}]
 blocksize=4k
 rw=randwrite
 direct=1
-# numjobs=5
 
-# ---------------------------------------------------------------------
 [verify_{TEST_SUMM}]
 blocksize=4k
 rw=randwrite
+direct=1
 sync=1
-
-# ---------------------------------------------------------------------
-# [verify_{TEST_SUMM}]
-# blocksize=4k
-# rw=randread
-# direct=1