如何在Linux上完全清除filesytem的缓存?


9

在性能测试中,我想绕过linux系统缓存的影响(包括页面缓存/ inode缓存等)。

我已经尝试过O_DIRECT标志,但事实证明,直接I / O仍在“享受”某些缓存的效果。

是否有彻底的方法来关闭系统缓存的影响?


2
这样的“虚幻”性能测试有什么意义?您正在尝试测试现代操作系统永远不会发生的事情。

不幸的是,这并不是完全不真实的,它仍然是当今内核aio的工作方式。我非常希望T先生能意识到异步I / O和缓存不是相互排斥的术语。微软的家伙已经在15年前意识到了这一点(尽管公认的是Vista之前的性能可能令人失望,尤其是在并发情况下)。几年前,一些印度人也写了补丁,但被拒绝了。

Answers:


14

(实际上下降了。)sync先运行,然后

免费的页面缓存:

echo 1 > /proc/sys/vm/drop_caches

免费的牙科和inode:

echo 2 > /proc/sys/vm/drop_caches

免费的页面缓存,牙科和索引节点:

echo 3 > /proc/sys/vm/drop_caches

然后,您可以从干净的缓存开始,但是当然缓存仍然可以使用。


我在某处听说过这种方法。但我的ubuntu 10.04上没有此类文件。所以我无法执行上述命令。

@tom_cat:您需要的内核版本高于2.6.16,如果我没记错的话,Ubuntu 10.04附带了2.6.32,所以应该可以。我刚刚检查了我的11.04安装是否值得,它确实具有此proc条目(不幸的是,这里再没有10.04了)

@Damon:是的,你是对的。非常感谢。我发现我已经登录了较旧内核的远程计算机。

0

不,您不能绕过缓存。但是,但是,您可以使用附加的系统调用fsync(3)强制文件系统同步(这意味着清除缓存并将数据写入磁盘)。

问候,CK

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.