
プールは、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-xyz
fdisk -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/null
144 MB/秒の速度が報告され、これを使用するとata-WDC_WD30EFRX-xyz-part1
134 MB/秒、ata-TOSHIBA_DT01ACA300_xyz
195 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 バージョンを更新することです。