release preparation
diff --git a/configs/ceph_perf.yaml b/configs-examples/ceph_fuel.yaml
similarity index 71%
rename from configs/ceph_perf.yaml
rename to configs-examples/ceph_fuel.yaml
index 17b95d3..7018e86 100644
--- a/configs/ceph_perf.yaml
+++ b/configs-examples/ceph_fuel.yaml
@@ -1,11 +1,11 @@
 clouds:
     fuel:
-        url: http://172.16.52.114:8000/
-        creds: admin:admin@admin
-        ssh_creds: root:test37
-        openstack_env: test
+        url: http://FUEL_WEB_IP:8000/
+        creds: USER:PASSWD@TENANT #admin:admin@admin
+        ssh_creds: root:FUEL_SSH_PASSWD
+        openstack_env: OPENSTACK_ENV_NAME
 
-# discover: fuel_openrc_only
+discover: fuel_openrc_only
 
 internal:
     var_dir_root: /tmp/perf_tests
@@ -35,7 +35,9 @@
 tests:
     - start_test_nodes:
         openstack:
-            creds: /tmp/perf_tests/personalistic_sharron/test_openrc
+            # creds: /tmp/perf_tests/personalistic_sharron/test_openrc
+            # creds: ENV
+            creds: clouds
             count: x1
             cfg_name: wally_1024
             network_zone_name: net04
@@ -46,4 +48,4 @@
                 cfg: ceph
                 params:
                     FILENAME: /dev/vdb
