zvol作成時のBlock sizeについて

zvol作成時のBlock sizeについていろいろ

最初に

FreeNASやNAS4Freeなどzfsを使う際にiSCSI用にzvolを作成することがあります
そのBlock sizeがパフォーマンスにどう影響するのか確認してみました

今回はFreeNAS 11-RC2のテストも兼ねてるのでFreeNASを採用
FreeNAS-11.0-RC2 (a4687be8c)
VMware ESXi 6.5d

ハードウェアは今までと同じなので省略しますが
今回の検証で影響しそうなのだけ書くと
10GbEの直結でNAS側のHDDはWD40EZRZを4台でRAIDZ2構成
前回と違ってlz4圧縮オンの状態

RAIDZ2のashiftを確認します

root@freenas:~ # zdb -U /data/zfs/zpool.cache | grep ashift
            ashift: 12

12なので4Kセクタ用になってます

zvolのBlock size設定

FreeNASの設定画面だとこちら

FreeNAS zvol Block size設定

512~128Kまで9段階あり初期設定値は16Kでした

検証内容

今回はBlock sizeの選択肢から512・4K・16K・128Kの4つで検証

zvolを作成しiSCSIへDevice Extent設定しESXiのデータストア登録
各データストアへWin10をインストールしてCrystalDiskMarkによる速度計測と
NAS側におけるlz4圧縮への影響などサイズを確認

zvolはSparse Volumeで設定しVMもシンプロビジョニング設定

データセットはVMFS6(v6.81)でブロックサイズは1MB

Win10のインストール容量はゲストOS上で10.2GB
データストアのプロビジョニング済み容量で10.25GB

Block size:512 検証結果

速度計測

Block size:512 速度計測結果

FreeNAS管理画面での使用状態
使用中:94.4GiB
圧縮率:1.03x

Block size:4K 検証結果

速度計測

Block size:4K 速度計測結果

FreeNAS管理画面での使用状態
使用中:12.5GiB
圧縮率:1.01x

Block size:16K 検証結果

速度計測

Block size:16K 速度計測結果

FreeNAS管理画面での使用状態
使用中:8.0GiB
圧縮率:1.39x

Block size:128K 検証結果

速度計測

Block size:128K 速度計測結果

FreeNAS管理画面での使用状態
使用中:5.3GiB
圧縮率:1.66x

検証結果について

まず512は使えません
速度計測結果はALLでの結果を何回か繰り返し一番いい結果を残してますので
速度計測結果だけ見るとそれなりの数字は出てますが
変な反応の悪さもあり実際は半分ぐらいです
NAS側の使用容量もESXi側の10倍弱まで膨れてしまってます

実際に使えるのは残る4K・16K・128Kなのですが
そもそもよく言われるのは
Block sizeが小さいとシーケンシャル:×・ランダム:〇・圧縮率:×
Block sizeが大きいとシーケンシャル:〇・ランダム:×・圧縮率:〇
という傾向です

速度計測に関しては4K~128Kは実感ではほぼ変わらずで結果もほぼ誤差の範囲で
細かく見れば4KのSeqが遅いぐらいですかね

lz4による圧縮率は明らかにBlock size差が出てますので
特に問題なければ128Kでもいいかと思いますが
iSCSIの場合ランダムアクセスが多いので
NAS容量に余裕があるなら初期設定値の16Kでランダムも確保するのが
バランス的にいいかもしれません

今回は10GbE使った結果なのでGbEレベルなら
110MB/s程度で頭打ちになることを考えると128K一択な感じ

16Kと128Kですらこの差ですので
圧縮率重視か速度重視でどちらか判断する形になり
間にある32K・64Kは選ぶ理由もないかと思います

FreeNAS 11-RC2について

SMBとiSCSIしか試してませんが今のところ目立った不具合はないです
というか旧GUIを使ってるのもあって9.10系と違いを感じません