「記憶域バスキャッシュ」代替方式を考える (2)記憶域スペースの階層化

Windows Server
スポンサーリンク

別の記事で紹介した「記憶域バスキャッシュ」の代替方式の2つ目です。以前からあるOSの機能「記憶域プール」でも同様のことが出来ます。その両者の仕組みはどう違うのか、どうやって構成するのか、信頼性は確保できるか、パフォーマンスの違いはどうか、そのあたりに迫ってみます。

はじめに

Windows Server 2022で新たに追加された機能「記憶域バスキャッシュ」を使うと、SSDとHDDなどの混在させたハイブリッドストレージを構築できることは、以下リンクの記事で紹介しています。

別記事で触れた通り、この機能はWinodws Server 2022が必要なうえ、SSD,HDDの本数を多く搭載しないと信頼性が確保できないようです。

そのため、別の方式で同じようなことが実現できないか考えてみます。前回はRAIDコントローラーの機能(CacheCade Pro 2.0)で実現する方法を紹介しましたが、今回はWindows Serverの「記憶域スペースの階層化」を使う方式について紹介します。

記憶域スペースとは

「記憶域バスキャッシュ」はWindows Server 2022からの新機能ですが、「記憶域スペース」はWindows Server 2012からある機能です。記憶域スペースも、複数のHDDやSSDを束ねて一つのボリュームを作ることが出来ます。そして、SSDとHDDを階層化することで、SSDとHDDのハイブリッドストレージのようなものを構成することも可能です。

「記憶域バスキャッシュ」と何が違うのか?

正直なところ「記憶域バスキャッシュ」と何が違うのかは、検証を終えても疑問が残っています。Microsoftの情報すら少なく、結局のところはっきりとは分かっていません。資料を読む限り、「記憶域バスキャッシュ」はSSD層に読み込み・書き込み両方のキャッシュを持ち、ここが違う点なような気もします。

キャッシュ差だけであれば、それがどれほどのパフォーマンスの差を生むのか気になります。一応パフォーマンスを比較してみました。結果は後述しますが、この検証では有意な差は認められませんでした。しかし、そんな新機能をわざわざ実装するのも考えにくいので、おそらく計測条件が適切でなかったのかもしれません。ここでの測定結果はあくまで参考として下さい。

記憶域スペースで階層化ストレージを作ってみた

「記憶域バスキャッシュ」を検証した環境(Windows Server 2022)で、同様の条件で「記憶域スペースの階層化」を行ってみました。実運用環境で採用している手順ではなく、あくまで試してみたというレベルですが、簡単にその流れを紹介します。

構成

ディスク構成は、下図の通り合計6本とします。記憶域プールは高速階層としてSSD×2本をミラー構成に、標準階層はHDD×2本でこちらもミラー構成とします。OSがインストールされたボリュームは記憶域プールに含められないため、RAID1で冗長化した2本を別に構成しています。これが最低限の信頼性を確保した最小構成ではないでしょうか。

記憶域プールの作成

サーバーマネージャーを起動し、[ファイルサービスと記憶域]>[ボリューム]>[記憶域プール]を開きます。下図のように、右クリックから「記憶域プールの新規作成」を選択します。

ウィザードを進め、記憶域プール名を指定します。ここでは「TestPool1」としました。

構成する物理ディスクの指定します。ここではSSDとHDDを2つずつ、OS分を除く計4本を指定しました。

あとはウィザードに従って、プールを作成します。完了すると、下のように記憶域プールの一覧に「TestPool1」が追加されます。

これで記憶域プールの作成は完了です。ここまではGUIで出来ますが、以降の手順はPowerShellコマンドが必要です。

記憶域階層と仮想ディスクの作成

記憶域階層と仮想ディスクを作成し、ボリュームに割り当てます。ここでは、次のコマンドを実行しました。

#SSD階層(高速階層)を作成
$SSDTier = New-StorageTier -StoragePoolFriendlyName 'TestPool1' -FriendlyName 'Performance' -MediaType SSD -ResiliencySettingName Mirror -ProvisioningType Fixed

#HDD階層(標準階層)を作成
$HDDTier = New-StorageTier -StoragePoolFriendlyName 'TestPool1' -FriendlyName 'Capacity' -MediaType HDD -ResiliencySettingName Mirror -ProvisioningType Fixed

#仮想ディスクを作成し、Eドライブに割り当てる
New-Volume -FriendlyName 'VDisk1' -DriveLetter E -FileSystem ReFS -WriteCacheSize 16GB -StorageTiers $SSDTier,$HDDTier -StorageTierSizes 200GB,800GB

これで、階層化した記憶域が1,000GBのEドライブとして追加されます。

パフォーマンスの比較

作成したボリュームのパフォーマンス測定結果は以下の通りでした。左上のものが今回の結果で、右上(参考1)は、別記事で「記憶域バスキャッシュ」を有効化したボリュームを作った時の結果です。下の2つ(参考2, 3)は、今回使用したHDD,SSDを単体で使用した場合の参考値です。計測条件は、前述の別記事の際と同様です。

今回の結果が、記憶域バスキャッシュ(参考1)より全体的に性能値が高いのは、測定環境に起因していると考えています。仮想マシン上では複数のSSD,HDDに接続していると見せかけて構成していますが、物理的には1台のSSD,HDDで再現しています。そのため、特に書き込み処理では同じ装置に対して2重3重に書き込んでいると思われます。記憶域バスキャッシュの方(参考1)は、SSD,HDDが各3台で構成に対し、今回は各2台で構成しています。そのため「台数が多くなるほど性能が下がる」という、検証環境特有の現象が起きていると考えています。

上記の検証環境特有の現象を差し引いて考えても、今回の結果だけみると、記憶域バスキャッシュの性能と大差がないように見えます。しかし、階層化ボリュームのパフォーマンスは「アクセスするデータがSSD層にあるのかHDD層にあるのか」で大きく変わるでしょう。CrystalDiskMarkのテストではなく、実運用環境のワークロードでは結果が変わってきそうです。

信頼性の確認

SSDやHDDが故障したときの動きも確認しました。構成するディスクのうち、SSDを1本だけ切断してみたところでは、下のように警告扱いになるだけで、ボリュームにはアクセス可能でした。

構成する4本のSSD/HDDのどれについても、1本切断してもボリュームは継続してアクセス可能でした。ただし、SSDとHDDを同時に1本ずつ切断した場合は、ボリュームが見えなくなりアクセスできなくなりました。

1本まで故障に耐えられるので、最低限の信頼性は確保されている構成と言えると思います。

まとめ

前述の通り、信頼性とパフォーマンスを比較検証してみました。まず信頼性については、最低限の信頼性は確保できていて、記憶域バスキャッシュと同等と考えて良さそうです。また、記憶域バスキャッシュでは、最低限の信頼性を確認できたのはOS分含めて8本のディスク構成でしたが、記憶域プールでは6本で構成できました。

パフォーマンスについては、今回のベンチマークだけみると記憶域バスキャッシュと同等に見えますが、実運用上は差が出てくるかもしれません(記憶域バスキャッシュの読み込みキャッシュ動作の違いなどにより)。

試した限りでは特段パフォーマンスが低いわけではないため、少ないディスク本数で信頼性を確保でき、かつ過去のOSバージョンでも実現できる記憶域プールの方が使いやすいような気がします。もしWindows Server 2019以下で記憶域バスキャッシュのような機構を検討している場合は、こちらの記憶域プールも検討してみる価値はあると思います。

フィードバック

フィードバック

コメント

タイトルとURLをコピーしました