vSphere

新卒 SE 社員が贈る vSphere のキソ!第8回 ( 追加編 ) 〜 まだまだあった!ストレージ関連機能 〜

みなさん、こんにちは! VMware SE の氏田 ( Ujita ) と申します。
本エントリでは、前回ご好評頂いた新卒ブログの追加編として、VMware vSphere のストレージ関連機能である vFRC 、Multipathing 、VAAI をご紹介します!

~ はじめに ~
私は以前、新卒ブログシリーズにて vSphere のキソ!第5回 を担当させていただきましたが、その中でストレージに関する機能として、 SIOC と Storage DRS を挙げさせていただきました。これらはいずれも vSphere 単体による工夫でしたが、ストレージのパフォーマンスを向上させる機能の中には、ESXi サーバ内の SSD や外部のストレージの機能と連携できるものがあります。それが、今回ご紹介する vFRC ( vSphere Flash Read Cache ) 、Multipathing 、VAAI ( vStorage API for Array Integration ) といった機能になります。

§ 1 . vFRC ( vSphere Flash Read Cache )
まずは、vFRC からご紹介していきます。vFRC とは、ESXi サーバ内の SSD を仮想マシンの読み取りキャッシュとして利用する機能です。SSD を内蔵している ESXi サーバ上に読み取りパフォーマンスを向上させたい仮想マシンがある場合、仮想マシン単位 ( 正確には、vmdk 単位 ) でキャッシュ領域を割り当て可能です ( 図 1 ) 。

vFRC
図 1 . vFRC

ESXi サーバには、図 2 のように、SSD を仮想フラッシュリソースとして追加できます。

仮想フラッシュリソース管理
図 2 . ESXi サーバにフラッシュリソースを追加
( ※ フラッシュリソースの用途としては、今回ご紹介する読み取りキャッシュの他に、ESXi ホストのメモリスワップ領域として利用する方法もあります )

仮想マシンのキャッシュ領域は、このフラッシュリソースから切り出されて提供されます。仮想マシンへのキャッシュ領域の割り当ては、サーバにフラッシュリソースを追加後、インベントリから仮想マシン名を右クリック -> [設定の編集] から簡単に行うことが出来ます( 図 3 )。仮想マシンに特別な変更を加える必要はありません。

仮想マシンへ読み取りキャッシュ領域を追加
図 3 . 仮想マシンへのキャッシュ領域の割り当て

前回ご紹介した SIOC は、特定のストレージへ I/O が集中した場合、優先的に I/O を通す仮想マシンを設定できる機能でした。これに対し、vFRC では、仮想マシンのストレージパフォーマンス自体を向上させる事が可能です。特に、読み取りが多く、遅延に敏感なアプリケーションを実行している仮想マシンに有効です。キャッシュ内にデータがある場合、ストレージへアクセスする必要は無いので、ストレージの負荷を減らすことができるというのも大きな利点となります。

§ 2 . Multipathing
次に、Multipathing についてご紹介します。図 4 に示したように、ESXi サーバ – ストレージ間のパスは複数存在します ( 実際には、ESXi サーバが複数あるためもっと複雑 ) 。Multipathing は、このパスを効率よく利用するための機能であり、仮想マシンが共有ストレージにアクセスする際、どこを通ればパスの負荷を分散できるかを常に考えてくれます。

Multipathing
図 4 . サーバ – ストレージ間のパス

ご存じの通り、仮想環境では一台のサーバ上でたくさんの仮想マシンが稼働するため、物理環境と比べサーバ – ストレージ間のパスが大変混み合います。従って、サーバ – ストレージ間のパスの負荷を分散させることは非常に重要です。ESXi サーバがどのようにパスを選択するかの基準を、パス選択ポリシー ( PSP : Path Selection Policy ) といいますが、vSphere のデフォルトの機能だと、パス選択ポリシーには、最近の使用ラウンドロビン固定の3つしかありません ( 図 5 ) 。

vSphere_PSP
図 5 . パス選択ポリシー

vSphere では、ストレージの種類を見て、最適なパス選択ポリシーを自動で設定してくれますが、これら 3 つのポリシーはどれも機械的なものであり、パスの負荷が適切に分散されるわけではありません。特定のパスに負荷が偏ると、レイテンシが発生し、アプリケーションの安定稼働に影響を与える可能性があります。
これに対し、Multipathing は、ストレージベンダが提供する専用のマルチパスの仕組みを利用します。これにより、インテリジェントかつ動的なパスの選択が可能になるため、パスの負荷が平滑化されます。以前、私が書いたブログで NIC の負荷分散機能である LBT ( Load Based Teaming ) をご紹介しましたが、適切なパスを選択して負荷を分散するという考え方は同じです。
Multipathing を利用することで、パスの帯域を最大限有効に使うことができるので、I/O 要求が混み合っている場合でも安定したストレージパフォーマンスを期待できます。

§ 3 . VAAI ( vStorage API for Array Integration )
最後に、VAAI についてご紹介します ( ※ VAAI を利用するには、vSphere の Enterprise 以上のエディション、ストレージのファームウェア対応が必要となります )。VAAI を有効にすることで、ストレージが持つ機能と vSphere が連携し、仮想環境におけるストレージパフォーマンスを向上させることができます。
例えば、仮想環境のストレージには、以下の課題があります。
    ( 1 ) 大量の仮想マシンからのアクセス
