diff --git a/wally/main.py b/wally/main.py
index 497bdac..36a2690 100644
--- a/wally/main.py
+++ b/wally/main.py
@@ -159,9 +159,9 @@
     ipython_parser = subparsers.add_parser('ipython', help=ipython_help)
     ipython_parser.add_argument("storage_dir", help="Storage path")
     # ---------------------------------------------------------------------
-    jupyter_help = 'run ipython in prepared environment'
-    jupyter_parser = subparsers.add_parser('jupyter', help=jupyter_help)
-    jupyter_parser.add_argument("storage_dir", help="Storage path")
+    # jupyter_help = 'run jupyter in prepared environment'
+    # jupyter_parser = subparsers.add_parser('jupyter', help=jupyter_help)
+    # jupyter_parser.add_argument("storage_dir", help="Storage path")
 
     # ---------------------------------------------------------------------
     test_parser = subparsers.add_parser('test', help='run tests')
diff --git a/wally/openstack.py b/wally/openstack.py
index 16b9db6..575edc7 100644
--- a/wally/openstack.py
+++ b/wally/openstack.py
@@ -49,22 +49,25 @@
     if 'openstack' in cfg.clouds:
         os_cfg = cfg.clouds['openstack']
         if 'OPENRC' in os_cfg:
-            logger.info("Using OS credentials from " + os_cfg['OPENRC'])
-            creds_tuple = get_creds_openrc(os_cfg['OPENRC'])
-            os_creds = OSCreds(*creds_tuple)
-        elif 'ENV' in os_cfg:
-            logger.info("Using OS credentials from shell environment")
-            os_creds = get_openstack_credentials()
-        elif 'OS_TENANT_NAME' in os_cfg:
-            logger.info("Using predefined credentials")
-            os_creds = OSCreds(os_cfg['OS_USERNAME'].strip(),
-                               os_cfg['OS_PASSWORD'].strip(),
-                               os_cfg['OS_TENANT_NAME'].strip(),
-                               os_cfg['OS_AUTH_URL'].strip(),
-                               os_cfg.get('OS_INSECURE', False))
+            sett = os_cfg['OPENRC']
+            if isinstance(sett, str):
+                if 'ENV' == sett:
+                    logger.info("Using OS credentials from shell environment")
+                    os_creds = get_openstack_credentials()
+                else:
+                    logger.info("Using OS credentials from " + os_cfg['OPENRC'])
+                    creds_tuple = get_creds_openrc(sett)
+                    os_creds = OSCreds(*creds_tuple)
+            else:
+                logger.info("Using predefined credentials")
+                os_creds = OSCreds(sett['OS_USERNAME'].strip(),
+                                   sett['OS_PASSWORD'].strip(),
+                                   sett['OS_TENANT_NAME'].strip(),
+                                   sett['OS_AUTH_URL'].strip(),
+                                   sett.get('OS_INSECURE', False))
 
-        elif 'OS_INSECURE' in os_cfg:
-            force_insecure = os_cfg.get('OS_INSECURE', False)
+        if 'insecure' in os_cfg:
+            force_insecure = os_cfg.get('insecure', False)
 
     if os_creds is None and 'fuel' in cfg.clouds and 'openstack_env' in cfg.clouds['fuel'] and \
             ctx.fuel_openstack_creds is not None:
diff --git a/wally/plot.py b/wally/plot.py
index f809d19..b1ee60f 100644
--- a/wally/plot.py
+++ b/wally/plot.py
@@ -121,6 +121,7 @@
 
     # limit and label x spine
     pp.ax.set_xlim(extra_x_space, len(iosums) + extra_x_space)
