2010-06-20 63 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,並作爲副作用將它們拖入緩存中。 (做這個,同時讓你的編碼咖啡。)

相關問題