这是一个读取 iostat -dmx 1
输出,对磁盘使用进行可视化的 notebook。
不要太在意代码左边的序号。它们是执行顺序。我反复执行过,所以它们比较大,还有些乱序。
首先我们配置一下 matplotlib。第一行是给 Jupyter 的指令,告诉它我们想要直接在网页上显示 matplotlib 的图。
%matplotlib inline
import matplotlib.pyplot as plt
plt.rcParams['figure.figsize'] = (20.0, 10.0)
import
一些东西。pandas 是待会做滑动平均用的。
import pandas as pd
这个是我自己写的模块。在 winterpy 里可以找到。
from sysstatutils import read_iostat
导入数据文件。这个日志文件是我在进行系统备份的时候取得的。
with open('iostat2.log') as f:
data = read_iostat(f)
devices = sorted(data.keys())
devices
data['sda'].keys()
def plot(x, l='(unknown)'):
s = pd.Series(x)
s1 = s.rolling(window=10).mean()
return plt.plot(s1, label=l)[0]
lines = [plot(data[x]['%util'], x) for x in devices]
plt.legend(handles=lines, framealpha=0.5, fontsize=11)
如下图所示,备份过程中主要在读 sda
,写 sdc
。
lines = [plot(data[x]['wMB/s'], x+'/w') for x in devices] + \
[plot(data[x]['rMB/s'], x+'/r') for x in devices]
plt.legend(handles=lines, framealpha=0.5, fontsize=11)
所以 sdc
都忙不过来了。sda
还好。作为 SSD,sdb
自然是响应十分迅速的(而且也没多少活干)。
lines = [plot(data[x]['await'], x) for x in devices]
plt.legend(handles=lines, framealpha=0.5, fontsize=11)
分别看一下读写等待时间:
lines = [plot(data[x]['w_await'], x+'/w') for x in devices] + \
[plot(data[x]['r_await'], x+'/r') for x in devices]
plt.legend(handles=lines, framealpha=0.5, fontsize=11)