2台のHDDでのZFSの遅いスクラブ

2台のHDDでのZFSの遅いスクラブ

プールは、2 つの HDD (WD Red 3 TB、5200 RPM?、最大転送速度 147 MB​​/秒、および Verbatim (Toshiba) 3 TB、7200 RPM) で構成されていますraidz1-0。2.25 TB のデータがあり、2 つのディスクに複製されているため、合計量は 4.5 TB です。プールを作成したときに値を指定しませんでしたashift

zpool status「スキャン: スクラブは 0 を 32 時間 43 分で修復し、エラーは 0 件でした (2021 年 1 月 3 日 (日) 13:58:54)」と表示されます。これは、スキャン速度が だけだったことを意味します4.5e6 / (32.717 * 60 * 60) = 38.2 MB / s。WD ディスクは他のディスクよりも多少遅いですが、少なくとも 2 x 100 MB/秒、最大 2 x 200 MB/秒を期待します。

ディスクの SMART データは、すべてが正常であることを示しています。電源オン時間は 6.5 ~ 7 年ですが、起動と停止の回数はわずか 200 回程度です。

それで主な質問は: 読み取りパフォーマンスが低い理由は何でしょうか?

奇妙なことに、プールはではなくzdbパス を使用していることが示されました。「パーティション 1 は物理セクター境界から開始されません」と記載されていますが、書き込みパフォーマンスが低下するだけであると読みました。データが複製 (およびバックアップ) されているため、デバイスを削除して適切なフルディスク パスで再度追加することで、この問題を修正してみることができます。/dev/disk/by-id/ata-WDC_WD30EFRX-xyz-part1/dev/disk/by-id/ata-WDC_WD30EFRX-xyzfdisk -l /dev/disk/by-id/ata-WDC_WD30EFRX-xyz

プールには 710 万のファイルがあります。sha1sum経由でキャッシュをクリアした後、14276 MB のファイルで実行をテストしたところ/proc/sys/vm/drop_caches、2 分 41 秒かかり、読み取り速度は 88.5 MB/秒でした。

dd bs=1M count=4096 if=/dev/disk/by-id/ata-WDC_WD30EFRX-xyz of=/dev/null144 MB/秒の速度が報告され、これを使用するとata-WDC_WD30EFRX-xyz-part1134 MB/秒、ata-TOSHIBA_DT01ACA300_xyz195 MB/秒が報告されました。

私の 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:

RAIDZ 上の 4 GB のファイル 1 つを使用して、でいくつかのテストを行いましたbonnie++。書き込み速度は 75.9 MB/秒、再書き込み速度は 42.2 MB/秒、読み取り速度は 199.0 MB/秒でした。「キロ文字数 / 秒」からの変換は正しく行ったと思います。

ああ、今気づいたのですが、パラレル スクラブには最も遅い 5400 RPM ディスクと同じくらいの時間がかかるので、7200 RMP の方が (おそらく) 速くスクラブされたとしても問題はありません。

編集2:

プール内のファイル数は 710 万から 450 万 (-36.6%) に削減され、スクラブ時間は 32.72 時間から 16.40 時間 (-49.9%) に短縮されました。これらの小さなファイルを低圧縮の ZIP にまとめただけなので、データ量は変わりません。

また、 を 128k から 512k に増やしましたがrecordsize、この場合に違いがあったかどうかはわかりません。他の既存のデータは変更されていないため、元の が保持されます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 バージョンを更新することです。

関連情報