-                    NUM_ROUNDS: 1
+                    NUM_ROUNDS: 7
diff --git a/configs-examples/ceph_raw.yaml b/configs-examples/ceph_raw.yaml
new file mode 100644
index 0000000..646945f
--- /dev/null
+++ b/configs-examples/ceph_raw.yaml
@@ -0,0 +1,27 @@
+clouds:
+    ceph: ssh://USER@ANY_CEPH_NODE::KEY_FILE
+
+discover: ceph
+
+explicit_nodes:
+    "ssh://TEST_USER@TESTNODE1::KEY_FILE": testnode
+    "ssh://TEST_USER@TESTNODE2::KEY_FILE": testnode
+    "ssh://TEST_USER@TESTNODE3::KEY_FILE": testnode
+
+sensors:
+    roles_mapping:
+        testnode: system-cpu, block-io, net-io
+        ceph-osd: system-cpu, block-io, net-io
+
+tests:
+    - io:
+        cfg: ceph
+        params:
+            FILENAME: /dev/rbd/rbd/RBD_DEV_NAME_OR_LINK
+            NUM_ROUNDS: 7
+
+internal:
+    var_dir_root: /tmp/perf_tests
+
+logging:
+    extra_logs: 1
diff --git a/configs-examples/hdd.yaml b/configs-examples/hdd.yaml
new file mode 100644
index 0000000..dcb5f9e
--- /dev/null
+++ b/configs-examples/hdd.yaml
@@ -0,0 +1,17 @@
+explicit_nodes:
+    local: testnode
+
+internal:
+    var_dir_root: /tmp/perf_tests
+
+testnode_log_root: /tmp/perf_tests_rem
+
+tests:
+    - io:
+        cfg: hdd
+        params:
+            FILENAME: FILE_ON_USB_HDD
+            NUM_ROUNDS: 7
+
+logging:
+    extra_logs: 1
\ No newline at end of file
diff --git a/configs-examples/local_ceph.yaml b/configs-examples/local_ceph.yaml
new file mode 100644
index 0000000..613894d
--- /dev/null
+++ b/configs-examples/local_ceph.yaml
@@ -0,0 +1,24 @@
+clouds:
+    ceph: local
+
+discover: ceph
+
+explicit_nodes:
+    local: testnode
+
+internal:
+    var_dir_root: /tmp/perf_tests
+
+sensors:
+    roles_mapping:
+        testnode: system-cpu, block-io
+
+tests:
+    - io:
+        cfg: ceph
+        params:
+            FILENAME: CEPH_RBD_DEVICE
+            NUM_ROUNDS: 7
+
+logging:
+    extra_logs: 1
diff --git a/configs/config.yaml b/configs/config.yaml
deleted file mode 100644
index 522fcd3..0000000
--- a/configs/config.yaml
+++ /dev/null
@@ -1,61 +0,0 @@
-clouds:
-    fuel:
-        url: http://172.16.52.112:8000/
-        creds: admin:admin@admin
-        ssh_creds: root:test37
-        openstack_env: test
-
-    openstack:
-        OS_TENANT_NAME: admin
-        OS_USERNAME: admin
-        OS_PASSWORD: admin
-        OS_AUTH_URL: http://172.16.53.3:5000/v2.0/
-
-    ceph: local
-
-discover: fuel, ceph
-
-explicit_nodes:
-    "ssh://root@172.16.52.112:3022:/home/koder/.ssh/id_rsa": testnode
-
-
-internal:
-    var_dir_root: /tmp/perf_tests
-
-vm_configs:
-    wally_1024:
-        image:
-            name: wally_ubuntu
-            url: https://cloud-images.ubuntu.com/trusty/current/trusty-server-cloudimg-amd64-disk1.img
-            creds: "ssh://ubuntu@{ip}::{private_key_path}"
-
-        flavor:
-            name: wally_1024
-            hdd_size: 50
-            ram_size: 1024
-            cpu_count: 1
-
-        vol_sz: 30
-        keypair_name: wally_vm_key
-        name_templ: wally-{group}-{id}
-        aa_group_name: wally-aa-{0}
-        security_group: wally_ssh_to_everyone
-
-tests:
-    - start_test_nodes:
-        openstack:
-            creds: /tmp/perf_tests/personalistic_sharron/test_openrc
-            count: x1
-            cfg_name: wally_1024
-            network_zone_name: net04
-            flt_ip_pool: net04_ext
-
-        tests:
-            - io:
-                cfg: tests/io_scenario_hdd.cfg
-                params:
-                    FILENAME: /opt/xxx.bin
-                    NUM_ROUNDS: 7
-
-logging:
-    extra_logs: 1
\ No newline at end of file
diff --git a/configs/config_ada.yaml b/configs/config_ada.yaml
deleted file mode 100644
index 0dbfada..0000000
--- a/configs/config_ada.yaml
+++ /dev/null
@@ -1,60 +0,0 @@
-sensors:
-    roles_mapping:
-        testnode: system-cpu, block-io
-        compute: system-cpu
-        ceph-osd: system-cpu, block-io
-
-internal:
-    var_dir_root: /tmp/perf_tests
-
-explicit_nodes:
-    # "ssh://ubuntu@216.221.229.20::/root/disk_perf_test_tool/disk_io_perf.pem": testnode
-    # "ssh://ubuntu@216.221.229.21::/root/disk_perf_test_tool/disk_io_perf.pem": testnode
-    # "ssh://ubuntu@216.221.229.18::/root/disk_perf_test_tool/disk_io_perf.pem": testnode
-    # "ssh://ubuntu@216.221.229.17::/root/disk_perf_test_tool/disk_io_perf.pem": testnode
-    # "ssh://ubuntu@216.221.229.19::/root/disk_perf_test_tool/disk_io_perf.pem": testnode
-    # "ssh://ubuntu@216.221.229.22::/root/disk_perf_test_tool/disk_io_perf.pem": testnode
-    "ssh://node-8": compute
-    "ssh://node-9": compute
-    "ssh://node-10": compute
-    "ssh://node-5": ceph-osd
-    "ssh://node-7": ceph-osd
-    "ssh://node-13": ceph-osd
-
-vm_configs:
-    wally_1024:
-        image:
-            name: wally_ubuntu
-            url: https://cloud-images.ubuntu.com/trusty/current/trusty-server-cloudimg-amd64-disk1.img
-            creds: "ssh://ubuntu@{ip}::{private_key_path}"
-
-        flavor:
-            name: wally_1024
-            hdd_size: 50
-            ram_size: 1024
-            cpu_count: 1
-
-        vol_sz: 30
-        keypair_name: wally_vm_key
-        name_templ: wally-{group}-{id}
-        aa_group_name: wally-aa-{0}
-        security_group: wally_ssh_to_everyone
-
-tests:
-    - start_test_nodes:
-        openstack:
-            creds: ENV
-            count: x1
-            cfg_name: wally_1024
-            network_zone_name: net04
-            flt_ip_pool: net04_ext
-
-        tests:
-            - io:
-                cfg: ceph
-                params:
-                    FILENAME: /dev/vdb
-                    NUM_ROUNDS: 7
-
-logging:
-    extra_logs: 1
diff --git a/configs/config_vm_scan.yaml b/configs/config_vm_scan.yaml
deleted file mode 100644
index c9a91f7..0000000
--- a/configs/config_vm_scan.yaml
+++ /dev/null
@@ -1,76 +0,0 @@
-clouds:
-    fuel:
-        url: http://172.16.52.112:8000/
-        creds: admin:admin@admin
-        ssh_creds: root:test37
-        openstack_env: test
-
-    openstack:
-        OS_TENANT_NAME: admin
-        OS_USERNAME: admin
-        OS_PASSWORD: admin
-        OS_AUTH_URL: http://172.16.53.3:5000/v2.0/
-
-    ceph: local
-
-discover: fuel, ceph
-
-explicit_nodes:
-    "ssh://root@172.16.52.112:3022:/home/koder/.ssh/id_rsa": testnode
-
-
-internal:
-    var_dir_root: /tmp/perf_tests
-
-node_configs:
-    io_1024:
-        img_name: disk_io_perf
-        flavor_name: disk_io_perf.256
-        keypair_name: disk_io_perf
-        network_zone_name: novanetwork
-        flt_ip_pool: nova
-        creds: "ssh://ubuntu@{0}::disk_io_perf.pem"
-        name_templ: disk_io_perf-{0}
-
-tests:
-    - start_test_nodes:
-        openstack:
-            creds: clouds
-            vm_params:
-                count: x1
-                config: io_1024
-        tests:
-            - io:
-                cfg: tests/io_scenario_hdd.cfg
-                params:
-                    FILENAME: /opt/xxx.bin
-                    NUM_ROUNDS: 7
-
-    - start_test_nodes:
-        openstack:
-            creds: clouds
-            vm_params:
-                count: x2
-                config: io_1024
-        tests:
-            - io:
-                cfg: tests/io_scenario_hdd.cfg
-                params:
-                    FILENAME: /opt/xxx.bin
-                    NUM_ROUNDS: 7
-
-    - start_test_nodes:
-        openstack:
-            creds: clouds
-            vm_params:
-                count: x3
-                config: io_1024
-        tests:
-            - io:
-                cfg: tests/io_scenario_hdd.cfg
-                params:
-                    FILENAME: /opt/xxx.bin
-                    NUM_ROUNDS: 7
-
-logging:
-    extra_logs: 1
\ No newline at end of file
diff --git a/configs/local_ceph.yaml b/configs/local_ceph.yaml
deleted file mode 100644
index 996199c..0000000
--- a/configs/local_ceph.yaml
+++ /dev/null
@@ -1,26 +0,0 @@
-clouds:
-    ceph: local
-
-discover: ceph
-
-explicit_nodes:
-    # "ssh://koder@192.168.152.43::/home/koder/.ssh/id_rsa": testnode
-    local: testnode
-
-internal:
-    var_dir_root: /tmp/perf_tests
-
-sensors:
-    roles_mapping:
-        testnode: system-cpu, block-io
-
-tests:
-    - io:
-        cfg: scripts/fio_tests_configs/io_task_test.cfg
-        use_sudo: false
-        params:
-            FILENAME: /mnt/ceph/xxx.bin
-            NUM_ROUNDS: 3
-
-logging:
-    extra_logs: 1
diff --git a/configs/perf1.yaml b/configs/perf1.yaml
deleted file mode 100644
index 4405f34..0000000
--- a/configs/perf1.yaml
+++ /dev/null
@@ -1,66 +0,0 @@
-clouds:
-    fuel:
-        url: http://172.16.52.112:8000/
-        creds: admin:admin@admin
-        ssh_creds: root:test37
-        openstack_env: Performance-1
-
-discover: fuel
-
-# explicit_nodes:
-#     "ssh://root@172.16.52.112:3022:/home/koder/.ssh/id_rsa": testnode
-
-internal:
-    var_dir_root: /tmp/perf_tests
-
-# sensors:
-#     roles_mapping:
-#         ceph-osd: block-io
-#         cinder: block-io, system-cpu
-#         testnode: system-cpu, block-io
-
-tests:
-    - start_test_nodes:
-        creds: clouds
-        vm_params:
-            count: x1
-            image:
-                name: disk_io_perf
-                url: https://cloud-images.ubuntu.com/trusty/current/trusty-server-cloudimg-amd64-disk1.img
-
-            flavor:
-                name: disk_io_perf.1024
-                hdd_size: 50
-                ram_size: 1024
-                cpu: 1
-
-            vol_sz: 30
-            keypair_name: disk_io_perf
-            network_zone_name: novanetwork
-            flt_ip_pool: nova
-            private_key_path: disk_io_perf.pem
-            creds: "ssh://ubuntu@{ip}::{private_key_path}"
-            name_templ: wally-{group}-{id}
-            scheduler_group_name: wally-{group}-{id}
-            security_group: disk_io_perf
-
-        tests:
-            - io:
-                name: ceph
-                # cfg: wally/suits/io/io_scenario_ceph.cfg
-                cfg: scripts/fio_tests_configs/io_task_test.cfg
-                prefill_files: true
-                params:
-                    FILENAME: /dev/vdb
-                    NUM_ROUNDS: 3
-# 
-#     - io:
-#         # cfg: scripts/fio_tests_configs/io_task_test.cfg
-#         cfg: tests/io_scenario_hdd.cfg
-#         params:
-#             # FILENAME: /media/koder/a5230078-4c27-4c3b-99aa-26148e78b2e7/xxx.bin
-#             FILENAME: /opt/xxx.bin
-#             NUM_ROUNDS: 7
-
-logging:
-    extra_logs: 1
\ No newline at end of file
diff --git a/configs/perf2.yaml b/configs/perf2.yaml
deleted file mode 100644
index fac9da6..0000000
--- a/configs/perf2.yaml
+++ /dev/null
@@ -1,47 +0,0 @@
-clouds:
-    fuel:
-        url: http://172.16.52.113:8000/
-        creds: admin:admin@admin
-        ssh_creds: root:test37
-        openstack_env: rrr
-
-discover: fuel
-
-internal:
-    var_dir_root: /tmp/perf_tests
-
-tests:
-    - start_test_nodes:
-        creds: clouds
-        vm_params:
-            count: x1
-            image:
-                name: disk_io_perf
-                url: https://cloud-images.ubuntu.com/trusty/current/trusty-server-cloudimg-amd64-disk1.img
-
-            flavor:
-                name: disk_io_perf.1024
-                hdd_size: 50
-                ram_size: 1024
-                cpu: 1
-
-            vol_sz: 30
-            keypair_name: disk_io_perf
-            network_zone_name: net04
-            flt_ip_pool: net04_ext
-            private_key_path: disk_io_perf.pem
-            creds: "ssh://ubuntu@{ip}::{private_key_path}"
-            name_templ: wally-{group}-{id}
-            scheduler_group_name: wally-{group}-{id}
-            security_group: disk_io_perf
-
-        tests:
-            - io:
-                cfg: wally/suits/io/ceph.cfg
-                prefill_files: true
-                params:
-                    FILENAME: /dev/vdb
-                    NUM_ROUNDS: 1
-
-logging:
-    extra_logs: 1
\ No newline at end of file
diff --git a/configs/usb_hdd.yaml b/configs/usb_hdd.yaml
deleted file mode 100644
index 3ff2458..0000000
--- a/configs/usb_hdd.yaml
+++ /dev/null
@@ -1,27 +0,0 @@
-explicit_nodes:
-    # local: testnode
-    "ssh://koder@koder-gup::/home/koder/.ssh/id_rsa": testnode
-
-internal:
-    var_dir_root: /tmp/perf_tests
-
-testnode_log_root: /tmp/perf_tests_rem
-# run_web_ui: true
-
-# sensors:
-#     roles_mapping:
-#         testnode: system-cpu, block-io
-
-tests:
-    - io:
-        cfg: wally/suits/io/hdd.cfg
-        # cfg: scripts/fio_tests_configs/io_task_test.cfg
-        prefill_files: false
-        use_sudo: false
-        test_logging: true
-        params:
-            FILENAME: /media/koder/a5230078-4c27-4c3b-99aa-26148e78b2e7/xxx.bin
-            NUM_ROUNDS: 7
-
-logging:
-    extra_logs: 1
\ No newline at end of file
diff --git a/configs/vEnv-3-2.yaml b/configs/vEnv-3-2.yaml
deleted file mode 100644
index 678067e..0000000
--- a/configs/vEnv-3-2.yaml
+++ /dev/null
@@ -1,55 +0,0 @@
-clouds:
-    fuel:
-        url: http://172.16.52.108:8000/
-        creds: admin:admin@admin
-        ssh_creds: root:test37
-        openstack_env: fuel
-
-discover: fuel
-
-# explicit_nodes:
-#     "ssh://root@172.16.52.112:3022:/home/koder/.ssh/id_rsa": testnode
-
-internal:
-    var_dir_root: /tmp/perf_tests
-
-# sensors:
-#     roles_mapping:
-#         ceph-osd: block-io
-#         cinder: block-io, system-cpu
-#         testnode: system-cpu, block-io
-
-tests:
-    - start_test_nodes:
-        creds: clouds
-        vm_params:
-            count: x1
-            image:
-                name: disk_io_perf
-                url: https://cloud-images.ubuntu.com/trusty/current/trusty-server-cloudimg-amd64-disk1.img
-
-            flavor:
-                name: disk_io_perf.1024
-                hdd_size: 50
-                ram_size: 1024
-                cpu: 1
-
-            keypair_name: disk_io_perf
-            network_zone_name: net04
-            flt_ip_pool: net04_ext
-            private_key_path: disk_io_perf.pem
-            creds: "ssh://ubuntu@{ip}::{private_key_path}"
-            name_templ: wally-{group}-{id}
-            scheduler_group_name: wally-aa-{group}-{id}
-            security_group: disk_io_perf
-
-        tests:
-            - io:
-                # cfg: tests/io_scenario_hdd.cfg
-                cfg: scripts/fio_tests_configs/io_task_test.cfg
-                params:
-                    FILENAME: /opt/xxx.bin
-                    NUM_ROUNDS: 7
-
-logging:
-    extra_logs: 1
diff --git a/report_templates/report_ceph.html b/report_templates/report_ceph.html
index 9817faf..f679fcb 100644
--- a/report_templates/report_ceph.html
+++ b/report_templates/report_ceph.html
@@ -13,42 +13,67 @@
 <div class="container">
     <center>
     <div class="row">
