linux-kernel – dirty_expire_centisecs的实现

前端之家收集整理的这篇文章主要介绍了linux-kernel – dirty_expire_centisecs的实现前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图了解具有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()的每秒速率和大小.

解决方法

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

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

原文链接:https://www.f2er.com/linux/393219.html

猜你在找的Linux相关文章