Linux文件系统是否有效地缓存文件?

时间:2011-08-19 07:56:08

标签: linux filesystems memcached

我正在创建一个在Linux服务器上运行的Web应用程序。应用程序不断访问250K文件 - 它将其加载到内存中,读取并将一些信息发送回用户。由于这个文件一直被读取,我的客户端建议使用像memcache这样的东西将它缓存到内存中,大概是因为它会使读取操作更快。

但是,我认为Linux文件系统可能已经将文件缓存在内存中,因为它经常被访问。是对的吗?在您看来,memcache会提供真正的改进吗?或者它会做与Linux已经做的相同的事情吗?

我对Linux和memcache都不熟悉,所以如果有人能澄清这一点,我真的很感激。

5 个答案:

答案 0 :(得分:20)

是的,如果每次打开文件都不修改文件。

Linux会将文件的信息保存在内存中的写时复制页面上,并且将文件“加载”到内存中的速度应该非常快(最糟糕的是页面表交换)。

编辑:虽然,正如cdhowie指出的那样,没有'linux filesystem'。但是,我相信相关代码是在linux的内存管理中,因此独立于所讨论的文件系统。如果您很好奇,可以在linux源代码中阅读有关在linux / mm / mmap.c中处理vm_area_struct对象的内容。

答案 1 :(得分:3)

正如人们所提到的,mmap是一个很好的解决方案。

但是,一个250k文件非常小。您可能希望将其读入并将其放入某种内存结构中,该结构与您在启动时要发送回用户的内容相匹配。即,如果它是文本文件,则数组行可能是一个不错的选择,等等。

答案 2 :(得分:2)

是的,当然。它将无限期地将访问的文件保存在内存中,除非其他东西需要内存。

您可以使用fadvise系统调用来控制此行为(在某种程度上)。有关详细信息,请参阅其“人员”页面。

读/写系统调用通常仍然需要复制数据,所以如果你看到这样做的真正瓶颈,可以考虑使用mmap()来避免复制,方法是将缓存页直接映射到进程中。 / p>

答案 3 :(得分:2)

该文件应该被缓存,但要确保在mount上设置noatime选项,否则访问时间将尝试保存到文件中,使缓存无效。

答案 4 :(得分:1)

我想将该文件放入ramdisk(tmpfs)可能会在没有大的修改的情况下获得足够的优势。除非你真的认真对待以微秒为单位的响应时间。