+    <table><tr><td>
+        <H4>Random direct performance,<br>4KiB blocks</H4>
         <table style="width: auto;" class="table table-bordered table-striped">
             <tr>
-                <td>Test</td>
-                <td>Iops/BW</td>
-                <td>Test</td>
-                <td>Iops/BW</td>
+                <td>Operation</td>
+                <td>IOPS</td>
             </tr>
             <tr>
-                <td>Rand read 4k direct max IOPS</td>
-                <td><div align="right">{direct_iops_r_max} IOPS</div></td>
-                <td>Rand write 4k sync IOPS 10ms lat</td>
-                <td><div align="right">{rws4k_10ms} IOPS</div></td>
+                <td>Read</td>
+                <td><div align="right">{direct_iops_r_max[0]} ~ {direct_iops_r_max[1]}%</div></td>
             </tr>
             <tr>
-                <td>Rand write 4k direct max IOPS</td>
-                <td><div align="right">{direct_iops_w_max} IOPS</div></td>
-                <td>Rand write 4k sync IOPS 30ms lat</td>
-                <td><div align="right">{rws4k_30ms} IOPS</div></td>
-            </tr>
-            <tr>
-                <td>Direct sequential read</td>
-                <td><div align="right">{bw_read_max} MiBps</div></td>
-                <td>Rand write 4k sync IOPS 100ms lat</td>
-                <td><div align="right">{rws4k_100ms} IOPS</div></td>
-            </tr>
-            <tr>
-                <td>Direct sequential write</td>
-                <td><div align="right">{bw_write_max} MiBps</div></td>
-                <td></td><td></td>
+                <td>Write</td>
+                <td><div align="right">{direct_iops_w_max[0]} ~ {direct_iops_w_max[1]}%</div></td>
             </tr>
         </table>
