Linux 内核 - 是否有用于写入的预读/预取机制?

问题描述

我知道预读是 Linux 内核中的一种预取形式,但我认为预取更多是关于硬件(缓存)预加载,而预读是从磁盘加载到内存/RAM 的操作系统级行为。似乎在读取过程中预读是 only used 而不是写入。我知道名称中包含“读取”,但为什么不将预读/预取用于写入?

按照建议 here,我想我有一个答案(在下面发布),但想要评论、建议或更好的答案。

解决方法

没有“预写”特定机制,因为可以从中受益的写操作已经隐式地产生预读。

想到的两种写入情况是 1)“修改文件”写入和 2)“完全覆盖”写入。

  1. “修改文件”写入 - 在这种情况下,您知道要修改文件。您不需要为此写入使用“预写”机制的原因是因为这种类型的写入已经隐式地包含了读取。程序必须读入文件,以便您可以修改文件的特定部分。在读取过程中,幕后内核已经可以进行预读,以帮助将来进行读取或写入。

  2. “完全覆盖”写入 - 在这里,您不关心文件的内容是什么,您只需向其中写入全新的数据。不需要读取文件,写入(假设它覆盖单页内存)理论上可以写入 RAM 中的新页面,然后标记为写回磁盘。没有迹象表明需要任何预取,因为过去的历史记录(完全覆盖)不需要读取/加载内存。