+    pp.ax.set_ylim(bottom=0)
     pp.ax.set_xticks(xpos)
     pp.ax.set_xticklabels(["{0}*{1}={2}".format(iosum.qd, iosum.nodes_count, iosum.qd * iosum.nodes_count)
                           for iosum in iosums],
diff --git a/wally/report.py b/wally/report.py
index f42c7c9..46c5599 100644
--- a/wally/report.py
+++ b/wally/report.py
@@ -812,26 +812,6 @@
 # IO time and QD
 class QDIOTimeHeatmap(JobReporter):
     def get_divs(self, suite: SuiteConfig, job: JobConfig) -> Iterator[Tuple[str, str, HTMLBlock]]:
-
-        # journal_devs = None
-        # storage_devs = None
-        # test_nodes_devs = ['rbd0']
-        #
-        # for node in self.rstorage.load_nodes():
-        #     if node.roles.intersection(STORAGE_ROLES):
-        #         cjd = set(node.params['ceph_journal_devs'])
-        #         if journal_devs is None:
-        #             journal_devs = cjd
-        #         else:
-        #             assert journal_devs == cjd, "{!r} != {!r}".format(journal_devs, cjd)
-        #
-        #         csd = set(node.params['ceph_storage_devs'])
-        #         if storage_devs is None:
-        #             storage_devs = csd
-        #         else:
-        #             assert storage_devs == csd, "{!r} != {!r}".format(storage_devs, csd)
-        #
-
         trange = (job.reliable_info_range[0] // 1000, job.reliable_info_range[1] // 1000)
         test_nc = len(list(find_nodes_by_roles(self.rstorage.storage, ['testnode'])))
 
@@ -844,8 +824,6 @@
             yield Menu1st.engineering_per_job, job.summary, HTMLBlock(html.H3(html.center(caption)))
 
             # QD heatmap
-            # nodes = find_nodes_by_roles(self.rstorage.storage, roles)
-
             ioq2d = find_sensors_to_2d(self.rstorage, trange, dev_role=dev_role, sensor='block-io', metric='io_queue')
 
             ds = DataSource(suite.storage_id, job.storage_id, AGG_TAG, 'block-io', dev_role,
@@ -1020,7 +998,9 @@
         nodes = ctx.rstorage.load_nodes()
         update_storage_selector(ctx.rstorage, ctx.devs_locator, nodes)
 
-        job_reporters_cls = [StatInfo, LoadToolResults, Resources, ClusterLoad, CPULoadPlot, QDIOTimeHeatmap]
+        # role2ds = roles_for_sensors(ctx.rstorage)
+
+        job_reporters_cls = [StatInfo, LoadToolResults, Resources, ClusterLoad, CPULoadPlot]  #, QDIOTimeHeatmap]
         # job_reporters_cls = [QDIOTimeHeatmap]
         job_reporters = [rcls(ctx.rstorage, DefStyleProfile, DefColorProfile)
                          for rcls in job_reporters_cls] # type: ignore
diff --git a/wally/resources.py b/wally/resources.py
index a08993d..4074efb 100644
--- a/wally/resources.py
+++ b/wally/resources.py
@@ -122,7 +122,7 @@
 
     cores_per_node = {}
     for node in rstorage.load_nodes():
-        cores_per_node[node.node_id] = sum(cores for _, cores in node.hw_info.cpus)
+        cores_per_node[node.node_id] = 48 # sum(cores for _, cores in node.hw_info.cpus)
 
     for name in cpu_metrics:
         cpu_ts[name] = sum_sensors(rstorage, time_range, node_id=nodes, sensor='system-cpu', metric=name)
diff --git a/wally/suits/io/test.cfg b/wally/suits/io/test.cfg
index 2977d1a..0280fd4 100644
--- a/wally/suits/io/test.cfg
+++ b/wally/suits/io/test.cfg
@@ -1,5 +1,8 @@
 [test1]
-ioengine=libaio
+#ioengine=libaio
+ioengine=rbd
+rbdname=foo
+pool=rbd
 buffered=0
 group_reporting=1
 iodepth=16
@@ -9,11 +12,9 @@
 time_based=1
 wait_for_previous=1
 randrepeat=0
-filename=/dev/rbd1
 size=4G
-ramp_time=10
-runtime=300
-numjobs=16
+ramp_time=0
+runtime=10
 direct=1
 blocksize=60k
-rw=randwrite
+rw=randread
