我试图理解具有2.6和3.0内核的服务器上的dirty_expire_centisecs参数的行为。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()的每秒速率和大小。
有没有人有任何意见。至少证实或拒绝我的观察? – Harshana
我在Ubuntu kernel 3.5.0-23-generic上观察到了与dirty_expire_centisecs相同的行为。我同意你的看法,似乎很无用。我还没有用dirty_background_bytes进行试验。通常,我将dirty_background_ratio设置为50%,但它不相关,因为dirty_expire计时器总是在它到达之前跳过。 – hyc
我正在观察脏页面在达到dirty_background_bytes和dirty_bytes值之前刷新的行为。任何人都可以为什么会发生这种情况,是否有其他人观察过这种行为? –