调整 Linux 缓存的 inode 缓存设置

调整 Linux 缓存的 inode 缓存设置

我正在处理文件系统中的一亿个文件(分布在许多子目录中),我需要能够非常快速地列出它们,特别是为了有效地 rsync 它们。

另一方面,我实际上并不需要将文件的实际内容保存在缓存中。

我不断地添加和删除文件,但不是那么频繁(大约每秒十次)。

有没有办法可以告诉操作系统 (2.6.18-194.el5) 将 24GB 可用 RAM 更多地用于 inode 缓存而不是文件缓存?我已经查看了 /proc/etc/vm/vfs_cache_pressure,但它似乎并不是我想要的……

答案1

降低 的值怎么样vfs_cache_pressure?根据/proc/sys/vm/* 的文档这应该可以满足您的要求:

vfs_cache_压力

该百分比值控制内核回收用于缓存目录和 inode 对象的内存的趋势。

在默认值 vfs_cache_pressure=100 下,内核将尝试以与页面缓存和交换缓存回收相比“公平”的速率回收 dentry 和 inode。降低 vfs_cache_pressure 会导致内核倾向于保留 dentry 和 inode 缓存。当 vfs_cache_pressure=0 时,内核将永远不会因内存压力而回收 dentry 和 inode,这很容易导致内存不足的情况。将 vfs_cache_pressure 增加到 100 以上会导致内核倾向于回收 dentry 和 inode。

将 vfs_cache_pressure 大幅增加至 100 以上可能会对性能产生负面影响。回收代码需要使用各种锁来查找可释放的目录和 inode 对象。如果 vfs_cache_pressure=1000,它将查找比实际多十倍的可释放对象。

答案2

您可以使用这两个命令来完成相同的工作。

Updateb(更新整个驱动器中的文件和文件夹位置列表)

定位/(列出整个操作系统中的所有文件,从数据库中获取文件的速度非常快)

答案3

补充寻求者的回答我想补充/强调一些关于的事情vfs_cache_pressure

简而言之

影响系统回收用于 VFS 缓存(而不是页面缓存和交换)的内存的趋势。

->/proc/sys/vm/ 的文档

一些重要的价值观:

  • =0:内核将永不收回记忆
  • =100:以“公平”利率回收(=默认)

为了应用更改暂时地调整值:

$ cat /proc/sys/vm/vfs_cache_pressure 
15

为一个永恒的更改(重启时应用):

在 中添加一行/etc/sysctl.conf或者(更好的方法是)在 中创建一个新文件/etc/sysctl.d/*.conf。例如:

$ cat 10-vfs-cache-pressure.conf 
vm.vfs_cache_pressure=10

对我来说,将其减少到介于两者之间的某个值1015产生良好的性能,但这当然在很大程度上取决于您的系统、用户数量以及在其上运行的服务。我认为除了尝试并仔细查看影响之外,没有其他替代方法。


你可能想深入了解slabtop

slabtop将帮助您调查更改此内核参数和相关内核参数时产生的后果(dentry*inode_cache很可能是您最需要的 ->这个答案也可能有帮助)。

相关内容