koder aka kdanilov | 66839a9 | 2015-04-11 13:22:31 +0300 | [diff] [blame] | 1 | import texttable |
| 2 | |
koder aka kdanilov | f86d7af | 2015-05-06 04:01:54 +0300 | [diff] [blame] | 3 | from wally.utils import ssize2b |
| 4 | from wally.statistic import round_3_digit |
koder aka kdanilov | 88407ff | 2015-05-26 15:35:57 +0300 | [diff] [blame^] | 5 | from .fio_task_parser import get_test_sync_mode |
| 6 | |
| 7 | |
| 8 | def getconc(data): |
| 9 | th_count = data.params.vals.get('numjobs') |
| 10 | |
| 11 | if th_count is None: |
| 12 | th_count = data.params.vals.get('concurence', 1) |
| 13 | return th_count |
koder aka kdanilov | 66839a9 | 2015-04-11 13:22:31 +0300 | [diff] [blame] | 14 | |
koder aka kdanilov | 66839a9 | 2015-04-11 13:22:31 +0300 | [diff] [blame] | 15 | |
koder aka kdanilov | 416b87a | 2015-05-12 00:26:04 +0300 | [diff] [blame] | 16 | def key_func(data): |
koder aka kdanilov | 4af1c1d | 2015-05-18 15:48:58 +0300 | [diff] [blame] | 17 | p = data.params.vals |
| 18 | |
koder aka kdanilov | 88407ff | 2015-05-26 15:35:57 +0300 | [diff] [blame^] | 19 | th_count = getconc(data) |
koder aka kdanilov | 4af1c1d | 2015-05-18 15:48:58 +0300 | [diff] [blame] | 20 | |
koder aka kdanilov | 88407ff | 2015-05-26 15:35:57 +0300 | [diff] [blame^] | 21 | return (data.name.rsplit("_", 1)[0], |
| 22 | p['rw'], |
koder aka kdanilov | 4af1c1d | 2015-05-18 15:48:58 +0300 | [diff] [blame] | 23 | get_test_sync_mode(data.params), |
koder aka kdanilov | 416b87a | 2015-05-12 00:26:04 +0300 | [diff] [blame] | 24 | ssize2b(p['blocksize']), |
koder aka kdanilov | 88407ff | 2015-05-26 15:35:57 +0300 | [diff] [blame^] | 25 | int(th_count) * data.testnodes_count) |
Yulia Portnova | 7ddfa73 | 2015-02-24 17:32:58 +0200 | [diff] [blame] | 26 | |
| 27 | |
koder aka kdanilov | 416b87a | 2015-05-12 00:26:04 +0300 | [diff] [blame] | 28 | def format_results_for_console(dinfo): |
koder aka kdanilov | cff7b2e | 2015-04-18 20:48:15 +0300 | [diff] [blame] | 29 | """ |
| 30 | create a table with io performance report |
| 31 | for console |
| 32 | """ |
koder aka kdanilov | be8f89f | 2015-04-28 14:51:51 +0300 | [diff] [blame] | 33 | tab = texttable.Texttable(max_width=120) |
koder aka kdanilov | 652cd80 | 2015-04-13 12:21:07 +0300 | [diff] [blame] | 34 | tab.set_deco(tab.HEADER | tab.VLINES | tab.BORDER) |
koder aka kdanilov | 416b87a | 2015-05-12 00:26:04 +0300 | [diff] [blame] | 35 | tab.set_cols_align(["l", "l", "r", "r", "r", "r", "r", "r", "r"]) |
koder aka kdanilov | f86d7af | 2015-05-06 04:01:54 +0300 | [diff] [blame] | 36 | |
koder aka kdanilov | 416b87a | 2015-05-12 00:26:04 +0300 | [diff] [blame] | 37 | items = sorted(dinfo.values(), key=key_func) |
Yulia Portnova | 7ddfa73 | 2015-02-24 17:32:58 +0200 | [diff] [blame] | 38 | |
koder aka kdanilov | 652cd80 | 2015-04-13 12:21:07 +0300 | [diff] [blame] | 39 | prev_k = None |
koder aka kdanilov | f86d7af | 2015-05-06 04:01:54 +0300 | [diff] [blame] | 40 | header = ["Name", "Description", "iops\ncum", "KiBps\ncum", |
koder aka kdanilov | 416b87a | 2015-05-12 00:26:04 +0300 | [diff] [blame] | 41 | "Cnf\n95%", "Dev%", "iops\nper vm", "KiBps\nper vm", "lat\nms"] |
koder aka kdanilov | 652cd80 | 2015-04-13 12:21:07 +0300 | [diff] [blame] | 42 | |
koder aka kdanilov | 416b87a | 2015-05-12 00:26:04 +0300 | [diff] [blame] | 43 | for data in items: |
koder aka kdanilov | 88407ff | 2015-05-26 15:35:57 +0300 | [diff] [blame^] | 44 | curr_k = key_func(data)[:4] |
koder aka kdanilov | 652cd80 | 2015-04-13 12:21:07 +0300 | [diff] [blame] | 45 | |
| 46 | if prev_k is not None: |
| 47 | if prev_k != curr_k: |
koder aka kdanilov | be8f89f | 2015-04-28 14:51:51 +0300 | [diff] [blame] | 48 | tab.add_row( |
koder aka kdanilov | 416b87a | 2015-05-12 00:26:04 +0300 | [diff] [blame] | 49 | ["-------", "-----------", "-----", "------", |
| 50 | "---", "----", "------", "---", "-----"]) |
koder aka kdanilov | 652cd80 | 2015-04-13 12:21:07 +0300 | [diff] [blame] | 51 | |
| 52 | prev_k = curr_k |
| 53 | |
koder aka kdanilov | 4af1c1d | 2015-05-18 15:48:58 +0300 | [diff] [blame] | 54 | test_dinfo = dinfo[(data.name, data.summary)] |
Yulia Portnova | 7ddfa73 | 2015-02-24 17:32:58 +0200 | [diff] [blame] | 55 | |
koder aka kdanilov | f86d7af | 2015-05-06 04:01:54 +0300 | [diff] [blame] | 56 | iops, _ = test_dinfo.iops.rounded_average_conf() |
koder aka kdanilov | 416b87a | 2015-05-12 00:26:04 +0300 | [diff] [blame] | 57 | |
koder aka kdanilov | f86d7af | 2015-05-06 04:01:54 +0300 | [diff] [blame] | 58 | bw, bw_conf = test_dinfo.bw.rounded_average_conf() |
koder aka kdanilov | 416b87a | 2015-05-12 00:26:04 +0300 | [diff] [blame] | 59 | _, bw_dev = test_dinfo.bw.rounded_average_dev() |
koder aka kdanilov | f86d7af | 2015-05-06 04:01:54 +0300 | [diff] [blame] | 60 | conf_perc = int(round(bw_conf * 100 / bw)) |
koder aka kdanilov | 416b87a | 2015-05-12 00:26:04 +0300 | [diff] [blame] | 61 | dev_perc = int(round(bw_dev * 100 / bw)) |
Yulia Portnova | 7ddfa73 | 2015-02-24 17:32:58 +0200 | [diff] [blame] | 62 | |
koder aka kdanilov | f86d7af | 2015-05-06 04:01:54 +0300 | [diff] [blame] | 63 | lat, _ = test_dinfo.lat.rounded_average_conf() |
| 64 | lat = round_3_digit(int(lat) // 1000) |
Yulia Portnova | 7ddfa73 | 2015-02-24 17:32:58 +0200 | [diff] [blame] | 65 | |
koder aka kdanilov | 416b87a | 2015-05-12 00:26:04 +0300 | [diff] [blame] | 66 | iops_per_vm = round_3_digit(iops / data.testnodes_count) |
| 67 | bw_per_vm = round_3_digit(bw / data.testnodes_count) |
koder aka kdanilov | e87ae65 | 2015-04-20 02:14:35 +0300 | [diff] [blame] | 68 | |
| 69 | iops = round_3_digit(iops) |
| 70 | bw = round_3_digit(bw) |
koder aka kdanilov | e87ae65 | 2015-04-20 02:14:35 +0300 | [diff] [blame] | 71 | |
koder aka kdanilov | 416b87a | 2015-05-12 00:26:04 +0300 | [diff] [blame] | 72 | params = (data.name.rsplit('_', 1)[0], |
koder aka kdanilov | 4af1c1d | 2015-05-18 15:48:58 +0300 | [diff] [blame] | 73 | data.summary, int(iops), int(bw), str(conf_perc), |
koder aka kdanilov | 416b87a | 2015-05-12 00:26:04 +0300 | [diff] [blame] | 74 | str(dev_perc), |
koder aka kdanilov | f86d7af | 2015-05-06 04:01:54 +0300 | [diff] [blame] | 75 | int(iops_per_vm), int(bw_per_vm), lat) |
koder aka kdanilov | cff7b2e | 2015-04-18 20:48:15 +0300 | [diff] [blame] | 76 | tab.add_row(params) |
Yulia Portnova | 7ddfa73 | 2015-02-24 17:32:58 +0200 | [diff] [blame] | 77 | |
koder aka kdanilov | 652cd80 | 2015-04-13 12:21:07 +0300 | [diff] [blame] | 78 | tab.header(header) |
Yulia Portnova | 7ddfa73 | 2015-02-24 17:32:58 +0200 | [diff] [blame] | 79 | |
koder aka kdanilov | 66839a9 | 2015-04-11 13:22:31 +0300 | [diff] [blame] | 80 | return tab.draw() |