Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 有没有办法禁用磁盘文件的系统(unix)缓存?_C_Unix_Caching - Fatal编程技术网

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

C 有没有办法禁用磁盘文件的系统(unix)缓存?,c,unix,caching,C,Unix,Caching,我目前正在做一个性能测试,测试b+树和普通的平衡树磁盘文件操作(可能是一种dbms),因为它执行的磁盘I/O操作更少,所以预期比bbst更快。但我发现,经过一些测试,系统正在对磁盘文件进行缓存,文件完全保存在内存中(我的内存大小是32GB)!b+树决不能比bbst快,因为不会执行磁盘I/O。因此,我想知道是否有一种方法可以禁用系统缓存,以便b+树在性能方面获胜?我已尝试使用O|u DIRECT | O|u SYNC打开文件: int fd = Open("sb.dat", O_DIRECT|O_

我目前正在做一个性能测试,测试b+树和普通的平衡树磁盘文件操作(可能是一种dbms),因为它执行的磁盘I/O操作更少,所以预期比bbst更快。但我发现,经过一些测试,系统正在对磁盘文件进行缓存,文件完全保存在内存中(我的内存大小是32GB)!b+树决不能比bbst快,因为不会执行磁盘I/O。因此,我想知道是否有一种方法可以禁用系统缓存,以便b+树在性能方面获胜?我已尝试使用O|u DIRECT | O|u SYNC打开文件:

int fd = Open("sb.dat", O_DIRECT|O_SYNC|O_CREAT|O_RDWR, S_IRWXU|S_IRWXG|S_IRWXO);
但这似乎不起作用

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

页面回收:1359821


页面错误:9

即使使用
O_DIRECT
,内核仍将缓存磁盘中的块,您可以删除内核缓存,但这仅在第一次使用时有效:

echo 3 > /proc/sys/vm/drop_caches

为什么要与关闭的缓存进行比较。这是你在现实生活中得到的。如果您想了解它在执行更多任务或更多内存负载时的表现,请运行一些并行基准测试,或者编写一个“memmuncher”应用程序来分配并访问该内存(在循环中-确保您仍然有足够的CPU容量来运行系统)。O_DIRECT | O|U SYNC | O|U CREAT O|RDWR仍然无法工作:(消耗所有32GB物理内存并不容易,而且它是一个由所有实验室成员共享的服务器,这样做不是很好。@ClannChen您可以在每次I/O之前调用它