( 2 ) 仮想マシンファイル ( 大容量 ) のコピー、移動が頻発
( 3 ) ストレージへの 0 書きが頻発

VAAI は、これら仮想環境特有のストレージ処理を効率よくこなすための仕組みを提供します。以下、それぞれの課題を VAAI がどのように解決するかについてご説明します。

( 1 ) 大量の仮想マシンからのアクセス
今までは、たくさんの仮想マシンが同一のストレージを利用することによって I/O が混雑するというお話をしていましたが、実はもう一つ大きな課題があります。それが、ストレージの排他制御です。排他制御はデータの整合性を保つために必要ですが、これはファイルシステムのメタデータを更新する場合にのみ実行されます。しかし、仮想環境では多くの仮想マシンからアクセスが発生するため、排他制御により生じる待ち時間は馬鹿になりません。そのうえ、vSphere の標準機能の場合、排他制御は LUN 全体をロックすることにより行われるため、同じ LUN を利用している仮想マシン全てが待たされる状態でした ( 詳しくは、過去のブログ 押さえておきたいvSphereの基本~ストレージ編 第2回~ をご覧ください ) 。
これに対し、VAAI が有効なストレージでは、LUN 全体ではなく、より細かい単位でストレージをロックします。従って、排他制御の影響を受ける仮想マシンを大幅に減らすことが可能になります。これを実現している VAAI の機能を ATS ( Atomic Test & Set ) と呼びます。

( 2 ) 仮想マシンファイル ( 大容量 ) のコピー、移動が頻発
仮想環境には、仮想マシンがファイルであることを生かした便利な機能がたくさんありました。前回のブログでご紹介した Storage vMotion もその一つです。こういった便利な機能を利用するには、大容量の仮想マシンファイルをコピーしたり、移動したりする必要があります。VAAI が有効でない場合、この処理は ESXi サーバの CPU が行います。つまり、 ESXi サーバが対象となるデータをストレージから読み込み ( read ) 、再びストレージへ送って書き込む ( write ) という処理を行う必要がありました。このため、本来仮想マシンによって利用されるべき ESXi サーバの CPU リソースが奪われるうえ、サーバ – ストレージ間の帯域も一時的に逼迫してしまいます。
これに対し、VAAI が有効なストレージでは、ファイルコピーや移動の処理をストレージ単体で行うことが可能になります。ESXi サーバは、ただ一度命令を出すだけで済むので、CPU リソースが奪われることがありません。また、実際のデータは、ストレージ内でのみ流れることになるため、サーバ – ストレージ間の帯域も消費されません。これを実現している VAAI の機能を Full Copy と呼びます。

( 3 ) ストレージへの 0 書きが頻発
これまでお伝えしてきたように、仮想環境では、一つのストレージを複数の仮想マシンが利用します。従って、ある仮想マシンが書き込んだ領域を別の仮想マシンが使うということが頻繁に起こります。しかし、ある仮想マシンが過去に書き込んだ情報に別の仮想マシンからアクセスできるというのはセキュリティ上良くありません。そのため、仮想マシンがストレージ上のとある領域に初めてアクセスする場合、まずは 0 書きされるという仕組みになっています。仮想マシンを新たに作成する際にも大量の 0 書きが行われます。VAAI が有効でない場合、この 0 を書く処理は、ESXi サーバの CPU が行います。当然、( 2 ) と同じように、ESXi サーバの CPU リソースやサーバ – ストレージ間の帯域に影響を与えてしまいます。
もうおわかりかと思いますが、VAAI が有効なストレージでは、この処理をストレージ側にオフロードすることが出来ます。従って、ESXi サーバの CPU リソースに影響を与えませんし、サーバ – ストレージ間の帯域にも影響しません。これを実現している VAAI の機能を Block Zeroing と呼びます。

図 6 に、VAAI 機能のイメージ図を示します。

VAAI
図 6 . VAAI

~ おわりに ~
今回は、新卒ブログシリーズのおまけとして、vFRC 、Multipathing 、VAAI をご紹介させていただきました。前回ご紹介した SIOC や Storage DRS も考えると、vSphere にはストレージ関連機能がたくさんあると言うことがおわかりいただけたと思います。機能が多すぎて複雑に見えてしまうかも知れませんが、裏を返せば、それだけストレージが重要視されているということでもあります。皆様には、本シリーズでご紹介したストレージ関連の機能を生かし、仮想化の恩恵を最大限受けられる環境を構築していただけたらと思います。ありがとうございました。
VMware SE 氏田裕次

新卒 SE 社員が贈る vSphereのキソ!
第1回 vSphereを俯瞰する
第2回 仮想環境におけるネットワークとストレージ
第3回 vMotionとvSphere HA/vSphere FTの違いとは?
第4回 仮想マシンの配置管理はDRSにお任せ!
第5回 様々な仮想マシンが混在&混雑しても大丈夫!?ネットワーク と ストレージの帯域を維持する仕組み
第6回 vSphere でココまでできる!データ保護
第7回 仮想環境となが〜くお付き合いしていく
第8回 ( 追加編 ) まだまだあった!ストレージ関連機能