有select地清除caching/缓冲区

是否可以在Linux下有select地清除特定文件系统或文件系统中的文件/目录的内容。

这可以通过全局sync; echo 3 > /proc/sys/vm/drop_caches完成sync; echo 3 > /proc/sys/vm/drop_caches sync; echo 3 > /proc/sys/vm/drop_caches并暂时卸载和重新sync; echo 3 > /proc/sys/vm/drop_caches它的整个文件系统,但我没有遇到一个更细粒度的选项。

我为什么要这个? 如果由于稍后将要重复的进程的I / O而存在一堆块caching,然后运行一次性(或常规但不是频繁的)任务,导致大块数据被caching(但不足以推出第一批),我可能想告诉内核,我不再关心第二批块,所以如果发生第三批I / O,它就不会被加载的第一批从光盘 – 所以即将重复的任务不下降,由于一次性任务下一次运行。

或者,有没有办法以这样的方式启动一个进程:告诉内核“这是一次性的,不要超出你的方式来caching它在结束之后触及的内容”。

这当然可能是我想浪费时间微观pipe理我应该离开的东西,让内核不受干扰…

在Linux系统中调用这个函数可能会提示不同的文件被caching或者不被caching,并且还build议读取模式的types(即顺序或者随机)。 有人在这里写了一个命令行包装。 您感兴趣的两个选项我认为是:

 -dontneed Announces the expectation that file content won't be needed in the near future. Under Linux 2.6.9, this is known to cause the file content to be evicted from the buffer-cache immediately. Note that this option first causes an fsync of the file. -noreuse Announces the expectation that file content won't be reused in the near future. 

你为什么要这样做? 您可能希望在运行期间caching数据。 一旦运行完成,caching的数据会随着更新的请求进入内存而耗尽内存。同时,它将驻留在其他未使用的内存中。

做原始I / O可能会保持驱动器内部caching的缓冲。 这可能会导致应用程序的性能下降,因为您放弃了操作系统caching和随后的加速。 当我第一次开始担心相对访问速度的时候,内存占用了100/1。 自从caching和I / O的好处一直在稳步增加。

任何安全考虑事项都是一个有争议的问题,因为磁盘映像很可能是可用的。