Move to new sensor selector, fix some bugs
diff --git a/wally/suits/io/fio_job.py b/wally/suits/io/fio_job.py
index 3d4e886..6676895 100644
--- a/wally/suits/io/fio_job.py
+++ b/wally/suits/io/fio_job.py
@@ -116,11 +116,12 @@
 
     @property
     def oper(self) -> str:
-        return self.vals['rw']
+        vl = self.vals['rw']
+        return vl if ':' not in vl else vl.split(":")[0]
 
     @property
     def op_type_short(self) -> str:
-        return self.op_type2short[self.vals['rw']]
+        return self.op_type2short[self.oper]
 
     @property
     def thcount(self) -> int:
diff --git a/wally/suits/io/fio_task_parser.py b/wally/suits/io/fio_task_parser.py
index 9ffeed8..5b91885 100644
--- a/wally/suits/io/fio_task_parser.py
+++ b/wally/suits/io/fio_task_parser.py
@@ -210,6 +210,7 @@
 def apply_params(sec: FioJobConfig, params: FioParams) -> FioJobConfig:
     processed_vals = OrderedDict()  # type: Dict[str, Any]
     processed_vals.update(params)
+
     for name, val in sec.vals.items():
         if name in params:
             continue
@@ -300,6 +301,12 @@
 
 
 def fio_cfg_compile(source: str, fname: str, test_params: FioParams) -> Iterator[FioJobConfig]:
+    test_params = test_params.copy()
+
+    if 'RAMPTIME' not in test_params and 'RUNTIME' in test_params:
+        ramp = int(int(test_params['RUNTIME']) * 0.05)
+        test_params['RAMPTIME'] = min(30, max(5, ramp))
+
     it = parse_all_in_1(source, fname)
     it = (apply_params(sec, test_params) for sec in it)
     it = flatmap(process_cycles, it)
diff --git a/wally/suits/io/verify.cfg b/wally/suits/io/verify.cfg
index 9433361..250fade 100644
--- a/wally/suits/io/verify.cfg
+++ b/wally/suits/io/verify.cfg
@@ -6,9 +6,9 @@
 LQDW={% 1, 4, 16, 64 %}
 LQDR={% 1, 4, 16, 64 %}
 
-runtime=600
+runtime={RUNTIME}
 direct=1
-ramp_time=30
+ramp_time={RAMPTIME}
 
 # ---------------------------------------------------------------------
 
@@ -19,24 +19,21 @@
 
 [verify_{TEST_SUMM}]
 blocksize=1m
-rw=read
+rw=randread:16
 iodepth={LQDR}
 
 [verify_{TEST_SUMM}]
 blocksize=4k
 rw=randwrite
-direct=1
 iodepth={QDW}
 
 [verify_{TEST_SUMM}]
 blocksize=4k
 rw=randread
-direct=1
 iodepth={QDR}
 
 [verify_{TEST_SUMM}]
 blocksize=4k
 rw=randwrite
 sync=1
-direct=1
 iodepth=1
diff --git a/wally/suits/itest.py b/wally/suits/itest.py
index b2b3a54..a997b02 100644
--- a/wally/suits/itest.py
+++ b/wally/suits/itest.py
@@ -105,8 +105,8 @@
             run_times = list(map(self.get_expected_runtime, not_in_storage))
 
             if None not in run_times:
-                # +5% - is a rough estimation for additional operations
-                expected_run_time = int(sum(run_times) * 1.05)
+                # +10s - is a rough estimation for additional operations per iteration
+                expected_run_time = int(sum(run_times) + 10 * len(not_in_storage))
 
                 exec_time_s, end_dt_s = get_time_interval_printable_info(expected_run_time)
                 logger.info("Entire test should takes around %s and finish at %s", exec_time_s, end_dt_s)