ローカルディスクアレイを作成するためのテクノロジーを選択します。
このテストの目的は、仮想マシンが4つの本稼働SSDディスクに配置されている場合、仮想マシンが実際の速度でrawファイルイメージで動作できるかを調べることです。 テストは32スレッドで実行され、実際のハイパーバイザーの動作状態をほぼ作成します。
![画像](https://habrastorage.org/getpro/habr/post_images/dfd/5ff/72a/dfd5ff72ad78b1644ebc8e22bab21a67.jpg)
その他の出版物
- nginx + php-fpmおよびmariadbに乗ったZabbix 2.2
- CentOS上のPerconaまたはGaleraのHAPRoxy。 Zabbixでの設定と監視
- 「パーフェクト」www-cluster。 パート1.フロントエンド:CentOSでのNGINX + Keepalived(vrrp)
- 「理想的な」クラスター。 パート2.1:hetznerの仮想クラスター
- 「理想的な」クラスター。 パート2.2:アクセスしやすくスケーラブルなWebサーバー、ビジネスを守るための最高のテクノロジー
- 「理想的な」クラスター。 パート3.1 MySQLマルチマスタークラスターのデプロイ
- PHPサイトを高速化し、最適化します。 PHP用のサーバーをセットアップするときに選択するテクノロジー
- PHP 5.3-5.6と7.0のDrupalコード実行速度の比較。 Battle of Code Optimizers apc vs xcache vs opcache
- ProxmoxおよびVirtuozzo 7およびVirtuozzoストレージでのパフォーマンスBitrixの発売
- Virtuozzoストレージ:実際の運用経験、最適化、問題解決のヒント
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
結果
![](https://habrastorage.org/webt/5q/ru/ml/5qrumlfy4qe15ikfrqaahvgncla.png)
fio --directory=/test/ --name=read --rw=read --bs=4k --size=200G --numjobs=1 --time_based --runtime=60 --group_reporting --ioengine libaio --iodepth=32 # ext4 + --buffered=0 --direct=1
![](https://habrastorage.org/webt/yp/zi/br/ypzibreldxb5az2kcswzej18okq.png)
読み取りテストは、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 # ext4 + --buffered=0 --direct=1
![](https://habrastorage.org/webt/ja/gy/dl/jagydlaszqgng0gih7b8kd48uls.png)
ここでは、ARCはZFSを保存しません。 数字は情勢を明確に示しています。
fio --directory=/ --name=test --rw=write --bs=4k --size=10G --numjobs=1 --group_reporting --ioengine libaio --iodepth=32 --buffered=0 --direct=1 # ext4 + --buffered=0 --direct=1
![](https://habrastorage.org/webt/j9/zo/1w/j9zo1w2rc5uqcvuavadzfvcy1tu.png)
繰り返しになりますが、バッファは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 # ext4 + --buffered=0 --direct=1
![](https://habrastorage.org/webt/-m/ms/dr/-mmsdrjmkm8e7vubdnwh7lha8z8.png)
写真はランダムな読書に似ています。 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を放棄しました。
ご清聴ありがとうございました。