在Linux中读取没有磁盘缓存的文件

时间:2013-03-07 08:10:55

标签: linux io

我有一个只运行一周的C程序,并且只读取大量文件 。由于Linux还会缓存所有已读取的内容,因此它们会不必要地填满缓存,除非它有SSD驱动器,否则会大大减慢系统速度。

那么如何在不填满磁盘缓存的情况下打开和读取文件?

注意:

通过磁盘缓存我的意思是当你读取文件两次时,第二次从RAM读取,而不是从磁盘读取。即从磁盘读取的数据留在RAM中,因此后续读取同一文件不需要重新读取磁盘中的数据。

2 个答案:

答案 0 :(得分:7)

我相信将O_DIRECT传递给open()会有所帮助:

  

O_DIRECT(自Linux 2.4.10起)

     

尝试最小化I / O与此文件之间的缓存效果。通常,这会降低性能,但在特殊情况下很有用,例如应用程序执行自己的缓存时。文件I / O直接进出用户空间缓冲区。 O_DIRECT标志本身用于同步传输数据,但不保证O_SYNC传输数据和必要的元数据。为了保证同步I / O,除O_DIRECT外还必须使用O_SYNC。

man page的底部O_DIRECT还有更详细的说明,包括Linus的有趣引用。

答案 1 :(得分:6)

您可以posix_fadvise()使用POSIX_FADV_DONTNEED建议来请求系统释放您已阅读过的网页。