「記憶域バスキャッシュ」代替方式を考える (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以下で記憶域バスキャッシュのような機構を検討している場合は、こちらの記憶域プールも検討してみる価値はあると思います。

記憶域バスキャッシュ まとめ

記憶域バスキャッシュについての情報は、以下記事にまとめています。

おわりに

今回の記事は以上です。不備やご意見等ありましたら、下のコメント欄やtwitterからお願いします。

Windows Server の知識をさらに深めるには、書籍もおすすめです。Windows Server は実は機能が豊富で、Webに情報がないケースも多いです。無駄に探し回らないために、良書を手元に置いておくと効率的です。おすすめの本は、以下記事にまとめています。

もとだて
もとだて

最後まで読んでいただきありがとうございました。

フィードバック

コメント

  1. N.Ishikawa より:

    記憶域の階層化は私も試しましたがキャッシュではない感じですよね。
    具体的には階層化の場合、最初はSSDを優先的に使用し、SSDのサイズを超えるデータ書き込みがあったらHDDに書き込むようにする。
    で、日次のバッチで使用頻度を考慮したSSD/HDD領域の入れ替えを行う、というもののようです。
    ですので、構築直後は純粋なSSDアクセスとなって性能が良かった、ということではないでしょうか?

    #IT屋ですが、Windows Serverは基本構築のみでこういった機能までは趣味の範囲で触っている程度ですので認識誤り等あるかもしれません...

    記憶域バスキャッシュの代替としては「私的には」PromoChaheが有力、というより使用しています。
    Widndowsクライアントだと数千円、Windows Serverでも1万3千円程度と破格な感じでメモリ/SSDの2階層キャッシュが組めます。
    OS入れ替え時もサポートに連絡すれば3回までインストールできるようです。

    あとintel CASなんてのもあります。
    intel SSDを使用しているとサーバ利用でも無償になる代物です。
    大容量メモリ利用が手軽になった今、メモリキャッシュが使えるPrimoCasheの方がお勧めではありますけど。

    • 貴重なコメントありがとうございます。本記事を書いた もとだて と申します。
      階層化のデータ最適化についてご教示頂き助かります。パフォーマンス測定結果で性能が良い理由は、ご推察の通りかと思います。確かに構築直後にベンチマークを実行したため、ほとんどSSDの性能が出たようですね。
      別記事の記憶域バスキャッシュのベンチマークもそうですが、やはり実際のワークロードでは違った結果になってきそうです。

      「PrimoCache」や「intel CAS」についても、ご紹介ありがとうございます。これらは存じませんでしたが、特に費用面で魅力がありますね。
      念のため、ITシステムの本番サーバー機に導入する場合は、ストレージ故障時にハードウェアメーカーによるサポート(修理対応)が対象外にならないか気を付ける必要がありそうです。そこをクリアできれば、サーバー機でもこちらで代替できそうですね。

      大変参考になりました。他にコメントなどありましたら、よろしければコメント欄やTwitterで頂けますと嬉しいです。

  2. N.Ishikawa より:

    業務用途ですか....
    PrimoCacheは対象HDDのデバイスを別の論理デバイスに変更するわけでもなく、また、データ削除することなくON/OFFができますので、保証云々で問題になることはないかと思います。
    Intel CASも同じような感じだったと記憶してます。

    因みにIntel CASではNVMe RAID(SW RAID)を使って作成したディスクをCasheにすることができました
    Cashe SSDに冗長性を持たせる場合はSW RAIDでもHW RAIDでもいいのでそちらで行えばいい感じです。
    この辺の挙動はPrimoCacheも同じかと思います。

    尚、Intel CASは特定フォルダに、Primo Cacheはボリューム単位にキャッシュを設定する仕組みでした。
    イレギュラーかもしれませんが、Intel CASで特定パスをキャッシュに設定した上でその特定パスから外れた同一ボリュームのパスにファイルを移動したり、その逆を行った場合に挙動が怪しかった記憶があります。
    ってことでPrimoCache一筋に....

    あとSMBDirectを使用した高速アクセスはどちらも可能でした。
    100G NICで直結させたPC NASの共有領域に90GB程のメモリキャッシュを乗せてベンチを掛けると10GB/s以上のシーケンシャルアクセスが確認できます。

    と、ここまでやってはいますが、本職のサーバ屋としてはこの手のものに一切手をだしていません。
    今の職場だと性能要件が提示される案件、あまりないんですよね。
    性能要件があればあったでこの手の仕組み入れるにしても性能の担保、障害ケースの洗い出し、不具合確認及びその対処等で金額が見合わない感じになるでしょうけど。

    • コメントありがとうございます。検証結果を教えていただき、とても勉強になります。
      それにしても10GB/sは凄いですね。 100Gbps NICの限界付近までスピードが出ている感じでしょうか。

      実環境で導入するには、障害や不具合対策などがネックになるという点、よく分かります。
      Win2022で「記憶域バスキャッシュ」がOSの機能として追加されたと聞き、興味をもって検証したのは、このためでもありました。
      OSの機能であれば、Microsoftやハードウェアメーカーのサポート範囲に入りそうで、不測の事態に備えられるのではないかと。まあ実際には、ストレージ構成の要件が厳しそうなので少しがっかりでしたが・・・。

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