dirty_expire_centisecs的实现

时间:2013-08-21 09:16:18

标签: linux-kernel

我正在尝试了解具有2.6和3.0内核的服务器上dirty_expire_centisecs参数的行为。

内核文档说(vm.txt / dirty_expire_centisecs) “下次刷新线程唤醒时,将记录内存中脏的时间超过此间隔的数据。”

这意味着,不会写入内存中短于此间隔的脏数据。

根据我的测试,dirty_expire_centisecs的行为如下:当回写计时器在到期计时器之前触发时,不会刷新任何页面,否则将刷新所有页面。 如果达到background_bytes限制,则根据速率刷新全部或部分,与两个计时器无关。

我的测试告诉我低写入率(每秒小于1MB),dirty_background_bytes触发器将刷新所有脏页并以稍高的数据速率(高于每秒2MB),它只刷新一部分脏数据,与到期价值无关。

这与vm.txt中的内容不同。不刷新最新数据是有意义的。对我来说,观察到的行为不符合逻辑,实际上毫无用处。你们觉得怎么样?

我的测试设置: 具有16GB RAM的服务器运行Suse 11 SP1,SP2和RedHat 6.2(多重启动设置)

vm.dirty_bytes = 50000000            // 50MB <br>
vm.dirty_background_bytes = 30000000 // 30MB <br>
vm.dirty_writeback_centisecs = 1000  // 10 seconds <br>
vm.dirty_expire_centisecs = 1500     // 15 seconds <br>

使用文件写入工具,我可以控制write()的每秒速率和大小。

1 个答案:

答案 0 :(得分:7)

我在linux-kernel邮件列表上问了这个问题,得到了Jan Kara的回答。到期时间的时间戳是文件inode的modtime。因此,当到期时间发生时,将在同一文件中弄脏多个页面,因为它们都与相同的inode相关联。

http://lkml.indiana.edu/hypermail/linux/kernel/1309.1/01585.html