在一次性能测试中,想绕过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