SSD Sandisk CloudSpeedでのZFSおよびmdadm + ext4のパフォーマンスのテスト
ローカルディスクアレイを作成するためのテクノロジーを選択します。このテストの目的は、仮想マシンが4つの本稼働SSDディスクに配置されている場合、仮想マシンが実際の速度でrawファイルイメージで動作できるかを調べることです。 テストは32スレッドで実行され、実際のハイパーバイザーの動作状態をほぼ作成します。

fioツールを使用して測定を行います。
オプション--buffered = 0 --direct = 1がmdadm + ext4に選択されました。 ZFSはこれらのオプションの使用方法を知らないため、ZFSの結果はわずかに高くなることが予想されます。 比較のために、テストの1つとmdadmを使用したバージョンでこれらのオプションを無効にします。
10GBファイルでテストを実施します。 おそらく、このサイズは、通常の操作中にファイルシステムのパフォーマンスを評価するのに十分です。 もちろん、テストデータの量を増やすと、ファイルシステム上の追加のキャッシュおよび予測ツールをすべて無効にするため、すべてのテストの全体数は大幅に減少します。 しかし、そのような目的はありません。 多数の模擬テストを行う必要はありませんが、実際に近いものが必要です。
テストベンチとして、次の構成を使用します。
メーカー:Supermicro X9DRT-HF +
プロセッサー:2xIntel®Xeon®CPU E5-2690 0 @ 2.90GHz C2
技術プロセス-32 nm
コアの数-8
スレッド数-16
プロセッサー基本周波数-2.90 GHz
最大ターボ周波数-3.80 GHz
20 MBキャッシュSmartCache
バス速度-8 GT / s QPI
TDP-135 W
RAM:16x 16384 MB
タイプ:DDR3 Registered(Buffered)
周波数:1333 MHz
メーカー:Micron
ディスクコントローラー:LSI SAS 2008 RAID ITモード
ソリッドステートドライブ:4x 1.92Tb SSD Sandisk CloudSpeed ECO Gen. II
SSD、2.5インチ、1920 GB、SATA-III、読み取り:530 Mb / s、書き込み:460 Mb / s、MLC
要求されたIOPS任意読み取り/書き込み76000/14000 IOPS
MTBF 2,000,000時間
カーネル:Linux 4.13.4-1-pve#1 SMP PVE 4.13.4-26(月、2017年11月6日11:23:55 +0100)x86_64
ZFSバージョン:v0.7.3-1
IOスケジューラー:cat /sys/block/sdb/queue/scheduler [noop] deadline cfq
テストツール:fio-2.16
アレイ構築オプション
#1つのディスクにZFSアレイを作成するためのパラメーター zpool create -f -o ashift=12 /dev/sdb
#zraid(ZFSのraid5アナログ)を作成するためのパラメーター zpool create -f -o ashift=12 test raidz /dev/sdb /dev/sdc /dev/sdd /dev/sde
#zraid2(ZFSのraid6アナログ)を作成するためのパラメーター zpool create -f -o ashift=12 test raidz2 /dev/sdb /dev/sdc /dev/sdd /dev/sde
#ストライプミラーを作成するためのパラメーター(ZFSのRAID10アナログ) zpool create -f -o ashift=12 test mirror sdb sdc mirror sdd sde
#ZFSアレイの一般的なパラメーター ZFS set atime=off test ZFS set compression=off test ZFS set dedup=off test ZFS set primarycache=all test
arcでは、すべてのメモリの1/4または52 GBが割り当てられます cat /etc/modprobe.d/ZFS.conf options ZFS zfs_arc_max=55834574848
#Mdadm raid5アレイ作成オプション mdadm --zero-superblock /dev/sd[bcde] mdadm --create --verbose --force --assume-clean --bitmap=internal --bitmap-chunk=131072 /dev/md0 --level=5 --raid-devices=4 /dev/sd[bcde]
#Mdadm raid6アレイ作成オプション mdadm --zero-superblock /dev/sd[bcde] mdadm --create --verbose --force --assume-clean --bitmap=internal --bitmap-chunk=131072 /dev/md0 --level=6 --raid-devices=4 /dev/sd[bcde]
#mdadm 5/6アレイの一般的なパラメーター echo 32768 > /sys/block/md0/md/stripe_cache_size blockdev --setra 65536 /dev/md0 echo 600000 > /proc/sys/dev/raid/speed_limit_max echo 600000 > /proc/sys/dev/raid/speed_limit_min
#mdadm raid10配列を作成するためのパラメーター mdadm --zero-superblock /dev/sd[bcde] mdadm --create --verbose --force --assume-clean --bitmap=internal --bitmap-chunk=131072 /dev/md0 --level=10 --raid-devices=4 /dev/sd[bcde]
#GPTマークアップテーブルを作成するためのパラメーター parted -a optimal /dev/md0 mktable gpt mkpart primary 0% 100% q
#ext4ファイルシステムを作成するためのパラメーター mkfs.ext4 -m 0 -b 4096 -E stride=128,stripe-width=256 /dev/md0p1 (/dev/sdb) stripe-width=256 raid6 raid10 stripe-width=384 raid5
#ext4ファイルシステムをfstabにマウントするパラメーター UUID="xxxxx" /test ext4 defaults,noatime,lazytime 1 2
結果

