diff --git a/wally/main.py b/wally/main.py
index 36d40f0..56d72db 100644
--- a/wally/main.py
+++ b/wally/main.py
@@ -49,7 +49,7 @@
                        LoadStoredNodesStage)
 
 from .report import HtmlReportStage
-from .sensors import StartSensorsStage, CollectSensorsStage
+from .sensors import StartSensorsStage, CollectSensorsStage, StopSensorsStage
 from .console_report import ConsoleReportStage
 
 
@@ -253,7 +253,7 @@
             ExplicitNodesStage(),
             StartSensorsStage(),
             RunTestsStage(),
-            CollectSensorsStage(),
+            StopSensorsStage(),
             ConnectStage(),
             SleepStage(),
             PrepareNodes()]
@@ -299,6 +299,9 @@
         if not opts.dont_collect:
             stages.append(CollectInfoStage())
 
+        if config.no_tests:
+            stages.append(CollectSensorsStage())
+
         argv2 = argv[:]
         if '--ssh-key-passwd' in argv2:
             # don't save ssh key password to storage
diff --git a/wally/run_test.py b/wally/run_test.py
index 9757322..0310712 100755
--- a/wally/run_test.py
+++ b/wally/run_test.py
@@ -2,6 +2,7 @@
 import json
 import copy
 import logging
+import functools
 from typing import List, Tuple, Optional, Union, cast
 
 from cephlib.wally_storage import WallyDB
@@ -272,7 +273,7 @@
 
             test_cls(storage=ctx.rstorage,
                      suite=suite,
-                     on_tests_boundry=lambda before_test: collect_sensors_data(ctx, False, before_test)).run()
+                     on_tests_boundry=functools.partial(collect_sensors_data, ctx)).run()
 
     @classmethod
     def validate_config(cls, cfg: ConfigBlock) -> None:
diff --git a/wally/sensors.py b/wally/sensors.py
index 0aca82e..c03599f 100644
--- a/wally/sensors.py
+++ b/wally/sensors.py
@@ -87,9 +87,15 @@
                 logger.debug("Skip monitoring node %s, as no sensors selected", nid)
 
 
-def collect_sensors_data(ctx: TestRun,
-                         stop: bool = False,
-                         before_test: bool = False):
+def stop_sensors(ctx: TestRun):
+    for node in ctx.nodes:
+        node_id = node.node_id
+        if node_id in ctx.sensors_run_on:
+            node.conn.sensors.stop()
+
+
+def collect_sensors_data(ctx: TestRun, before_test: bool = False):
+    logger.info("Start loading sensors")
     total_sz = 0
 
     # ceph pg and pool data collected separatelly
@@ -112,19 +118,15 @@
     ctime = int(time.time())
 
     if not before_test:
-        logger.info("Start loading sensors")
         for node in ctx.nodes:
             node_id = node.node_id
             if node_id in ctx.sensors_run_on:
-                func = node.conn.sensors.stop if stop else node.conn.sensors.get_updates
-
-                # hack to calculate total transferred size
-                offset_map, compressed_blob, compressed_collected_at_b = func()
-                data_tpl = (offset_map, compressed_blob, compressed_collected_at_b)
+                offset_map, compressed_blob, compressed_collected_at_b = node.conn.sensors.get_updates()
 
                 total_sz += len(compressed_blob) + len(compressed_collected_at_b) + sum(map(len, offset_map)) + \
                     16 * len(offset_map)
 
+                data_tpl = (offset_map, compressed_blob, compressed_collected_at_b)
                 for path, value, is_array, units in sensors_rpc_plugin.unpack_rpc_updates(data_tpl):
                     if path == 'collected_at':
                         ds = DataSource(node_id=node_id, metric='collected_at', tag='csv')
@@ -141,10 +143,10 @@
                             else:
                                 assert metric == 'perf_dump'
                                 tag = 'txt'
-                            ctx.storage.put_raw(value, WallyDB.ceph_metric(node_id=node_id,
-                                                                           metric=metric,
-                                                                           time=ctime,
-                                                                           tag=tag))
+                            ctx.storage.put_raw(value, WallyDB.ceph_metric.format(node_id=node_id,
+                                                                                  metric=metric,
+                                                                                  time=ctime,
+                                                                                  tag=tag))
 
     if future:
         pgs_info, pools_info = future.result()
@@ -159,11 +161,17 @@
     logger.info("Download %sB of sensors data", b2ssize(total_sz))
 
 
-
 class CollectSensorsStage(Stage):
     priority = StepOrder.COLLECT_SENSORS
     config_block = 'sensors'
 
     def run(self, ctx: TestRun) -> None:
-        collect_sensors_data(ctx, True, False)
+        collect_sensors_data(ctx, False)
 
+
+class StopSensorsStage(Stage):
+    priority = StepOrder.STOP_SENSORS
+    config_block = 'sensors'
+
+    def run(self, ctx: TestRun) -> None:
+        stop_sensors(ctx)
diff --git a/wally/stage.py b/wally/stage.py
index 92cd557..f81be8f 100644
--- a/wally/stage.py
+++ b/wally/stage.py
@@ -13,7 +13,8 @@
     START_SENSORS = 40
     TEST = 50
     COLLECT_SENSORS = 60
-    REPORT = 70
+    STOP_SENSORS = 70
+    REPORT = 80
 
 
 class Stage(metaclass=abc.ABCMeta):
diff --git a/wally/suits/io/one_step.cfg b/wally/suits/io/one_step.cfg
index 3e08c8b..507cb9b 100644
--- a/wally/suits/io/one_step.cfg
+++ b/wally/suits/io/one_step.cfg
@@ -5,5 +5,5 @@
 
 [test_{TEST_SUMM}]
 blocksize=60k
-rw=randread
+rw=randwrite
 iodepth=1
\ No newline at end of file
diff --git a/wally/suits/io/rrd_raw.cfg b/wally/suits/io/rrd_raw.cfg
index e7ca82d..935b100 100644
--- a/wally/suits/io/rrd_raw.cfg
+++ b/wally/suits/io/rrd_raw.cfg
@@ -1,6 +1,6 @@
 [test]
-blocksize=4m
-rw=write
+blocksize=4k
+rw=randwrite
 iodepth=1
 ramp_time=0
 runtime=120
@@ -17,8 +17,8 @@
 wait_for_previous=1
 per_job_logs=0
 randrepeat=0
-filename=/media/data/test.db
-size=50G
+filename=/dev/rbd0
+size=1G
 ;verify_pattern=0x00
 buffer_compress_percentage=99
 write_bw_log=/tmp/bw.non-compress.log
