如何彻底清除 Linux 上的文件系统缓存?

如何彻底清除 Linux 上的文件系统缓存?

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

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

有没有彻底的办法关闭系统缓存的影响呢?

答案1

(它实际上会下降,所以..)先跑sync,然后

空闲的页面缓存:

echo 1 > /proc/sys/vm/drop_caches

空闲的 dentry 和 inode:

echo 2 > /proc/sys/vm/drop_caches

释放页面缓存、目录项和 inode:

echo 3 > /proc/sys/vm/drop_caches

然后您可以从干净的缓存开始,但当然缓存仍然有效。

答案2

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

你好,CK

相关内容