11

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

内核文档说(vm.txt/dirty_expire_centisecs)“内存中脏的时间超过这个时间间隔的数据将在下次刷新线程唤醒时被写出。”

这意味着,在内存中停留时间短于此时间间隔的脏数据将不会被写入。

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

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

这与 vm.txt 中所说的不同。不刷新最新数据是有意义的。对我来说,观察到的行为是不合逻辑的,实际上毫无用处。你们有什么感想 ?

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

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() 的每秒速率和大小。

4

1 回答 1

12

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

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

于 2013-09-10T23:36:56.793 回答