題 如果RAM很便宜,為什麼我們不把所有內容加載到RAM並從那裡運行呢?


RAM便宜,並且比SSD快得多。它只是不穩定。那麼為什麼計算機沒有大量的RAM,並且在加電時,從硬盤驅動器/ SSD加載到RAM的所有內容並從那裡運行所有內容,假設沒有真正需要在內存之外保留任何內容?計算機不會更快嗎?

當然,目前的操作系統可能根本不支持這種情況,但是有沒有什麼理由不以這種方式使用RAM?


127
2017-08-27 15:20


起源


你認為RAM很便宜。 1TB RAM的價格是多少? - Alan Shutko
您所描述的內容稱為RAMDisk,人們已經按照您的描述進行操作。 我使用RAMDisk將大部分程序加載到內存中。您也不需要特殊的硬件,您可以使用系統內存和軟件來執行此操作。 - Ramhound
在封面下,我們做到了給定操作系統支持它的程度。 Windows使用“未使用”的RAM用於“磁盤緩存”,我假設許多版本的Linux也都這樣做。但是有太多的磁盤永遠不適合RAM。 - Daniel R Hicks
“便宜”是一個相對術語。每一塊內存都比幾年前便宜,但它比硬盤上的存儲更貴。無論如何,進步的進程將確保程序總是填滿所有可用的RAM,無論有多少可用;如果每個人的計算機突然有更多可用的RAM,開發人員會把更多的東西放到他們的程序中。 - jhocking
谷歌將互聯網加載到RAM - Ari


答案:


RAM沒有這樣使用的原因有幾個:

  1. 普通台式機(DDR3)RAM價格便宜,但並不那麼便宜。特別是如果你想購買相對較大的DIMM。
  2. 關閉電源後,RAM會丟失其內容。因此,您需要在引導時重新加載內容。假設您使用100GB的SSD大小的RAM磁盤,這意味著大約兩分鐘的延遲,而從磁盤複製100GB。
  3. RAM使用更多功率(例如每個DIMM 2-3瓦,與空閒SSD大致相同)。
  4. 要使用這麼多內存,你的主板需要大量的DIMM插槽和痕跡。通常這限制在六個或更少。 (更多的電路板空間意味著更多的成本,因此價格更高。)
  5. 最後,您還需要RAM來運行您的程序,因此您需要正常的RAM大小才能工作(例如18GiB,並且足以存儲您希望使用的數據)。

話雖如此:是的,RAM磁盤確實存在。即便如此 帶DIMM插槽的PCI板 並作為非常高的IOps的設備。 (在SSD成為一種選擇之前,主要用於企業數據庫)。這些都是 不便宜 雖然。

以下是兩個低端RAM磁盤卡的例子,它們已投入生產:

請注意,有更多的方法可以做到這一點,而不僅僅是創建一個 RAM磁盤 在共同的工作記憶中。

您可以:

  1. 使用具有易失性(動態)內存的專用物理驅動器。無論是作為設備,還是使用SAS,SATA或PCI [e]接口。
  2. 您可以對電池備份存儲執行相同的操作(無需將初始數據複製到其中,因為只要備用電源保持有效,它就會保留其內容)。
  3. 您可以使用靜態RAM而不是DRAMS(更簡單,更昂貴)。
  4. 您可以使用閃存或其他永久存儲來保存所有數據(警告:閃存通常具有有限數量的寫週期)。如果您只使用閃存作為存儲,那麼您只需將其移至SSD。如果您將所有內容存儲在動態RAM中並在斷電時保存到閃存備份,那麼您將返回到設備。

我確信有更多的描述,來自Amiga RAD:將倖存的RAM磁盤重置為IOPS,磨損均衡和G-d知道什麼。但是,我會刪除這個簡短的,只列出一個項目:

DDR3(當前DRAM)價格與SSD價格:

  • DDR3:每GiB 10歐元,或每TiB 10,000歐元
  • 固態硬盤:顯著減少。 (約1/4到1/10。)

176
2017-08-27 15:28



