是否有办法禁用磁盘文件的系统(unix)缓存



我目前正在做一个性能测试,b+tree与普通平衡树在c中的磁盘文件操作(可能是一种dbms)上的性能测试。b+tree预计比bst更快,因为它执行更少的磁盘I/O操作。但是我发现,经过一些测试,系统正在为磁盘文件做缓存,文件完全保存在内存中(我的内存大小是32GB)!b+tree不可能比bst更快,因为它不会执行任何磁盘I/O。所以我想知道是否有一种方法来禁用系统缓存,使b+树将赢得性能?我试着用O_DIRECT|O_SYNC:

打开文件
int fd = Open("sb.dat", O_DIRECT|O_SYNC|O_CREAT|O_RDWR, S_IRWXU|S_IRWXG|S_IRWXO);

但似乎不工作。

下面是getusage ()

提供的一些信息

页面回收:1359821

页面错误:9

AFAIK内核仍然会缓存磁盘块,即使你使用O_DIRECT,你可以放弃内核缓存,但这只在第一次工作:

echo 3 > /proc/sys/vm/drop_caches

最新更新