ZFS 性能:極低的寫入速度
我正在執行一個小型家庭伺服器。規格是:
- 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) 記錄大小。您可以執行以下操作來提高性能:
- 在適用的情況下使用
mirror
vsraidz
(但您只有 3 個磁碟,防止使用鏡像+條帶化)- 使用 RAW 圖像文件而不是 QCOW2(如果確實需要 QCOW2 文件,請務必預先分配其元數據)
- 嘗試設置
sync=disabled
(但請務必了解,如果突然斷電,您的系統將失去最多 5 秒的寫入數據)