bog*_*anb 15 linux filesystems cache
我想将系统设置为将大部分 RAM 用于文件系统元数据缓存,但对于读/写缓存和预取文件只使用相当少的 RAM。理想情况下,我希望能够浏览文件系统(尽可能多地放入 RAM),而无需启动磁盘,直到我真正打开文件。
以下是详细信息:
我有一个自制的文件服务器。它在大约 9TB 的 LVM 卷中有五个磁盘,但只有 4GB 的 RAM。由于服务器除了提供文件之外并没有做太多其他事情,因此大部分 RAM 用于缓存。(“免费”报告用于缓存的 3.9G 中有 3.4G。)
服务器住在我的卧室里,如果所有的磁盘都在旋转,它会在安静的时候发出足够的噪音。(我的意思不是搜索噪音,只是旋转噪音。磁盘有各种品牌和型号,我认为旋转速度的细微差异会引起干扰。没有磁盘本身会产生噪音,但如果其中一些一起旋转,则会有亚赫兹周期的轻微噪音。)所以我将服务器配置为大部分时间都降低磁盘转速。
当然,如果在我的文件管理器中打开文件夹时磁盘转速下降,那么无论哪个磁盘具有该文件夹转速都会有延迟。只是这没什么大不了的。但是,根据我查看的位置,如果 LVM 碰巧将每个子文件夹的元数据分布在不同磁盘上,它可能会连续发生多次。
我怀疑 Linux 主要用文件内容填充其缓存,可能还有预取数据。超过几 MB 的缓存对于确保流畅播放不是很有用;如果我只是看了一部电影,我可能很快就不会再看它了。预取,如果发生的话,在我的情况下也是完全没用的,在超过几 MB 之后。
但是有人会认为 4GB 应该足以缓存大多数文件系统元数据,至少那些已经访问过的部分,这样我就可以浏览文件而无需启动磁盘,如果事实证明它们是睡眠。
打开文件时仍然会有延迟,但没关系。比较“点击;等待; 点击; 等待; 点击; 等待; 玩; 用“点击”观看”;点击; 点击; 玩; 等待; 手表”。前者令人难以置信地令人沮丧;后者几乎在意料之中。
笔记:
没关系,内核是3.2,操作系统是Debian,卷是lvm2,FS是ext4。
减速的唯一原因是夜间噪音;否则服务器会持续运行。(我把它做得尽可能低功耗。)降速延迟取决于一天中的时间。
硬盘仅用于媒体。操作系统位于单独的(小)闪存驱动器上。(这意味着任何启动延迟都来自数据,而不仅仅是因为它需要一些东西/usr
或其他东西。如果它能以某种方式帮助我解决问题,我可以在上面节省几 GB。
对性能的合理影响没什么大不了的。无论如何,磁盘比我的网络快。
Kyl*_*yle 12
要控制 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.
Run Code Online (Sandbox Code Playgroud)
此外,您可能希望进行修改,swappiness
以便永远不会交换数据或使其仅在极端情况下发生。
该drop_caches
选项对于显式删除您不想再缓存的数据可能很方便。
我确定可能还有其他选项可能会有所帮助,因此请查看内核文档。
要应用它们,我会将您想要更改的设置/etc/sysctl.conf
或您的操作系统在启动时恢复它们的任何设置放入。
归档时间: |
|
查看次数: |
3605 次 |
最近记录: |