兩個 HDD 上的 ZFS 慢速擦除
該池由配置中的兩個 HDD(WD Red 3 TB,5200 RPM?,最大傳輸速率 147 MB/s 和 Verbatim (Toshiba) 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
。
您正在執行什麼版本的 ZFS?
Pre-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 版本。