+1擊中兩個關鍵點:HD仍然比RAM便宜,RAM也很不穩定.RAM是你的工作台,你的HD就是倉庫。 Nuf sed。 - Chad Harrison
@Hennes - 不建議使用軟件RAMDisk解決方案將整個驅動器加載到內存中。您可以使用連接點將Photoshop從機械驅動器加載到RAMDisk中,性能會比SSD安裝更好或更好。 - Ramhound
+1“RAM便宜,但不便宜”。快速搜索顯示,根據容量和製造商的不同,SSD驅動器目前的售價在75美分到一美元之間。根據容量,DDR3 RAM模塊的售價在每GB 7-10美元之間,因此RAM與SSD成本的比例可高達15:1。 - KeithS
RAM loses its contents when powered off. 確切地說,只有易失性RAM才有 非易失性RAM 例如,即使在斷電時也能保持一切 閃存芯片。從這個意義上說,SSD與RAM沒有區別,而是它的子類型。 - Saul
我不同意。 SSD上的閃存單元可能不需要電源,但SSD上的控制器和其他電子設備會消耗電力。功率不大,但與現代DIMM(1-3瓦)所消耗的功率大致相同。 - Hennes


操作系統已經這樣做了 頁面緩存

在計算中,頁面緩存(通常稱為磁盤緩存)是操作系統保存在主存儲器(RAM)中的磁盤支持頁面的“透明”緩存,以便更快地訪問。頁面緩存通常在具有分頁內存管理的內核中實現,並且對應用程序完全透明。

當您從磁盤讀取頁面時,您的操作系統會將該數據加載到內存中,並將其保留在那裡,直到它更好地用於該內存。如果您有足夠的內存,您的操作系統將只讀取每個頁面一次,然後從內存中使用它。操作系統執行真正的磁盤IO的唯一原因是它是否需要讀取一個尚未在內存中的頁面,或者是否寫入了一個頁面(在這種情況下,您可能希望將其保存到磁盤中)。

以這種方式執行操作的一個優點是您不必將整個硬盤驅動器加載到內存中,這在不適合的情況下很有用,並且還意味著您不會浪費時間閱讀應用程序不適用的文件需要。另一個優點是,只要操作系統需要更多內存,就可以丟棄緩存(最好讓你的下一個磁盤讀取速度稍慢,而不是因為內存不足導致程序崩潰)。此外,用戶不需要手動決定ramdisk中應該包含的內容是有用的:無論您經常使用什麼,都會自動保存在主內存中。

如果你有很多內存,但是你的應用程序沒有像你期望的那樣快速運行,那麼它們很可能因為它們安全運行而變慢。例如,如果您告訴它不要等待寫入完成,SQLite會快幾個數量級,但如果您沒有乾淨地關閉,那麼您的數據庫將完全被破壞。

也, /tmp 通常是Linux發行版上的ramdisk,因為如果數據丟失就可以了。關於這是否是一個好主意仍有一些爭論,因為如果有太多的數據被寫入 /tmp,你可能會耗盡內存。


70
2017-08-27 17:06



很好的答案。操作系統還具有Superfetch等功能,可在啟動時將通常請求的數據從磁盤加載到RAM中。 - Matthew Lock
好答案。所有頂級的攻擊(嘗試使其無效)問題而不是實際回答它 - vsync


正如Alan Shutko在對這個問題的評論中指出的那樣,RAM實際上並不便宜。

以下是一些數據點。當我在Google上搜索4 GB RAM,64 GB SSD和1 TB HDD(機械硬盤)時,我看到的成本(這是2013年8月25日):

哇!硬盤比RAM便宜100倍! SSD比RAM便宜8倍。

(另外,正如其他答案中所指出的,RAM本質上是易變的,因此您需要一些其他形式的持久存儲。)


42
2017-08-27 19:54



RAM比SSD快幾個數量級(沒有寫入磨損問題),比旋轉銹和GLASS快幾個數量級。確保您可以通過1TB磁盤只需80美元,但嘗試在具有SCSI或光纖通道連接的15k rpm盤片上找到該存儲。您正在尋找4 x 250Gb @〜$ 250加上BBU控制器的成本(約500美元),使得成本與SSD大致相同。 - symcbean
@symcbean - 這有點挑剔;請記住,以大面額獲取RAM(因為您想要更換磁盤或SSD)需要花費25美元/ GB。 - Russell Borogove
購買具有類似企業特性的SSD的@symcbean將花費超過1000美元。 - mikebabcock
看到每隔幾個月重新審視這個答案並修改價格,​​看看價格是如何不斷下降的,這將是非常有趣的。 - Ofer Zelig
@OferZelig “看看價格如何不斷下降” 你的意思是 除非他們不這樣做? - α CVn


