如何配置 Linux 以优先于内容缓存文件元数据?

如何配置 Linux 以优先于内容缓存文件元数据?

我想将系统设置为将大部分 RAM 用于文件系统元数据缓存,但仅使用相当少量的 RAM 用于读/写缓存和预取文件。理想情况下,我希望能够浏览文件系统(只要它适合 RAM),而无需旋转磁盘,直到我真正打开文件。

详细信息如下:

我有一个自制的文件服务器。它的 LVM 卷中有五个磁盘,容量约为 9TB,但 RAM 只有 4GB。由于服务器除了提供文件之外不做太多其他事情,因此大部分 RAM 用于缓存。 (“免费”报告 3.9G 中的 3.4G 用于缓存。)

服务器位于我的卧室里,如果所有磁盘都在旋转,那么在安静时会产生足够的噪音,令人烦恼。 (我不是指寻道噪音,只是旋转噪音。磁盘有不同的品牌和型号,我认为旋转速度的细微差异会导致干扰。没有磁盘本身有噪音,但如果其中一些磁盘一起旋转,就会产生干扰。亚赫兹周期的轻微噪音。)因此我将服务器配置为在大多数时间降低磁盘转速。

当然,如果当我在文件管理器中打开文件夹时磁盘旋转速度降低,则无论哪个磁盘具有该文件夹旋转都会出现延迟。只是这没什么大不了的。但根据我查看的位置,如果 LVM 碰巧将每个子文件夹的元数据分布在不同磁盘上,则这种情况可能会连续发生几次。

我怀疑 Linux 的缓存主要是用文件内容填充的,也可能是预取的数据。超过几 MB 的缓存对于确保流畅播放来说并不是很有用;如果我只是看了一部电影,我可能不会很快再看一遍。预取,如果发生的话,也是完全没有用的就我而言,超过几MB之后。

但有人会认为 4GB 应该足以缓存大多数文件系统元数据,至少是那些已经访问过的部分,这样我就可以浏览文件,而无需旋转磁盘(如果事实证明它们是)睡眠。

打开文件时仍然会有延迟,但没关系。比较“点击;等待;点击;等待;点击;等待;玩;观看”与“点击;点击;点击;玩;等待;手表”。前者令人难以置信地沮丧;后者令人难以置信。后者几乎是预料之中的。

笔记:

  1. 如果重要的话,内核是3.2,操作系统是Debian,卷是lvm2,FS是ext4。

  2. 转速下降的唯一原因是夜间噪音;否则服务器将持续运行。 (我将其设置为尽可能低功耗。)旋转延迟根据一天中的时间而变化。

  3. 硬盘仅用于媒体。操作系统位于单独的(小)闪存驱动器上。 (这意味着任何启动延迟都来自数据,而不仅仅是因为它需要一些东西/usr或其他什么。如果它能以某种方式帮助解决我的问题,我可以在上面腾出几 GB 的空间。

  4. 对性能的合理影响并不是什么大问题。无论如何,磁盘比我的网络更快。

答案1

要控制Linux如何缓存事物,请参考此 https://www.kernel.org/doc/Documentation/sysctl/vm.txt

特别是看看 vfs_cache_Pressure,您可能想要一个非常低的值,甚至可能为零(不过 1 对我来说听起来更安全):

vfs_cache_pressure
------------------

Controls the tendency of the kernel to reclaim the memory which is used for
caching of directory and inode objects.

At the default value of vfs_cache_pressure=100 the kernel will attempt to
reclaim dentries and inodes at a "fair" rate with respect to pagecache and
swapcache reclaim.  Decreasing vfs_cache_pressure causes the kernel to prefer
to retain dentry and inode caches. When vfs_cache_pressure=0, the kernel will
never reclaim dentries and inodes due to memory pressure and this can easily
lead to out-of-memory conditions. Increasing vfs_cache_pressure beyond 100
causes the kernel to prefer to reclaim dentries and inodes.

此外,您可能需要进行修改swappiness,以便永远不会交换数据或使其仅在极端情况下发生。

drop_caches选项对于显式删除您不想再缓存的数据可能很方便。

我确信可能还有其他选项可以提供帮助,因此请查看内核文档。

为了应用它们,我会将您想要更改的设置/etc/sysctl.conf或您的操作系统必须在启动时恢复它们的任何内容放入其中。

相关内容