-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathanalysis.py
77 lines (65 loc) · 2.3 KB
/
analysis.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
"""
Parse the info from log.
"""
import matplotlib.pyplot as plt
from tqdm import tqdm
import argparse
import pandas as pd
def draw(buffer_sizes: list, total_ios: list, total_hits: list, intervals: list, path: str) -> None:
""" Draw infos
"""
plt.subplot(311)
plt.plot(buffer_sizes, total_ios, c='r', label='total io')
plt.plot(buffer_sizes, total_hits, c='b', label='total hits')
plt.xlabel('buffer_size')
plt.ylabel('count')
plt.legend()
# plt.savefig(f'{path}/info.png')
# plt.show()
plt.subplot(312)
hit_rates = [hit * 1.0 /
500000 for hit in total_hits]
plt.plot(buffer_sizes, hit_rates, label='hit rate')
plt.ylabel('hit rate')
plt.legend()
plt.subplot(313)
plt.plot(buffer_sizes, intervals, c='y', label='intervals')
plt.ylabel('s')
plt.legend()
plt.savefig(f'{path}/analysis.png')
analysis = pd.DataFrame({
'buffer_sizes': buffer_sizes,
'total_ios': total_ios,
'total_hits': total_hits,
'hit_rates': hit_rates,
'intervals/s': intervals,
})
analysis.to_csv('analysis.csv', index=False)
# plt.show()
def extrac_infos(log_path: str):
""" Extract info from log .
"""
buffer_sizes, total_ios, total_hits, intervals = [], [], [], []
with open(log_path) as f:
lines = f.readlines()
for line in tqdm(lines):
words = line.replace('\t', ',').replace('\n', '').split(',')
# print(words)
buffer_size = int(words[1].split(':')[1])
total_io = int(words[2].split(':')[1])
total_hit = int(words[3].split(':')[1])
interval = float(words[4].split(':')[1][:-1])
buffer_sizes.append(buffer_size)
total_ios.append(total_io)
total_hits.append(total_hit)
intervals.append(interval)
return buffer_sizes, total_ios, total_hits, intervals
def main(opt):
buffer_sizes, total_ios, total_hits, intervals = extrac_infos(opt.log_path)
draw(buffer_sizes, total_ios, total_hits, intervals, opt.save_path)
if __name__ == '__main__':
parser = argparse.ArgumentParser('analysis')
parser.add_argument('-log_path', type=str, default='log.txt')
parser.add_argument('-save_path', type=str, default='.')
opt = parser.parse_args()
main(opt)