我在本地計算機上的RAM磁盤中進行內容生成的所有即時讀/寫操作。我還在那裡存儲我的MongoDB日誌文件夾,以及我的編譯器和Python解釋器和標準庫。該磁盤在關閉時保存並在啟動時恢復。我使用的第二個RAM磁盤是64兆字節,所有我的互聯網瀏覽器的緩存文件夾指向那裡;一個人在關閉時丟失,並在它滿了時自動沖洗。

使用正確的工具來完成我認為的工作,這將是我給你的答案。我使用RAM磁盤生成的數據比使用7200rpm Western Digital快30到1000倍。

這是我正在使用的程序: http://www.romexsoftware.com/en-us/primo-ramdisk/

...當32g的Ram不到200美元時,我不明白為什麼這不會變得更加普遍。

8 gig RAM diskeveryday SATA III HDD


8
2017-08-27 23:41



你知道操作系統已經為你緩存了一些東西,對吧? - Potatoswatter
“32公斤拉姆小於200美元” 1 TB硬盤驅動器上的32 GB起價約為3美元,可以提供或接受;消費者1 TB驅動器今天售價不到100美元,甚至企業級驅動器也可以達到類似的每千兆字節價格(亞馬遜目前需要408美元的4 TB希捷ST4000NM0043,其RRP價格為520美元,而這個單元甚至沒有購物周圍)。 - α CVn
@Potatoswatter是的,確實如此。但它不會緩存10,000個新創建的文件。所以,我明確地將它們“緩存”在我的RAM磁盤上。 - blakev
@MichaelKjörling我們不是試圖在RAM中存儲1 TB。這是荒謬的。務實並選擇一些您希望在RAM中使用的關鍵文件夾,並且您可以顯著(數量級)加快工作流程中的某些操作。看看我上面的圖片。 - blakev
“一切”都是相對的。在我的機器上,它確實加載了我的8 gig硬盤圖像中的“所有內容”;每個字節為字節,每次克隆整個8演出。為了這個問題,如果你正在尋找解決方案 真 如果這樣做,你會保持在“可能”範圍內,或者說它不成比例地適應“那種不可能”的答案。 - blakev


是的,這是許多內存數據庫即將上市的前提。一個例子是SAP HANA。這個想法是RAM很便宜,從性能的角度來看,RAM上的讀/寫操作比磁盤操作快1000倍。因此,大多數數據都保存在RAM中,然後定義數據老化策略,使用該策略將舊數據循環回冷存儲(即磁盤)。


4
2017-08-27 19:59





簡短的解釋

第一次執行應用程序時,它將從硬盤或網絡傳輸到RAM。所以,不要擔心,你已經這樣做了。

但是,通常,不僅有一個應用程序/進程文件,而且有一些I / O操作針對硬盤或網絡(應用程序的其他文件或系統等其他I / O操作),這會降低您的速度應用。這些可以指向RAM磁盤,但你應該考慮RAM-disk在斷電時刪除,應該在啟動時再次填充。

RAM並不像問題中提到的那麼便宜。您不僅應該計算RAM的成本,還要計算工作RAM的成本,包括主板上的插座(這些插座有限/稀少,因此更有價值)以及斷電時數據丟失的成本。

