查找/ls缓存

查找/ls缓存

似乎我第一次运行findls在目录上运行时需要一段时间才能工作。但是,此后每次都很快,就好像目录内容的列表已在某处缓存或索引一样。

有没有办法在计算机重启后保留该缓存?

答案1

您可以使用虚拟触摸将文件添加到页面缓存(磁盘缓存)。

放入nohup vmtouch -dl <files or directories> &文件/etc/rc.local以在启动时将文件添加并锁定到页面缓存中。如果要将文件添加到页面缓存,但不想将它们锁定到内存中,请使用 标志-t而不是 标志-ld

有关页面缓存的更多信息,请参阅这里,这里,以及关于维基百科

答案2

“重启后保留”,我对此表示怀疑。但是您可以在启动时轻松地重建缓存,这几乎可以完成相同的事情,只是有一点延迟。

创建一个文件/etc/cron.d/rebuild-fs-cache并将以下内容放入其中:

@reboot root /usr/bin/nice -n 19 /usr/bin/ionice -c 3 -t /usr/bin/find / >/dev/null 2>&1

这使用niceionice(应该默认安装,并且肯定可以通过包管理器使用;Debian 将它们分别放入coreutilsutil-linux)来将进程的优先级降低find到尽可能好的级别,这意味着它不应该干扰其他任何事情在您的系统上运行,但需要稍长的时间才能完成。find它本身将经历stat()一切,这迫使内核将文件系统数据从磁盘加载到内存中。

一旦构建了缓存,只要它不会因为操作系统需要内存用于其他用途而被清除,就应该对其进行维护。我已经使用它有一段时间了,即使在大型目录中,目录列表也是如此显著地比没有上述 cron 作业更快,尽管我无法引用任何确切的数字。

相关内容