+    </td><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td>
+        <H4>Random direct performance,<br>16MiB blocks</H4>
+        <table style="width: auto;" class="table table-bordered table-striped">
+            <tr>
+                <td>Operation</td>
+                <td>BW MiBps</td>
+            </tr>
+            <tr>
+                <td>Read</td>
+                <td><div align="right">{bw_read_max[0]} ~ {bw_read_max[1]}%</div></td>
+            </tr>
+            <tr>
+                <td>Write</td>
+                <td><div align="right">{bw_write_max[0]} ~ {bw_write_max[1]}%</div></td>
+            </tr>
+        </table>
+    </td><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td>
+        <H4>Maximal sync random write IOPS<br> for given latency, 4KiB</H4>
+        <table style="width: auto;" class="table table-bordered table-striped">
+            <tr>
+                <td>Latency ms</td>
+                <td>IOPS</td>
+            </tr>
+            <tr>
+                <td><div align="right">10</div></td>
+                <td><div align="right">{rws4k_10ms}</div></td>
+            </tr>
+            <tr>
+                <td><div align="right">30</div></td>
+                <td><div align="right">{rws4k_30ms}</div></td>
+            </tr>
+            <tr>
+                <td><div align="right">100</div></td>
+                <td><div align="right">{rws4k_100ms}</div></td>
+            </tr>
+        </table>
+    </td></tr></table>
     </div>