fio --directory=/test/ --name=read --rw=read --bs=4k --size=200G --numjobs=1 --time_based --runtime=60 --group_reporting --ioengine libaio --iodepth=32

読み取りテストは、ZFSファイルシステムの動作に対するARCバッファーの影響を明確に示しています。 ZFSはすべてのテストで均一かつ高速を示します。 --buffered = 0 --direct = 1をオフにすると、ZFSによるmdadm raid10 + ext4の速度は、遅延とIOPSの点で3倍遅くなり、10倍遅くなります。
zraidに追加のディスクが存在しても、ZFSの速度は大幅に向上しません。 ZFS 0 + 1はzraidと同じくらい遅いです。
fio --directory=/ --name=test --rw=randread --bs=4k --size=10G --numjobs=1 --time_based --runtime=60 --group_reporting --ioengine libaio --iodepth=32 --buffered=0 --direct=1

ここでは、ARCはZFSを保存しません。 数字は情勢を明確に示しています。
fio --directory=/ --name=test --rw=write --bs=4k --size=10G --numjobs=1 --group_reporting --ioengine libaio --iodepth=32 --buffered=0 --direct=1

繰り返しになりますが、バッファはZFSがすべての配列で均一な結果を生成するのに役立ちます。 mdadm raid6は、明らかにraid5とraid10の前を通過します。 バッファーおよびキャッシュされたmdadm raid10は、ZFSのすべてのオプションで2倍の最高の結果をもたらします。
fio --directory=/ --name=test --rw=randwrite --bs=4k --size=10G --numjobs=1 --group_reporting --ioengine libaio --iodepth=32 --buffered=0 --direct=1

写真はランダムな読書に似ています。 ZFSは、そのバッファーとキャッシュを支援しません。 彼は恐ろしい力と融合します。 特に怖いのは、ZFS上の単一ドライブの結果であり、一般的にZFSの結果は嫌です。
mdadm raid5 / 6により、すべてが期待されます。 raid5は低速、raid6はさらに低速、raid10は単一のディスクよりも約25〜30%高速です。 バッファリングを使用したRaid10は、配列をスペースに入れます。
結論
誰もが知っているように、ZFSは高速ではありません。他の多くの重要な機能や利点が含まれていますが、これはmdadm + ext4よりも大幅に遅いという事実を否定するものではありません。キャッシュやバッファー、予測システムなどの操作を考慮してもです。 この部分に驚きはありません。
ZFSバージョンv0.7.xはそれほど速くなりませんでした。おそらくv0.6.xより高速ですが、mdadm + ext4からはほど遠いでしょう。
zraid / 2はraid5 / 6の改良版ですが、パフォーマンスの面ではないという情報を見つけることができます。zraid / 2または0 + 1を使用すると、単一のZFSドライブよりも高速なアレイを実現できません。最良の場合、速度はこれより遅くなることはなく、かなり速くなることもありません。 最悪の場合、余分なディスクがあると全体の速度が低下します。 ZFSのRAIDは、パフォーマンスではなく信頼性を高める手段です。
大きなARCが存在しても、同じext4に比べてZFSのパフォーマンスギャップは補正されません。ご覧のとおり、50 GBのバッファーであっても、ZFSがEXT4の弟に追いつくのを大幅に支援することはできません。 特にランダムな書き込みおよび読み取り操作で。
仮想化にZFSを使用する必要がありますか?誰もが自分で答えます。 個人的に、私はmdadm + raid10を支持してZFSを放棄しました。
ご清聴ありがとうございました。