blob: 59691b29e64294a4c5b665b8695a739dc5f6417c [file] [log] [blame]
koder aka kdanilov66839a92015-04-11 13:22:31 +03001import texttable
2
koder aka kdanilovf86d7af2015-05-06 04:01:54 +03003from wally.utils import ssize2b
4from wally.statistic import round_3_digit
koder aka kdanilov88407ff2015-05-26 15:35:57 +03005from .fio_task_parser import get_test_sync_mode
6
7
8def 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 kdanilov66839a92015-04-11 13:22:31 +030014
koder aka kdanilov66839a92015-04-11 13:22:31 +030015
koder aka kdanilov416b87a2015-05-12 00:26:04 +030016def key_func(data):
koder aka kdanilov4af1c1d2015-05-18 15:48:58 +030017 p = data.params.vals
18
koder aka kdanilov88407ff2015-05-26 15:35:57 +030019 th_count = getconc(data)
koder aka kdanilov4af1c1d2015-05-18 15:48:58 +030020
koder aka kdanilov88407ff2015-05-26 15:35:57 +030021 return (data.name.rsplit("_", 1)[0],
22 p['rw'],
koder aka kdanilov4af1c1d2015-05-18 15:48:58 +030023 get_test_sync_mode(data.params),
koder aka kdanilov416b87a2015-05-12 00:26:04 +030024 ssize2b(p['blocksize']),
koder aka kdanilov88407ff2015-05-26 15:35:57 +030025 int(th_count) * data.testnodes_count)
Yulia Portnova7ddfa732015-02-24 17:32:58 +020026
27
koder aka kdanilov416b87a2015-05-12 00:26:04 +030028def format_results_for_console(dinfo):
koder aka kdanilovcff7b2e2015-04-18 20:48:15 +030029 """
30 create a table with io performance report
31 for console
32 """
koder aka kdanilovbe8f89f2015-04-28 14:51:51 +030033 tab = texttable.Texttable(max_width=120)
koder aka kdanilov652cd802015-04-13 12:21:07 +030034 tab.set_deco(tab.HEADER | tab.VLINES | tab.BORDER)
koder aka kdanilov416b87a2015-05-12 00:26:04 +030035 tab.set_cols_align(["l", "l", "r", "r", "r", "r", "r", "r", "r"])
koder aka kdanilovf86d7af2015-05-06 04:01:54 +030036
koder aka kdanilov416b87a2015-05-12 00:26:04 +030037 items = sorted(dinfo.values(), key=key_func)
Yulia Portnova7ddfa732015-02-24 17:32:58 +020038
koder aka kdanilov652cd802015-04-13 12:21:07 +030039 prev_k = None
koder aka kdanilovf86d7af2015-05-06 04:01:54 +030040 header = ["Name", "Description", "iops\ncum", "KiBps\ncum",
koder aka kdanilov416b87a2015-05-12 00:26:04 +030041 "Cnf\n95%", "Dev%", "iops\nper vm", "KiBps\nper vm", "lat\nms"]
koder aka kdanilov652cd802015-04-13 12:21:07 +030042
koder aka kdanilov416b87a2015-05-12 00:26:04 +030043 for data in items:
koder aka kdanilov88407ff2015-05-26 15:35:57 +030044 curr_k = key_func(data)[:4]
koder aka kdanilov652cd802015-04-13 12:21:07 +030045
46 if prev_k is not None:
47 if prev_k != curr_k:
koder aka kdanilovbe8f89f2015-04-28 14:51:51 +030048 tab.add_row(
koder aka kdanilov416b87a2015-05-12 00:26:04 +030049 ["-------", "-----------", "-----", "------",
50 "---", "----", "------", "---", "-----"])
koder aka kdanilov652cd802015-04-13 12:21:07 +030051
52 prev_k = curr_k
53
koder aka kdanilov4af1c1d2015-05-18 15:48:58 +030054 test_dinfo = dinfo[(data.name, data.summary)]
Yulia Portnova7ddfa732015-02-24 17:32:58 +020055
koder aka kdanilovf86d7af2015-05-06 04:01:54 +030056 iops, _ = test_dinfo.iops.rounded_average_conf()
koder aka kdanilov416b87a2015-05-12 00:26:04 +030057
koder aka kdanilovf86d7af2015-05-06 04:01:54 +030058 bw, bw_conf = test_dinfo.bw.rounded_average_conf()
koder aka kdanilov416b87a2015-05-12 00:26:04 +030059 _, bw_dev = test_dinfo.bw.rounded_average_dev()
koder aka kdanilovf86d7af2015-05-06 04:01:54 +030060 conf_perc = int(round(bw_conf * 100 / bw))
koder aka kdanilov416b87a2015-05-12 00:26:04 +030061 dev_perc = int(round(bw_dev * 100 / bw))
Yulia Portnova7ddfa732015-02-24 17:32:58 +020062
koder aka kdanilovf86d7af2015-05-06 04:01:54 +030063 lat, _ = test_dinfo.lat.rounded_average_conf()
64 lat = round_3_digit(int(lat) // 1000)
Yulia Portnova7ddfa732015-02-24 17:32:58 +020065
koder aka kdanilov416b87a2015-05-12 00:26:04 +030066 iops_per_vm = round_3_digit(iops / data.testnodes_count)
67 bw_per_vm = round_3_digit(bw / data.testnodes_count)
koder aka kdanilove87ae652015-04-20 02:14:35 +030068
69 iops = round_3_digit(iops)
70 bw = round_3_digit(bw)
koder aka kdanilove87ae652015-04-20 02:14:35 +030071
koder aka kdanilov416b87a2015-05-12 00:26:04 +030072 params = (data.name.rsplit('_', 1)[0],
koder aka kdanilov4af1c1d2015-05-18 15:48:58 +030073 data.summary, int(iops), int(bw), str(conf_perc),
koder aka kdanilov416b87a2015-05-12 00:26:04 +030074 str(dev_perc),
koder aka kdanilovf86d7af2015-05-06 04:01:54 +030075 int(iops_per_vm), int(bw_per_vm), lat)
koder aka kdanilovcff7b2e2015-04-18 20:48:15 +030076 tab.add_row(params)
Yulia Portnova7ddfa732015-02-24 17:32:58 +020077
koder aka kdanilov652cd802015-04-13 12:21:07 +030078 tab.header(header)
Yulia Portnova7ddfa732015-02-24 17:32:58 +020079
koder aka kdanilov66839a92015-04-11 13:22:31 +030080 return tab.draw()