我可以用这种方式使用tmpfs吗?

时间:2010-06-20 15:35:32

标签: performance memory filesystems

我的开发机器上有足够的RAM。

我是否可以将我的Rails的应用程序源移动到tmpfs分区以获得性能提升,因为内存存储比HDD快一个数量级?

据我所知,tmpfs本质上是临时存储但是如果我要编写一些脚本来将源代码从HDD分区移动到tmpfs并在重启之前将其备份回HDD,我可以将它用于此任务吗?

它是否理智?

3 个答案:

答案 0 :(得分:3)

使用RAMdisk加速访问只读资源是明智的。

将此方法用于 wriable 资源非常危险,因为如果在操作期间断电,则可以保证丢失数据。如果你不介意丢失数据或者你实现了某种形式的缓存机制,那么“保存”到RAMdisk的数据在写入后很快就会被复制回硬盘,那么这种方法对于读/写数据来说是可行的。 / p>

但是,请查看您正在运行的硬件和操作系统。如果您有SSD磁盘或磁盘以及具有大缓存的I / O子系统,您可能会发现性能并不是那么糟糕。在操作系统方面,(例如)Windows Vista& 7将使用任何备用RAM进行磁盘缓存,这非常有效,这意味着使用RAMdisk可以看到很少或没有性能提升。

RAM磁盘或缓存仅在RAM足够时才有效。如果您的PC中没有足够的RAM,您将最终使用VM,性能将变得更糟,而不是更好。

您可以快速尝试手动执行此操作以查看您实现的性能变化,然后在获得值得痛苦(将数据从/向HDD复制以及所涉及的额外风险)中下定决心。 / p>

答案 1 :(得分:1)

是的,只要你的机器意外重启(例如断电),你就不介意丢失数据。我不知道你的用例是什么,但是有些情况下性能需求超过了持续安全地保存每个数据的需要,例如:如果你不介意几个小时的数据丢失)。如果你的用例属于那个类别,那么tmpfs是一个非常好的解决方案。

答案 2 :(得分:1)

可以以这种方式使用它,但它没有多大意义:

如果你有足够的RAM,那么文件将在文件系统缓存中(即在RAM中)。所以,你不会通过使用tmpfs赢得任何东西,但你也不会失去任何东西。

如果你没有有足够的内存,那么tmpfs将被刷新为swap。现在,你的Rails源代码占用了宝贵的交换空间,尽管文件系统中的已经副本存在于磁盘上。因此,您将失去交换空间,并且您无法获得任何性能(无论文件是从swap中读回还是文件系统同样昂贵)。

如果您不希望第一次访问,直到所有文件都在缓存中,您可以在开发环境启动脚本中添加类似的内容:

find /usr/lib/ruby/gems/1.9.1/{rails,action,active}* -exec cat '{}' + > /dev/null

将读取所有Rails文件并将它们回显到/dev/null并作为副作用将它们拉入缓存。 (在准备咖啡时这样做。)

相关问题