fixes
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