-    <img src="charts/rand_read_4k.png" />
-    <img src="charts/rand_write_4k.png" />
-    <img src="charts/rand_read_16m.png" />
-    <img src="charts/seq_write_1m.png" />
+    <table><tr>
+        <td><img src="charts/rand_read_4k.png" /></td>
+        <td><img src="charts/rand_write_4k.png" /></td>
+    </tr><tr>
+        <td><img src="charts/rand_read_16m.png" /></td>
+        <td><img src="charts/rand_write_16m.png" /></td>
+    </tr></table>
     </center>
 
     <!--div class="row">
diff --git a/wally/pretty_yaml.py b/wally/pretty_yaml.py
index f078ff2..ff1f3bc 100644
--- a/wally/pretty_yaml.py
+++ b/wally/pretty_yaml.py
@@ -64,7 +64,9 @@
             key_str = dumps_simple(k) + ": "
             val_res = dumpv(v, tab_sz, width - tab_sz, min_width)
 
-            if len(val_res) == 1 and len(key_str + val_res[0]) < width:
+            if len(val_res) == 1 and \
+               len(key_str + val_res[0]) < width and \
+               not isinstance(v, dict):
                 res.append(key_str + val_res[0])
             else:
                 res.append(key_str)
diff --git a/wally/report.py b/wally/report.py
index ea8e943..eeffefc 100644
--- a/wally/report.py
+++ b/wally/report.py
@@ -10,8 +10,8 @@
 
 import wally
 from wally import charts
