问题描述

在图一中  “下载”下的速率和图二中磁盘写入的速率差异较大。这是否合理呢?

io 缓存对统计数据显示的影响_字段

io 缓存对统计数据显示的影响_脏数据_02

图1中,输入的来源为: cat /proc/pid/io

io 缓存对统计数据显示的影响_字段_03

图2 中的数据来源:cat /proc/diskstats 

io 缓存对统计数据显示的影响_脏数据_04


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的数据,由于在内存时间短,波动变得很小了。