我目前正在进行一项关于磁盘文件操作(可能是某种数据库管理系统)中b+树和普通平衡树性能测试的工作,使用C语言编写。预计b+树比平衡二叉搜索树更快,因为它执行的磁盘I/O操作较少。但是在进行了一些测试后,我发现系统正在对磁盘文件进行缓存,文件已完全保存在内存中(我的内存大小为32GB)!由于不会执行任何磁盘I/O操作,因此b+树绝不可能比平衡二叉搜索树更快。所以我想知道是否有一种方法可以禁用系统缓存,以便使b+树在性能上获胜?我已经尝试使用O_DIRECT|O_SYNC打开文件:
int fd = Open("sb.dat", O_DIRECT|O_SYNC|O_CREAT|O_RDWR, S_IRWXU|S_IRWXG|S_IRWXO);
但是似乎没有起作用。
这里是由getrusage()提供的一些信息。
页面回收:1359821
页面错误:9