问题描述
在图一中 “下载”下的速率和图二中磁盘写入的速率差异较大。这是否合理呢?
图1中,输入的来源为: cat /proc/pid/io
图2 中的数据来源:cat /proc/diskstats
IO cache的两个参数
在这里,我们关注 如下两个和 IO cache相关的参数。
1) cat /proc/sys/vm/dirty_expire_centisecs 控制IO在内存中变为脏数据的时间,也就是IO在内存中超过此时间后,下次flush线程往硬盘刷数据的时候就会将此段内存中的数据写入到磁盘中。
例如配置为 6000, 实际则为 6000/100=60秒 ,数据即变为脏数据。
此数据越长,由于数据不会被及时刷到硬盘,则会占用的内存越多。
2) proc/sys/vm/dirty_writeback_centisecs 控制将IO从内存刷到硬盘的flush线程的休眠时间。休眠时间越长,即刷新频度越低。例如 3000,即30s刷新一次。
将上述两个字段改小,例如,笔者将第一个字段改为100,即1s即为脏数据;第二个参数修改为10,即100ms,就刷新一次。这样可以使得IO数据在内存中的时间变短,此时再观测 图 1 图2的数据。尤其图2的数据,由于在内存时间短,波动变得很小了。