LoginSignup
2
2

More than 1 year has passed since last update.

Windows Serverミラー高速パリティを試す

Posted at

お世話になります。

主にオンプレミス環境や、クラウドの大規模基盤構築のときのファイルシステムとして検討に挙がるのが、ZFSやRefsでの冗長化かと思います。

マイクロソフトによって開発された「ミラーリングによって高速化されたパリティ」は、ReFSや記憶域スペースといった技術と合わせることで、ZFS RAID-Zのメモリ大量消費問題や、RAID5の書き込みホール問題(サイレントクラッシュ)を克服しています。

数年前までDataCenterエディションでしか使えない認識でしたが、最新の公式ドキュメントを見るとStandardエディションでの制約が書かれていなかったため試してみます。

image.png

このような2階層構成となり、SSD階層では1TBのキャッシュとして働き、頻度の多いファイルは高速にリードライト、HDD階層では頻度の少ないファイルのアーカイブとなることを想定しています。

今回、ベアメタルマシンにWindows Serverを入れるのではなく、Proxmoxからパススルーしたディスクを使って、ミラー高速パリティのベンチマークを取ってみたいと思います。

まず物理ディスクをWindows Server2019のVMにアタッチします。

ls /dev/disk/by-id
qm set <vmid> -virtio /dev/disk/by-id/<HDD_Serial>

image.png
image.png
image.png

OSからはこのように見えてきます。実際はVirtioSCSIの準仮想化ドライバを入れることで認識されますが、今回は説明を省略しています。
image.png

以下のサイトを参考にさせて頂き、記憶域プールを作成します。
https://syobon.jp/blog/2018/05/14/build-cheap-and-very-first-storage/
image.png

コマンドで状況を確認します。

 Get-StoragePool tank | Get-PhysicalDisk | ft FriendlyName,SerialNumber,CanPool,BusType,DeviceID,EnclosureNumber,MediaType,Size -Autosize

ところが今回はProxmoxのハイパーバイザからパススルーしたので、各ディスクのシリアル番号が消えてしまっています。その関係でSSDとHDDの区分も「未定義」となっています。
image.png

このままでは記憶域プールが作れませんので、Proxmox側のconfファイルを変更します。
各ディスクの記述の末尾に"serial=シリアル番号"を追記します。
保存したらコールドリブートを行います。

nano /etc/pve/qemu-server/<vmid>.conf

image.png

また、OS上で各ディスクのSSD/HDD種別を手動で割り当てます。

Set-PhysicalDisk -UniqueId <シリアル番号> -MediaType <HDD or SSD>

これで記憶域プールを作る準備ができました。
image.png

GUIから記憶域プールを作成します。
image.png

次に仮想ディスクを作ります。チェックボックスをONにして階層化します。(上のconf書き換え手順を踏まないとここのチェックがグレーアウトしており先に進めません)
image.png

タイプとして「ミラー」を選びます。
image.png

階層ごとのサイズを指定します。こちらのサイトによると計算領域として1割引きにする必要があるようです。
https://www.vwnet.jp/Windows/WS16TP4/201511201/StrageTier.htm
image.png

作成すると自動的にボリューム作成ウィザードが立ち上がりますので、ドライブレターとファイルシステムを指定します。ミラー高速パリティは本来ReFSが必須というはずでしたが、NTFSでも作れ、かつ高速だという情報があったのでNTFSで作ってみます。
image.png
image.png

OSにマウントされました。CrystalDiskMarkでベンチマークを取ります。
image.png
image.png

スピードが出ません。何か根本的に間違えているか、もしくはパススルーに起因するものだと思いやり方を変えてみます。

こちらのサイトを参考にさせて頂き、再作成してみました。設定はReFS、キャッシュ16GBで整合性ストリームはオンです。
https://roy-n-roy.github.io/Windows/%E8%A8%98%E6%86%B6%E5%9F%9F%E3%82%B9%E3%83%9A%E3%83%BC%E3%82%B9/
image.png
すると、SATA SSD単体程度の速度は出るようになりました。
image.png

NTFSで試すと、速度が低下しました。
image.png
image.png

しばらく考察し、ここの部分が"Mirror"となっている点に着目しました。"Simple"つまりストライピングに変更してみます。また、ファイルシステムはReFSに戻します。
こちらのサイトを参考にさせて頂きました。
https://ameblo.jp/ameba-take2/entry-12455376416.html

 $SSDTier = New-StorageTier -StoragePoolFriendlyName 'tank' -FriendlyName 'SSDTier' -MediaType SSD -ResiliencySettingName Simple -ProvisioningType Fixed

image.png

ようやく期待した結果となりました。STA 6GB/sをストライピングしたフルスピードが出ています。
image.png

次に、16GBのライトキャッシュを超えるサイズ(32GB)でベンチマークしてみます。
他のサイトでの技術情報のとおり、10%ほどオーバーヘッドがありますが大幅な速度低下にはなりませんでした。
image.png

今回のポイントをまとめると以下のようになります。

・Proxmoxからのディスクパススルー後、vmid.confにシリアル番号を付与する
・パススルーディスクは、Mediatypeが未定義のためSSD/HDDに手動で割り当てる
・ファイルシステムはReFSかつ整合性ストリームONとする
・SSD階層の設定は-ResiliencySettingName Simpleとする

SSD階層が冗長化されていないため、もし障害時にはSSD階層のみに保存されている直近のデータが失われる可能性があります。

このあたりはタスクスケジューラで指定した時間(標準では夜中)に自動的にHDD階層に保存・整理してくれるという情報もありましたので、別の機会に検証してみたいと思います。
https://charbelnemnom.com/modify-storage-tiers-optimization-with-powershell/

QNAPやSynologyのNASでもSSDキャッシュが使われていますが、ほぼZFS/L2ARC/ZILの技術組み合わせによるものです。
「ReFS + ミラー高速パリティ」はマイクロソフト製品のためWindowsServerライセンス費用がかかることは加味しても、同等かそれ以上の機能であることを確認できました。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2