-from wally.statistic import round_3_digit
 from wally.utils import parse_creds, ssize_to_b
+from wally.statistic import round_3_digit, round_deviation
 from wally.suits.io.results_loader import process_disk_info
 from wally.meta_info import total_lab_info, collect_lab_data
 
@@ -116,7 +116,12 @@
             else:
                 info.__dict__[name] = round_3_digit(val)
 
-    report = templ.format(lab_info=lab_description, **info.__dict__)
+    data = info.__dict__.copy()
+    for k, v in data.items():
+        if v is None:
+            data[k] = "-"
+
+    report = templ.format(lab_info=lab_description, **data)
     open(dest, 'w').write(report)
 
 
@@ -130,7 +135,12 @@
         if not name.startswith('__') and isinstance(val, (int, long, float)):
             setattr(info, name, round_3_digit(val))
 
-    report = templ.format(lab_info=lab_description, **info.__dict__)
+    data = info.__dict__.copy()
+    for k, v in data.items():
+        if v is None:
+            data[k] = "-"
+
+    report = templ.format(lab_info=lab_description, **data)
     open(dest, 'w').write(report)
 
 
@@ -153,11 +163,11 @@
     ch = charts.render_vertical_bar(title, legend, [bar_data], [bar_dev_top],
                                     [bar_dev_bottom], file_name=fname,
                                     scale_x=concurence, label_x="clients",
-                                    label_y="iops",
+                                    label_y=legend[0],
                                     lines=[
                                         (latv, "msec", "rr", "lat"),
                                         (iops_or_bw_per_vm, None, None,
-                                         legend[0] + " per thread")
+                                         legend[0] + " per client")
                                     ])
     return str(ch)
 
@@ -175,8 +185,8 @@
         ('ceph_test_rrd4k', 'rand_read_4k', 'Random read 4k direct IOPS'),
         ('ceph_test_rws4k', 'rand_write_4k', 'Random write 4k sync IOPS'),
         ('ceph_test_rrd16m', 'rand_read_16m', 'Random read 16m direct MiBps'),
-        ('ceph_test_swd1m', 'seq_write_1m',
-            'Sequential write 1m direct MiBps'),
+        ('ceph_test_rwd16m', 'rand_write_16m',
+            'Random write 16m direct MiBps'),
     ]
     make_plots(processed_results, path, plots)
 
@@ -212,37 +222,42 @@
         io_chart(desc, concurence, lat, data, data_dev, name, fname)
 
 
+def find_max_where(processed_results, sync_mode, blocksize, rw, iops=True):
+    result = [0, 0]
+    attr = 'iops' if iops else 'bw'
+    for measurement in processed_results.values():
+        ok = measurement.raw['sync_mode'] == sync_mode
+        ok = ok and (measurement.raw['blocksize'] == blocksize)
+        ok = ok and (measurement.raw['rw'] == rw)
+
+        if ok:
+            if getattr(measurement, attr) > result[0]:
+                result = [getattr(measurement, attr), measurement.dev]
+    return result
+
+
 def get_disk_info(processed_results):
     di = DiskInfo()
     rws4k_iops_lat_th = []
 
+    di.direct_iops_w_max = find_max_where(processed_results,
+                                          'd', '4k', 'randwrite')
+    di.direct_iops_r_max = find_max_where(processed_results,
+                                          'd', '4k', 'randread')
+    di.bw_write_max = find_max_where(processed_results,
+                                     'd', '16m', 'randwrite', False)
+    di.bw_read_max = find_max_where(processed_results,
+                                    'd', '16m', 'randread', False)
+
     for res in processed_results.values():
