似乎我第一次运行find
或ls
在目录上运行时需要一段时间才能工作。但是,此后每次都很快,就好像目录内容的列表已在某处缓存或索引一样。
有没有办法在计算机重启后保留该缓存?
答案1
答案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
这使用nice
和ionice
(应该默认安装,并且肯定可以通过包管理器使用;Debian 将它们分别放入coreutils
和util-linux
)来将进程的优先级降低find
到尽可能好的级别,这意味着它不应该干扰其他任何事情在您的系统上运行,但需要稍长的时间才能完成。find
它本身将经历stat()
一切,这迫使内核将文件系统数据从磁盘加载到内存中。
一旦构建了缓存,只要它不会因为操作系统需要内存用于其他用途而被清除,就应该对其进行维护。我已经使用它有一段时间了,即使在大型目录中,目录列表也是如此显著地比没有上述 cron 作业更快,尽管我无法引用任何确切的数字。