Linux

ZFS 性能:極低的寫入速度

  • December 4, 2021

我正在執行一個小型家庭伺服器。規格是:

  • CPU:AMD銳龍5 2600
  • 記憶體:32 GB ECC
  • 系統驅動器:128GB NVMe SSD
  • 數據驅動器:3x 4 TB Seagate Barracuda HDD

伺服器執行一些應用程序,如 Nextcloud 或 Gitea,我想在其上執行 1-2 個 VM。所以有一些網路應用程序、數據庫和虛擬機。

應用程序和 qcow2 映像儲存在 raidz1 池中:

$ sudo zpool status
 pool: tank
state: ONLINE
config:

       NAME        STATE     READ WRITE CKSUM
       tank        ONLINE       0     0     0
         raidz1-0  ONLINE       0     0     0
           sdb     ONLINE       0     0     0
           sdc     ONLINE       0     0     0
           sdd     ONLINE       0     0     0

errors: No known data errors

在最初幾週使用這些應用程序時,我沒有遇到任何問題。但幾週後,我意識到寫入速度極低。nextcloud 實例不是很快,當我嘗試使用 Windows 10 啟動一個新的 VM 時,它需要大約 5 分鐘才能到達登錄螢幕。

我做了一些性能測試fio,得到了以下結果:

在發帖之前我做了一些研究,並讀到我應該將 SLOG 添加到 zfs 池中,以獲得更好的數據庫和 VM 性能。但這目前是沒有選擇的。我需要先得到聖誕禮物 :D

但即使沒有 SLOG,我也不認為這些數字是正確的 :(

有人有想法嗎?:)

我自己發現了問題。

我看到一篇文章提到了CMR和SMR。我檢查了我的驅動器,發現我不小心用 SMR 購買了硬碟 :(

在用新的 CMR 驅動器替換驅動器之前,我將保留一個鏡像池。當我擁有新驅動器時,我還將使用鏡像池。

謝謝你們!

一階近似值raidz提供單個磁碟的隨機性能,對於 7.2K HDD 而言約為 70 IOPS。您的測試顯示 IOPS 減少了 50%(即:~30 vs ~70),這可以用recordsize您選擇的相對較大來解釋。

特別是對於隨機寫入,任何recordsize大於 4KB 的內容都將面臨相當大的讀取/修改/寫入損失。請注意,我recordsize提倡在機械磁碟上使用這麼小的磁碟,因為它會導致非常高的元數據成本、高碎片和(幾乎)沒有壓縮。作為參考,當使用 HDD 時,即使對於虛擬化主機,我也會保留預設 (128KB) 記錄大小。

您可以執行以下操作來提高性能:

  • 在適用的情況下使用mirrorvs raidz(但您只有 3 個磁碟,防止使用鏡像+條帶化)
  • 使用 RAW 圖像文件而不是 QCOW2(如果確實需要 QCOW2 文件,請務必預先分配其元數據)
  • 嘗試設置sync=disabled(但請務必了解,如果突然斷電,您的系統將失去最多 5 秒的寫入數據)

引用自:https://serverfault.com/questions/1084155