我正在处理文件系统中的一亿个文件(分布在许多子目录中),我需要能够非常快速地列出它们,特别是为了有效地 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 缓存(而不是页面缓存和交换)的内存的趋势。
一些重要的价值观:
=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
对我来说,将其减少到介于两者之间的某个值10
会15
产生良好的性能,但这当然在很大程度上取决于您的系统、用户数量以及在其上运行的服务。我认为除了尝试并仔细查看影响之外,没有其他替代方法。
你可能想深入了解slabtop
。
slabtop
将帮助您调查更改此内核参数和相关内核参数时产生的后果(dentry
这*inode_cache
很可能是您最需要的 ->这个答案也可能有帮助)。