我有一个只运行一周的C程序,只读取大量文件一次.由于Linux还会缓存所有已读取的内容,因此它们会不必要地填充缓存,除非它具有SSD驱动器,否则会大大减慢系统速度.
那么如何在不填满磁盘缓存的情况下打开和读取文件呢?
注意:
通过磁盘缓存我的意思是当你读取文件两次时,第二次从RAM读取,而不是从磁盘读取.即从磁盘读取的数据留在RAM中,因此后续读取同一文件不需要重新读取磁盘中的数据.
我相信,通过O_DIRECT
对open()
应该有所帮助:
O_DIRECT(自Linux 2.4.10起)
尝试最小化I/O与此文件之间的缓存效果.通常,这会降低性能,但在特殊情况下很有用,例如应用程序执行自己的缓存时.文件I/O直接进出用户空间缓冲区.O_DIRECT标志本身用于同步传输数据,但不保证O_SYNC传输数据和必要的元数据.为了保证同步I/O,除O_DIRECT外还必须使用O_SYNC.
关于手册页O_DIRECT
底部的进一步详细说明,包括来自Linus的有趣引用.
您可以使用posix_fadvise()
与POSIX_FADV_DONTNEED
建议,要求系统释放您已经阅读网页.