VDI にフラッシュストレージが必要な理由

VDI の仮想マシン性能サイジング

VDI を検討していると、「仮想マシンあたりどのくらいの IOPS が必要になるの?」という点が必ず話題になります。VDI 化における悩ましいポイントは、性能サイジングとアプリケーション動作の確認ですが、アプリケーションは POC で確認できるものの、性能は部門レベルではうまく負荷をかけきれず、大規模展開時にそういった課題が出てくることがよくあります。そのような場合、一般的には IOPS を「30~50 IOPS × ユーザー数」で算出しているケースが多いようですが、実際はどうでしょうか。vSphere 基盤に 1 台の仮想マシンを用意し、起動にかかる IOPS を確認してグラフにしてみました。

上記のグラフは、仮想マシンを起動させたときの IO と、ブロックサイズを表しています。この検証では、仮想マシンを起動してからログインが終了して利用できるようになるまでに 60 秒かかりました。この検証で得られた結果をまとめると次のようになります。

  • 最大 IOPS:1,600(青色の線の最大値)
  • 平均 IOPS:600(青色の線の平均)
  • 平均ブロックサイズ:40 KB/IO(黄色の線の平均)
  • 起動に必要な IO:6,000~8,000(青色の線グラフの面積分)
  • 総スループット:600 MB(IOPS × ブロックサイズの平均)

結構な量の IO が発生していることがわかります。

1,600 IO × 20 秒くらいがストレージへのピーク IO 時間で、全体的には平均の 600 IOPS 程度の負荷であると読み取れるため、80 秒程度でのログインまでに必要な処理性能は次のようになります。

  • 1,600 IOPS を 20 秒維持できること(最大性能)
  • 600 IOPS を 80 秒(起動~ログイン)維持できること(最低性能)

上記の前提のうち、下限性能だけを見て、各ユーザーが 80 秒でログインするためのサイジングをしてみます。仮に 1,000 ユーザーが 30 分でログインしてくる要件があった場合は、ざっくり計算すると 22.2 多重で起動できる性能があればよいため、ホストのキャッシュが効かないと仮定すると、

  • 600 IO × 22.2 = 13,320 IOPS (ブロックサイズ:40 KB)

のIOが処理できればよいということになります。

この数字を見て不思議に思われた方も多いと思います。10,000 程度の IO 処理であれば、オールフラッシュでなくても HDD ストレージのスペックで十分に処理できるはず、となってしまいます。しかし、実際はそうならず、HDD ストレージを使用していると、ユーザー数が増えるにしたがってログイン時間が極端に遅くなる事象が発生してしまいます。なぜでしょうか。そのヒントは局所 IO への対応にあります。下の図をご覧ください。

ストレージシステムの性能値は、コントローラで的確にキャッシュヒットして、HDD スピンドルもちょうどいい塩梅で使い切れる期待値を表しているため、実測とはずいぶん異なってきます。上記の例では、ストレージシステム全体が 30,000 IOPS 出せるとしても、起動するのに必要な仮想マシンが同じ RAID グループに入っている場合、1,000 IOPS が上限となり、この時点で既に仮想マシン 1 台の起動にしか耐えられないことがわかります。

では、仮想マシンの起動以外の処理についてはどうでしょうか。アプリケーション起動時のストレージへの IO 負荷について、CATIA を利用されているお客様のデータがありますので、下の表に記載します。

このように、仮想マシンの起動以外にも、3D-CAD アプリや Chrome など、アプリケーション起動によってもストレージへ大量の IO が発生することがわかります。つまり、次のことが言えます。

  • 仮想マシン起動などを処理する負荷全体としては、HDD ストレージのカタログスペック内
  • しかし、1 ユーザーから発生する IO だけで HDD(RAID)を使いきってしまい、性能問題の引き金となる

仮想マシンの起動だけでなく、アプリケーションや OS イメージを瞬時に読み込む環境においては、ピーク性能を安定して確保するためにも、大量のIO を高速に処理するフラッシュストレージが必須だということがおわかりいただけたと思います。製品選定時に「なぜフラッシュ?」という質問があった場合にお話いただければ幸いです。