兩個 HDD 上的 ZFS 慢速清理

兩個 HDD 上的 ZFS 慢速清理

池由配置中的兩個 HDD(WD Red 3 TB,5200 RPM?,最大傳輸速率 147 MB​​/s 和 Verbatim(東芝)3 TB,7200 RPM)組成raidz1-0。它有 2.25 TB 的數據,複製到兩個磁碟,因此總量為 4.5 TB。當我建立池時,我沒有指定ashift值。

zpool status顯示「掃描:清理在 2021 年 1 月 3 日星期日 13:58:54 於 32h43m 修復了 0 個錯誤,出現 0 個錯誤」。這意味著掃描速度僅為4.5e6 / (32.717 * 60 * 60) = 38.2 MB / s.我期望至少 2 x 100 或高達 2 x 200 MB/s,儘管 WD 磁碟比其他磁碟稍慢。

磁碟的 SMART 資料顯示一切正常。它們的通電時間為 6.5 - 7 年,但啟停次數僅為 200 次左右。

所以主要問題:什麼可以解釋讀取效能差的原因?

奇怪的zdb是,池使用的是路徑/dev/disk/by-id/ata-WDC_WD30EFRX-xyz-part1而不是/dev/disk/by-id/ata-WDC_WD30EFRX-xyz.fdisk -l /dev/disk/by-id/ata-WDC_WD30EFRX-xyz提到“分區 1 不在實體磁區邊界上啟動”,但我讀到它只會損害寫入效能。我可能會嘗試透過刪除設備並使用正確的全磁碟路徑將其添加回來來修復此問題,因為資料是重複的(並已備份)。

該池有 710 萬個文件。我sha1sum在通過清除快取後測試了在 14276 MB 檔案上運行/proc/sys/vm/drop_caches,花費了 2 分 41 秒,讀取速度為 88.5 MB/s。

dd bs=1M count=4096 if=/dev/disk/by-id/ata-WDC_WD30EFRX-xyz of=/dev/null報告速度為 144 MB/s,使用ata-WDC_WD30EFRX-xyz-part1報告速度為 134 MB/s 和ata-TOSHIBA_DT01ACA300_xyz報告 195 MB/s。

我的 NAS 運行相當舊的軟體版本:

$ modinfo zfs
filename:       /lib/modules/3.11.0-26-generic/updates/dkms/zfs.ko
version:        0.6.5.4-1~precise
license:        CDDL
author:         OpenZFS on Linux
description:    ZFS
srcversion:     5FC0B558D497732F17F4202
depends:        spl,znvpair,zcommon,zunicode,zavl
vermagic:       3.11.0-26-generic SMP mod_unload modversions 

它有 24 GB RAM,其中 8 GB 保留給 JVM,其餘部分可以免費使用。儘管其中似乎沒有那麼多是免費的:

$ free -m
             total       used       free     shared    buffers     cached
Mem:         23799      21817       1982          0        273       1159
-/+ buffers/cache:      20384       3415
Swap:         7874         57       7817

編輯1

bonnie++我在 RAIDZ 上使用單一 4 GB 檔案進行了一些測試:寫入 75.9 MB/s、重寫 42.2 MB/s 和讀取 199.0 MB/s。我假設我從“千字符/秒”正確地進行了轉換。

啊,剛才我意識到並行清理所需的時間與最慢的 5400 RPM 磁碟一樣長,7200 RMP(可能)清理得更快並不重要。

編輯2

我將池中的文件數量從 710 萬個減少到 450 萬個 (-36.6%),清理時間從 32.72 小時減少到 16.40 小時 (-49.9%)。資料量是相同的,因為我只是將這些小檔案放入低壓縮 ZIP 中。

我還recordsize從 128k 增加到 512k,不知道這在這種情況下是否會產生影響。其他預先存在的數據沒有被觸及,因此它們保留了原始數據recordsize。哦,/sys/module/zfs/parameters/zfs_scan_idle被設定為2

答案1

您執行的是哪個版本的 ZFS?

0.8.x 之前的版本透過遍歷磁碟上放置的所有元資料和資料來進行清理。這會導致許多尋道,從而降低機械磁碟的性能。如果與充滿數百萬個小檔案的低效能 5K RPM 磁碟一起使用,這意味著非常長的清理/重新同步時間。使用這些較舊的 ZFS 版本,您可以調整一些 ZFS 可調參數;例如

echo 0 > /sys/module/zfs/parameters/zfs_resilver_delay
echo 0 > /sys/module/zfs/parameters/zfs_scan_idle

請注意,增加清理優先順序會導致應用程式效能降低。

0.8.x 使用批次清理方法,以較大批次收集元數據,然後才掃描相關數據。這導致擦洗速度更快(即:一半的時間),而不需要調整任何東西(上面的旋鈕甚至不再存在)。

因此,提高清理/重新同步速度的更有效方法可能是更新 ZFS 版本。

相關內容