Linux - RAM 磁碟作為鏡像邏輯磁碟區的一部分

Linux - RAM 磁碟作為鏡像邏輯磁碟區的一部分

我們的伺服器總 RAM 為 64GB,應用程式通常最多使用 30GB 的可用 RAM。其中一個應用程式處理大量平面文件,而我們遇到了吞吐量問題,即等待磁碟 I/O。在探索可能的解決方案時,出現了 RAM 磁碟的想法。 RAM 磁碟的問題是其固有的波動性。

我找到了有關 RAM 磁碟、RAID 1 配置和要分組的邏輯鏡像磁碟區的單獨文檔身體的磁碟,但我似乎找不到任何文件表明這些磁碟複製解決方案是否可以與 RAM 磁碟一起使用。更重要的是,由於我們的想法是讓 RAM 磁碟可用於讀/寫,並且讓物理磁碟「遮蔽」RAM 磁碟,趕上寫入操作,因此我們希望 RAM 磁碟成為所有磁碟的「主」磁碟讀取/寫。

需要注意的是,我們會喜歡以避免僅僅 RAM 快取作業系統中的文件,但如果我們能夠獲得與獨立 RAM 磁碟相同的效能,那就可行。我們最初避免了這種情況,因為有時某些文件不會長時間被訪問,但仍然需要按需的讀/寫速度。

答案1

需要注意的是,我們希望避免僅使用 RAM 快取作業系統中的文件,但如果我們能夠獲得與獨立 RAM 磁碟相同的效能,那就可行。我們最初避免了這種情況,因為有時某些文件不會長時間被訪問,但仍然需要按需的讀/寫速度。

你可以使用vmtouch來解決你的問題。這是一個實用程序,允許您將某些文件甚至整個目錄以及它們下面的所有內容固定在頁面快取中,這樣它們就不會被驅逐,即使它們長時間沒有被訪問(這是您不簡單地訪問它們的最初原因)依賴於頁面快取)。這最多需要與 RAM 磁碟相同的內存量,或者實際上更少。您仍將使用頁面緩存,但它會產生與使用 RAM 磁碟相似的效能(實際上效能更優越,因為不涉及 MD 驅動程式)。

答案2

這可以一起破解,但這是一個壞主意,並且可能在可靠性和可維護性方面存在多個問題。

我認為 RAMdisk 和實體磁碟的 RAID1 將受限於實體磁碟的效能,因為 RAID1 功能的一部分是確保兩個副本同步。

對於讀取,可能會有一些好處,因為 MD 驅動程式可以在不同裝置之間分配讀取。

創建此內容的可能步驟:

  1. 建立一個空文件,其中包含您要支援的陣列的大小
  2. 用於losetup從文件中建立區塊設備。
  3. 用於mdadm以新建立的區塊設備和對應的硬碟分區建立陣列。
  4. 在新的 MD 陣列上建立檔案系統。

我自己還沒有嘗試過,所以這只是理論上的例子。

答案3

首先,RAM 磁碟幾乎絕不Linux 上的正確答案。因為它是區塊設備,所以任何讀取最終都必須經過區塊層、檔案系統和常規 VFS 層,資料除了儲存在 RAM 磁碟中之外,最終還會快取在 RAM 中。這種資料的重複以及所涉及的額外層數是 tmpfs 存在於 Linux 上的原因,tmpfs 檔案系統不涉及區塊層,而是直接將資料儲存在頁面快取中,跳過了所有額外的複雜性。它還會根據儲存在其中的資料量自動調整大小(而不是必須預先定義大小),甚至可以利用交換空間。如果您認為需要 ramdisk,那麼 99% 的情況下您應該真正使用 tmpfs。


現在,就實際解決方案而言...

如果您的所有資料實際上都適合 RAM,那麼您最好將其全部固定在 RAM 中,或者使用類似的工具虛擬觸摸,或讓應用程式 mmap 所有文件,然後在所有映射區域上調用 mlock。

如果您的資料無法全部放入 RAM,您有兩個現實的選擇:

  • 將壓縮的資料儲存在磁碟上,最好使用提供透明壓縮的檔案系統,例如 BTRFS、F2FS 或 ZFS。如果你有一個相當快的CPU,這通常會減少讀取大檔案所需的時間,但代價是需要更多的 CPU 時間。改進通常與資料壓縮的程度成正比,但在許多情況下可以輕鬆轉換為 30% 或更多的改進。
  • 考慮投資更快的儲存。要么足以替換您現有的存儲空間,要么可以使用較小的數量快取從功能上加速您現有的儲存。

答案4

如果您需要持久性,RAMDISK 不是正確的解決方案。

我強烈建議投資一對快速(即:企業級,具有斷電保護)NVMe 磁碟來放入經典的 RAID1(鏡像)陣列。

相關內容