我想将空闲内存用于写入缓存。 Linux 自动执行此操作,但它有一些奇怪的刷新算法,我希望对其进行调整以供我使用。
我最近用来ddrescue
复制磁盘。它读取一个块并将该块写入磁盘。
我想要的是让读取尽可能多地读取,直到没有更多可用空间,然后阻塞直到释放一些空间,同时写入尽可能快地写入以释放内存。
因此,如果写入磁盘比读取磁盘快,则不会使用内存,如果写入磁盘比读取磁盘慢,则所有内存将保持使用状态,直到复制完成。
在这两种情况下,内存使用量保持不变(除非其他程序占用一些可用内存)。
但我看到的是这样的:
读取会填满缓存(而几乎没有写入),并且当缓存达到限制(或在一段时间后)时,读取将被阻止全部缓存被写入磁盘。这几乎就像一个巨魔时不时地运行“同步”。
我尝试更改 /proc/sys/vm/dirty_* 但无济于事:我能够引起的唯一变化是顶部有多高。因此,提到 /proc/sys/vm/dirty_* 的答案必须提供可测量地压平锯齿图的测试值。
告诉 Linux 尽快开始写入但如果有可用空间则永远不会阻止读取或写入的调整很可能适合我的目的。
我知道像mbuffer
.它们会使图形变平,但它们不是动态的(即,当可用内存较低时释放内存),并且它们不允许查找,因此它们不能与类似的程序一起使用ddrescue
(必须来回查找)。