blob: fe3bca91bdf4d59090da197e25dc1c5a451cb046 [file] [log] [blame]
koder aka kdanilov2e928022015-04-08 13:47:15 +03001import re
2import sys
3from collections import defaultdict
4
5from disk_perf_test_tool.utils import ssize_to_b
6from disk_perf_test_tool.tests import disk_test_agent
7from disk_perf_test_tool.scripts.postprocessing import data_stat
8
9
10def filter_data(data, *params, **filters):
11 for result in data:
12 for k, v in filters.items():
13 if v == result.get(k):
14 yield map(result.get, params)
15
16
17raw_data = open(sys.argv[1]).read()
18data = list(disk_test_agent.parse_output(raw_data))[0]
19
20processed_data = defaultdict(lambda: [])
21pref = len("linearity_test_rrd")
22
23for key, val in data['res'].items():
24 val['blocksize'] = key[pref:].split('th')[0]
25
26 info = key[pref - 3:]
27 sz = info[3:].split("th")[0]
28 sinfo = info[:3]
29
30 if val['iops'] != []:
31 med, dev = map(int, data_stat.med_dev(val['iops']))
32 sdata = "{0:>4} ~ {1:>2}".format(med, dev)
33 processed_data[sinfo].append([sdata, sz, med, dev])
34 else:
35 processed_data[sinfo].append(["None", sz, "None", "None"])
36
37
38def sort_func(x):
39 return ssize_to_b(x[1])
40
41
42for sinfo, iops_sz in sorted(processed_data.items()):
43 for siops, sz, _, _ in sorted(iops_sz, key=sort_func):
44 print "{0} {1:>6} {2}".format(sinfo, sz, siops)
45
46
47import math
48import matplotlib.pyplot as plt
49
50
51prep = lambda x: x
52max_xz = 10000000
53
54
55def add_plt(plt, processed_data, flt, marker):
56 x = []
57 y = []
58 e = []
59
60 for sinfo, iops_sz in sorted(processed_data.items()):
61 if sinfo == flt:
62 for siops, sz, med, dev in sorted(iops_sz, key=sort_func):
63 if ssize_to_b(sz) < max_xz:
64 iotime_us = 1000. // med
65 iotime_max = 1000. // (med - dev * 3)
66 x.append(prep(ssize_to_b(sz) / 1024))
67 y.append(prep(iotime_us))
68 e.append(prep(iotime_max) - prep(iotime_us))
69
70 plt.errorbar(x, y, e, linestyle='None', marker=marker)
71 plt.plot([x[0], x[-1]], [y[0], y[-1]])
72
73add_plt(plt, processed_data, 'rwd', '*')
74add_plt(plt, processed_data, 'rws', '^')
75add_plt(plt, processed_data, 'rrd', '+')
76
77plt.show()