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

问题描述 投票:0回答:2

我知道预读是 Linux 内核中预取的一种形式,但我认为预取更多的是关于硬件(缓存)预加载,而预读是一种操作系统级别的行为,用于从磁盘加载到内存/RAM。似乎预读“仅在读取期间使用”,但不适用于写入。我知道名称中有“读取”,但为什么写入时不使用预读/预取? 根据

here

的建议,我想我有一个答案(发布在下面),但希望得到评论、建议或更好的答案。

linux memory-management linux-kernel operating-system prefetch
2个回答
0
投票

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

    “修改文件”写入 - 在这种情况下,您知道您要修改文件。您不需要为此写入使用“预写”机制的原因是因为这种类型的写入已经隐式包含读取。该程序必须读入该文件,以便您可以修改该文件的特定部分。在读取期间,幕后的内核已经可以进行预读以帮助将来的读取或写入。
  1. “完全覆盖”写入 - 在这里,您不关心文件的内容是什么,您只需向其中写入全新的数据即可。无需读取文件,理论上,写入(假设它覆盖单页内存)可以写入 RAM 中的新页面,然后标记为写回磁盘。没有迹象表明需要任何预取,因为过去的历史记录(完全覆盖)不需要读取/加载内存。

0
投票

,但是错误分配,它提前分配磁盘空间以准备向其写入内容。 例如,bittorrent 文件——文件块以某种随机顺序下载,并且在没有错误分配的情况下,它们通常按照下载顺序写入磁盘。 你去读回文件,它会被乱码地写入磁盘,或者磁盘上的块只是简单的,所以读回文件的速度可能会相当慢。 使用fallocate,文件的空间会提前预留,写入会跳转到预留空间中的“正确”位置,因此当您读回它时,它是一个很好的线性文件。

© www.soinside.com 2019 - 2024. All rights reserved.