2013年8月25日日曜日

ESXi の ローカルストレージ上のVMパフォーマンス

ホスト内部のディスクは、ESXi のドキュメントではローカルストレージと呼ばれています。


このローカルストレージ上に仮想マシンを格納した場合に、仮想マシンのパフォーマンスが低く困っていました。

具体的には、1つの仮想マシンが多くのディスク書込を実行した場合、同じホスト上にある他の仮想マシンが一時停止したような状態になってしまいます。

調べてみると、以下の Knowledge Base を見つけました。


「パフォーマンスが低くなる場合に、ホストで write-back cache が設定されているか確認してください」という内容です。

私の環境でも write-back cache が設定されていませんでした。

write-back とは、RAID の write policy の1つで、RAID コントローラに搭載されているキャッシュを使用して書込性能を向上させる仕組みです。これを使用する場合、予期しない電源断などの異常時にデータ損失を防ぐため、RAIDコントローラにバッテリバックアップが搭載されていることを確認しておく必要があります。

以下のページでは、write-back/write-through の比較、ESXi で write-back が重要になる理由が説明されており、とても参考になりました。

To compensate for write-through scenarios, a server will often use it’s own RAM to assist in the caching process.

write-through の状況を補うために、多くの場合、サーバは自身の RAM をキャッシング・プロセスを補助するために使用するでしょう。

The ESX hypervisor does not steal memory to perform this caching, and thus has to wait on disk directly when write-through is used. Remember, the hypervisor is designed to be as lightweight and non invasive as possible, and caching large writes into memory would require that the hypervisor either 1) have larger amounts of memory assigned to it, or 2) steal from the resources normally reserved for VM workloads.

ESX ハイパーバイザは、このキャッシングを実行するためにメモリを steal しません。そのため write-through が使用されている時、直接ディスクを待たなければなりません。ハイパーバイザは、可能な限り軽量・非侵襲であるようにデザインされていることを忘れないで下さい。多数の書込をメモリにキャッシュすることは、ハイパーバイザが1)それにアサインする多くのメモリを持つか、2)本来 VM のワークロードのために予約されたリソースから steal することを必要とするでしょう。