-        if res.raw['sync_mode'] == 'd' and res.raw['blocksize'] == '4k':
-            if res.raw['rw'] == 'randwrite':
-                di.direct_iops_w_max = max(di.direct_iops_w_max, res.iops)
-            elif res.raw['rw'] == 'randread':
-                di.direct_iops_r_max = max(di.direct_iops_r_max, res.iops)
-        elif res.raw['sync_mode'] == 's' and res.raw['blocksize'] == '4k':
+        if res.raw['sync_mode'] == 's' and res.raw['blocksize'] == '4k':
             if res.raw['rw'] != 'randwrite':
                 continue
-
             rws4k_iops_lat_th.append((res.iops, res.lat,
                                       res.raw['concurence']))
 
-        elif res.raw['sync_mode'] == 'd' and res.raw['blocksize'] == '1m':
-
-            if res.raw['rw'] == 'write':
-                di.bw_write_max = max(di.bw_write_max, res.bw)
-            elif res.raw['rw'] == 'read':
-                di.bw_read_max = max(di.bw_read_max, res.bw)
-        elif res.raw['sync_mode'] == 'd' and res.raw['blocksize'] == '16m':
-            if res.raw['rw'] == 'write' or res.raw['rw'] == 'randwrite':
-                di.bw_write_max = max(di.bw_write_max, res.bw)
-            elif res.raw['rw'] == 'read' or res.raw['rw'] == 'randread':
-                di.bw_read_max = max(di.bw_read_max, res.bw)
-
-    di.bw_write_max /= 1000
-    di.bw_read_max /= 1000
+    di.bw_write_max[0] /= 1000
+    di.bw_read_max[0] /= 1000
 
     rws4k_iops_lat_th.sort(key=lambda (_1, _2, conc): conc)
 
@@ -273,13 +288,21 @@
         setattr(di, 'rws4k_{}ms'.format(tlatv_ms), int(iops3))
 
     hdi = DiskInfo()
-    hdi.direct_iops_r_max = di.direct_iops_r_max
-    hdi.direct_iops_w_max = di.direct_iops_w_max
+
+    def pp(x):
+        med, dev = round_deviation((x[0], x[1] * x[0]))
+        # 3 sigma in %
+        dev = int(float(dev) / med * 100)
+        return (med, dev)
+
+    hdi.direct_iops_r_max = pp(di.direct_iops_r_max)
+    hdi.direct_iops_w_max = pp(di.direct_iops_w_max)
+    hdi.bw_write_max = pp(di.bw_write_max)
+    hdi.bw_read_max = pp(di.bw_read_max)
+
     hdi.rws4k_10ms = di.rws4k_10ms if 0 != di.rws4k_10ms else None
     hdi.rws4k_30ms = di.rws4k_30ms if 0 != di.rws4k_30ms else None
     hdi.rws4k_100ms = di.rws4k_100ms if 0 != di.rws4k_100ms else None
-    hdi.bw_write_max = di.bw_write_max
-    hdi.bw_read_max = di.bw_read_max
     return hdi
 
 
@@ -299,6 +322,7 @@
 
 def make_io_report(results, path, lab_url=None, creds=None):
     lab_info = None
+
     # if lab_url is not None:
     #     username, password, tenant_name = parse_creds(creds)
     #     creds = {'username': username,
diff --git a/wally/ssh_utils.py b/wally/ssh_utils.py
index efae92f..7a37c4b 100644
--- a/wally/ssh_utils.py
+++ b/wally/ssh_utils.py
@@ -251,7 +251,7 @@
 class URIsNamespace(object):
     class ReParts(object):
         user_rr = "[^:]*?"
-        host_rr = "[^:]*?"
+        host_rr = "[^:@]*?"
         port_rr = "\\d+"
         key_file_rr = "[^:@]*"
         passwd_rr = ".*?"
@@ -267,10 +267,13 @@
 
     templs = [
         "^{host_rr}$",
+        "^{host_rr}:{port_rr}$",
+        "^{user_rr}@{host_rr}$",
+        "^{user_rr}@{host_rr}:{port_rr}$",
         "^{user_rr}@{host_rr}::{key_file_rr}$",
         "^{user_rr}@{host_rr}:{port_rr}:{key_file_rr}$",
-        "^{user_rr}:{passwd_rr}@@{host_rr}$",
-        "^{user_rr}:{passwd_rr}@@{host_rr}:{port_rr}$",
+        "^{user_rr}:{passwd_rr}@{host_rr}$",
+        "^{user_rr}:{passwd_rr}@{host_rr}:{port_rr}$",
     ]
 
     for templ in templs:
@@ -278,8 +281,8 @@
 
 
 def parse_ssh_uri(uri):