例如,具有1TB HDD的計算機可以廉價購買,而且它是關於家庭計算的,具有1TB RAM的計算機在超級計算機的範圍內。 (但英特爾正在研究中等範圍的事情: http://vr-zone.com/articles/more-on-xeon-e5-terabyte-of-ram-even-at-midrange-/14366.html


4
2017-08-28 09:38





這是一個很好的問題,我發現這些回復令人著迷。我將以Oracle DBA的身份發表評論,我的答案是Oracle數據庫的特定答案。這是很多人在使用Oracle時犯的一個重大錯誤。我不確定這是否適用於其他應用程序。這並不是偏離主題的,而是作為一個專門的答案。

當您使用Oracle調整性能時,您真的希望消除瓶頸。雖然我們大多數人都不說,但它是基於約束理論: https://en.wikipedia.org/wiki/Theory_of_constraints

記憶可能不是你的瓶頸。 Oracle具有管理內存的複雜機制,只是增加內存實際上可以減緩事情,如果其他領域是瓶頸所在。讓我舉一個非常常見的例子。

查詢似乎很慢。共識是,如果我們增加RAM,我們應該增加查詢的響應時間,因為內存比光盤更快。嗯......這就是Oracle處理數據內存管理的方式。 Oracle具有分配給特定職責的各種內存位置。所以你可以增加這些記憶。用於數據的區域稱為“緩衝區緩存”。這是一系列鏈接列表(每個版本的數量往往會增加)。每次在查詢期間在光盤上找到塊時,都會在其上運行哈希算法以確定將其粘貼到哪個列表中。將其放入列表中的位置基於觸摸計數算法(在Oracle支持站點上進行了解釋,所以你必須付錢才能得到它......這不是很重要)。

但是,當您運行查詢時,Oracle會在您當時搜索的緩衝區鏈上取出一個鎖存器。這個LATCH(注意:這不是一個鎖。如果你不知道區別的話,谷歌“閂鎖”)會在你閱讀期間阻止該鏈上的所有其他操作。因此它阻止讀取和寫入(這與Oracle聲稱鎖不會阻止讀取完全不同)。

這是必要的,因為當您閱讀鏈中的塊時,Oracle會根據“請求”的頻率移動它。更頻繁請求的塊被移動到頂部,較不頻繁請求的塊被留在底部並且老化。您不能有2個會話讀取鏈接列表和移動塊,或者您將點擊指向不存在的位置的指針。

增加內存大小時,會增加每個鍊錶的大小。這會增加讀取列表所需的時間。單個不良查詢或複雜查詢可以對鏈接列表進行數万甚至數百萬次讀取。每次讀取都很快,但是它們的數量會導致鎖存,這些將阻止其他會話。 Oracle將其稱為“邏輯IO”(或緩衝區獲取或其他一些東西。這種術語特定於Oracle,可能意味著IT的其他部分還有其他內容)。

因此,如果列表更長並且您的SQL非常糟糕,那麼SQL語句將保持其鎖存器更長時間。增加內存有時可以降低性能。大多數時候,這不會發生。人們會花很多錢,看不到任何好處。話雖如此,有時您需要在緩衝區緩存中需要更多內存,但您必須正確識別瓶頸以了解這是否合適。我不能在這篇文章中討論如何分析這個問題。查看DBA論壇。有人在那裡討論它。這很複雜。

有沒有人可以在其他軟件中找到具體的例子呢?有一本很棒的商業書籍叫做“目標”,討論減輕工廠的限制。此過程與Oracle DBA在評估性能問題時所做的非常相似。它通常是MBA課程的標準閱讀。閱讀IT專業非常有價值。

https://en.wikipedia.org/wiki/Eliyahu_M._Goldratt


4
2017-08-28 16:06



對於這個問題,這不是一件好事,但其他方面很有趣。 - jb.
這是一個不僅僅添加ram的原因。它具體而且狹窄,但我認為它適用。 - Bob
很有意思。它為整體討論帶來了另一個角度。 - Lorenz Lo Sauer


RAM可能很便宜,但不如傳統存儲便宜。

我有一個3TB硬盤(99美元): 硬盤報價

而且你需要48個這樣的3TB(每個719美元): RAM報價

總計34,512美元對99美元。更不用說運行3TB RAM所需的硬件價格。


3
2017-08-28 00:17



答案與問題無關 - BlueBerry - Vignesh4303
我想最後他試圖說“內存不便宜”。 - jaczjill
此外,您不可能將這8個通道套件中的48個連接到我所知道的任何設備中。雖然有些系統可以在單個服務器中接受16個(或更多)64 GB REG ECC dimms。然而,這些並不便宜。 - drescherjm