我正在测试我对某些代码所做的更改是否有效。为此,我需要知道文件系统缓存通常如何工作。我假设我们得到的是默认值,因为我们可能没有对此进行任何有趣的调整。
本质上,如果我从代码中询问“这个文件是否存在?”,答案会在“x”毫秒内返回。如果我几分钟后再次询问,答案就会返回很多,很多更快,所以我猜那里有一些缓存。
如果我想再次测试,我应该等待多长时间,刷新缓存,所以它会再次花费“很长时间”?(我想看看我是否修复了 Web 应用程序中的性能问题,但我只能知道如果文件存在的信息没有被缓存,它是否已经修复,因为如果是,它确实运行得很快)
我知道这不是最有说服力的问题,答案可能是“视情况而定”,我要求一个合理的默认值。换句话说,如果我在 3 小时、6 小时或其他时间后再次测试,我可以指望它不会被缓存吗?
据我所知...这是一台 Ubuntu 服务器,内核版本:3.9.3-x86-linode52,Ubuntu 版本:Ubuntu 12.04.3 LTS,托管在 Linode 上。文件系统为 ext3
谢谢!
Daniel
答案1
你可能遇到的是索引节点缓存,因为exists
查询只需查看 inode 即可满足。文件缓存有点不同。幸运的是,Linux 确实提供了一种通过drop_caches机制暴露于/proc/sys/vm/dropcaches
。
To free dentries and inodes:
echo 2 > /proc/sys/vm/drop_caches