2010-06-20 89 views
0

我的开发机器上有大量的RAM。我可以用这种方式使用tmpfs吗?

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

我知道tmpfs是其本质的临时存储器,但是如果我要写一些脚本来将源硬盘分区移动到tmpfs并在重新启动之前将其备份回硬盘,我可以使用它来执行此任务吗?

理智吗?

回答

3

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

对于易碎的资源使用此方法是相当危险的,因为如果在操作期间失去电源,您将保证丢失数据。如果你不介意丢失数据,或者你实现了某种形式的缓存机制,这样RAMdisk中的数据在写入后很快就被复制回硬盘,那么这种方式对于读/写数据来说就没有问题。

但是,请检查您正在运行的硬件和操作系统。如果您的SSD磁盘或磁盘以及具有大型缓存的I/O子系统,您可能会发现性能并不差。在操作系统方面,(例如)Windows Vista会使用任何备用RAM来进行磁盘缓存,而且这种方式非常有效,这意味着使用RAMdisk很少或根本没有性能增益。

RAM磁盘或缓存也只适用于你有足够的RAM。如果您的PC中没有足够的内存,您最终会使用虚拟机,性能会变差,而不是更好。

您可以快速尝试手动执行此操作,以查看您实现的性能改变类型,然后决定增益是否值得(从HDD复制数据以及涉及额外风险)获得的痛苦。

1

是的,只要您不介意丢失数据,如果您的计算机意外重新启动(例如断电)。我不知道你的用例是什么,但是有些情况下性能需求超过了永久安全地保存每个数据的需要,例如,如果你不介意数小时的数据丢失)。如果你的用例属于这个类别,那么tmpfs是一个完美的解决方案。

+0

谢谢!那我试试吧 – user80805 2010-06-20 15:49:30

1

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

如果你有足够的内存,然后将这些文件将在文件系统缓存(即RAM)反正。所以,使用tmpfs你不会赢得任何东西,但是你也不会失去任何东西。

如果你不要有足够的RAM,tmpfs会被刷新掉。现在,尽管事实上已将拷贝到文件系统的磁盘上,但您的Rails资源仍会占用宝贵的交换空间。所以,你失去了交换空间,并且你在性能上没有获得任何东西(无论是从交换中读回文件还是文件系统同样昂贵)。

如果你不想采取第一次打,直到所有的文件都在缓存中,你可以把这样的事情在你的开发环境的启动脚本:

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

这将读取所有的Rails文件并将它们回显到/dev/null,并作为副作用将它们拖入缓存中。 (做这个,同时让你的编码咖啡。)

相关问题