我有一个只运行一周的C程序,并且只读取大量文件 。由于Linux还会缓存所有已读取的内容,因此它们会不必要地填满缓存,除非它有SSD驱动器,否则会大大减慢系统速度。
那么如何在不填满磁盘缓存的情况下打开和读取文件?
注意:
通过磁盘缓存我的意思是当你读取文件两次时,第二次从RAM读取,而不是从磁盘读取。即从磁盘读取的数据留在RAM中,因此后续读取同一文件不需要重新读取磁盘中的数据。
答案 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
建议来请求系统释放您已阅读过的网页。