blob: ac54965e8a39019ce71cd936db89756562c4e225 [file] [log] [blame]
kdanylov aka koder3a9e5db2017-05-09 20:00:44 +03001import logging
2
3
kdanylov aka koder150b2192017-04-01 16:53:01 +03004import numpy
5
6from cephlib.common import float2str
7
8from . import texttable
9from .hlstorage import ResultStorage
10from .stage import Stage, StepOrder
11from .test_run_class import TestRun
12from .suits.io.fio import FioTest
13from .statistic import calc_norm_stat_props, calc_histo_stat_props
14from .suits.io.fio_hist import get_lat_vals
kdanylov aka koder3a9e5db2017-05-09 20:00:44 +030015from .data_selectors import get_aggregated
16
17
18logger = logging.getLogger("wally")
19
kdanylov aka koder150b2192017-04-01 16:53:01 +030020
21class ConsoleReportStage(Stage):
22
23 priority = StepOrder.REPORT
24
25 def run(self, ctx: TestRun) -> None:
26 rstorage = ResultStorage(ctx.storage)
27 for suite in rstorage.iter_suite(FioTest.name):
28 table = texttable.Texttable(max_width=200)
29
kdanylov aka koder3a9e5db2017-05-09 20:00:44 +030030 tbl = rstorage.get_txt_report(suite)
31 if tbl is None:
32 table.header(["Description", "IOPS ~ Dev", "BW, MiBps", 'Skew/Kurt', 'lat med, ms', 'lat 95, ms'])
33 table.set_cols_align(('l', 'r', 'r', 'r', 'r', 'r'))
kdanylov aka koder150b2192017-04-01 16:53:01 +030034
kdanylov aka koder3a9e5db2017-05-09 20:00:44 +030035 for job in sorted(rstorage.iter_job(suite), key=lambda job: job.params):
36 bw_ts = get_aggregated(rstorage, suite, job, metric='bw')
37 props = calc_norm_stat_props(bw_ts)
38 avg_iops = props.average // job.params.params['bsize']
39 iops_dev = props.deviation // job.params.params['bsize']
kdanylov aka koder150b2192017-04-01 16:53:01 +030040
kdanylov aka koder3a9e5db2017-05-09 20:00:44 +030041 lat_ts = get_aggregated(rstorage, suite, job, metric='lat')
42 bins_edges = numpy.array(get_lat_vals(lat_ts.data.shape[1]), dtype='float32') / 1000 # convert us to ms
43 lat_props = calc_histo_stat_props(lat_ts, bins_edges)
44 table.add_row([job.params.summary,
45 "{} ~ {}".format(float2str(avg_iops), float2str(iops_dev)),
46 float2str(props.average / 1024), # Ki -> Mi
47 "{}/{}".format(float2str(props.skew), float2str(props.kurt)),
48 float2str(lat_props.perc_50), float2str(lat_props.perc_95)])
kdanylov aka koder150b2192017-04-01 16:53:01 +030049
kdanylov aka koder3a9e5db2017-05-09 20:00:44 +030050 tbl = table.draw()
51 rstorage.put_txt_report(suite, tbl)
52 print(tbl)