-    # user:passwd@@ip_host:port
-    # user:passwd@@ip_host
+    # user:passwd@ip_host:port
+    # user:passwd@ip_host
     # user@ip_host:port
     # user@ip_host
     # ip_host:port
diff --git a/wally/start_vms.py b/wally/start_vms.py
index af7df71..6ce91f8 100644
--- a/wally/start_vms.py
+++ b/wally/start_vms.py
@@ -99,6 +99,15 @@
     cmd = "bash {spath} >/dev/null".format(spath=spath)
     subprocess.check_call(cmd, shell=True, env=env)
 
+    conn = nova_connect(name, passwd, tenant, auth_url)
+    while True:
+        status = conn.images.find(name='wally_ubuntu').status
+        if status == 'ACTIVE':
+            break
+        msg = "Image {0} is still in {1} state. Waiting 10 more seconds"
+        logger.info(msg.format('wally_ubuntu', status))
+        time.sleep(10)
+
 
 def prepare_os(nova, params):
     allow_ssh(nova, params['security_group'])
diff --git a/wally/statistic.py b/wally/statistic.py
index f3fcd6a..a02033d 100644
--- a/wally/statistic.py
+++ b/wally/statistic.py
@@ -19,6 +19,12 @@
     return round_deviation((val, val / 10.0))[0]
 
 
+def round_deviation_p(med_dev):
+    med, dev = med_dev
+    med, dev = round_deviation((med, med * dev))
+    return [med, float(dev) / med]
+
+
 def round_deviation(med_dev):
     med, dev = med_dev
 
@@ -28,8 +34,8 @@
     dev_div = 10.0 ** (math.floor(math.log10(dev)) - 1)
     dev = int(dev / dev_div) * dev_div
     med = int(med / dev_div) * dev_div
-    return (type(med_dev[0])(med),
-            type(med_dev[1])(dev))
+    return [type(med_dev[0])(med),
+            type(med_dev[1])(dev)]
 
 
 def groupby_globally(data, key_func):
diff --git a/wally/suits/io/agent.py b/wally/suits/io/agent.py
index 0a84ed1..51eb2fd 100644
--- a/wally/suits/io/agent.py
+++ b/wally/suits/io/agent.py
@@ -148,7 +148,7 @@
                 raise ValueError(msg.format(count[1:-1],
                                  count.format(**sec.format_params)))
 
-            yield sec
+            yield sec.copy()
 
             if 'ramp_time' in sec.vals:
                 sec = sec.copy()
@@ -217,8 +217,10 @@
                 assert isinstance(val, (int, float)) or val is None
 
         params['UNIQ'] = 'UN{0}'.format(counter[0])
+        params['COUNTER'] = str(counter[0])
         counter[0] += 1
         params['TEST_SUMM'] = get_test_summary(sec.vals)
+
         sec.name = sec.name.format(**params)
 
         yield sec
diff --git a/wally/suits/io/ceph.cfg b/wally/suits/io/ceph.cfg
index c9b2f53..425696a 100644
--- a/wally/suits/io/ceph.cfg
+++ b/wally/suits/io/ceph.cfg
@@ -8,8 +8,8 @@
 filename={FILENAME}
 NUM_ROUNDS=7
 
-NUMJOBS={% 1, 5, 10, 15, 20, 30, 40 %}
-NUMJOBS_SHORT={% 1, 5, 10 %}
+NUMJOBS={% 1, 5, 10, 15, 40 %}
+NUMJOBS_SHORT={% 1, 2, 3, 10 %}
 
 size=30G
 ramp_time=5
diff --git a/wally/suits/io/hdd.cfg b/wally/suits/io/hdd.cfg
index 07e45e9..4156171 100644
--- a/wally/suits/io/hdd.cfg
+++ b/wally/suits/io/hdd.cfg
@@ -33,6 +33,14 @@
 numjobs={NUMJOBS}
 
 # ---------------------------------------------------------------------
+# check IOPS randwrite.
+# ---------------------------------------------------------------------
+[hdd_test_{TEST_SUMM} * {NUM_ROUNDS}]
+blocksize=4k
+rw=randwrite
+direct=1
+
+# ---------------------------------------------------------------------
 # No reason for th count > 1 in case of sequantial operations
 # They became random
 # ---------------------------------------------------------------------
@@ -40,11 +48,3 @@
 blocksize=1m
 rw={% read, write %}
 direct=1
-
-# ---------------------------------------------------------------------
-# check IOPS randwrite.
-# ---------------------------------------------------------------------
-[hdd_test_{TEST_SUMM} * {NUM_ROUNDS}]
-blocksize=4k
-rw=randwrite
-direct=1