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

Cla*_*hen 5 c unix caching

我目前正在进行b +树与普通平衡树的性能测试,对C中的磁盘文件操作(可能是一种dbms)进行性能测试.预计b b +树比bbst快,因为它执行的磁盘数量较少I/O操作.但我发现,经过一些测试,系统正在对磁盘文件进行缓存,文件完全保存在内存中(我的内存大小为32GB)!b + tree绝不会比bbst更快,因为不会执行磁盘I/O. 所以我想知道是否有办法禁用系统缓存,以便b +树将在perf中获胜?我试过用O_DIRECT | O_SYNC打开文件:

int fd = Open("sb.dat", O_DIRECT|O_SYNC|O_CREAT|O_RDWR, S_IRWXU|S_IRWXG|S_IRWXO);
Run Code Online (Sandbox Code Playgroud)

但它似乎不起作用.

以下是getrusage()提供的一些信息

页面回收:1359821

页面错误:9

iab*_*der 2

据我所知,即使您使用,内核仍然会缓存磁盘上的块O_DIRECT,您可以删除内核缓存,但这仅在第一次有效:

echo 3 > /proc/sys/vm/drop_caches
Run Code Online (Sandbox Code Playgroud)