2014年6月30日月曜日

仮想マシンとしてのドメインコントローラーとディスクキャッシュ

Windows Serverをドメインコントローラーにした場合、Active Directoryデータベースの整合性を維持するため、書き込みキャッシュを無効にします。

仮想マシンをドメインコントローラーとして構成した場合、物理マシンのキャッシュが無効になるため、性能が低下するらしいが本当ですか。

という質問をいただきました。

最終的な答えはNOですが、いくつか微妙な問題があったのでまとめておきます。なお、以下の文書はすべてWindows Server 2008ベースのものですが、Windows Server 2012 R2でも状況は同じだと思われます。

サポート技術情報888794「仮想ホスト環境で Active Directory ドメイン コントローラーをホストする場合の考慮事項」には以下のことが記載されています。

仮想ホスト環境のソフトウェアで、Force Unit Access (FUA) をサポートする SCSI エミュレーション モードが正しくサポートされている場合、この環境で Active Directory が実行するバッファーなし書き込みはホスト オペレーティング システムに渡されます。

FUA がサポートされていない場合は、Active Directory データベース、ログ、およびチェックポイント ファイルをホストするゲスト オペレーティング システム上のすべてのボリュームにおいて、書き込みキャッシュを無効にする必要があります。

後半は自動的に設定されるため、特に意識する必要はありません。

FUAは、キャッシュ制御をするためのSCSIコマンドです。このコマンドが、仮想マシンから物理マシンに正しく送られる場合、キャッシュを無視してアクセスを行えるようです。

つまり、キャッシュを無効にしなくても、仮想マシンDCからのI/O要求に関してはキャッシュを使わずにディスクをアクセスします。

もちろんSCSIコマンドを発行するのは、仮想マシンの仮想ディスクに対してですから、仮想マシンには仮想SCSIディスクが必要です。また、最終的にSCSIコマンドを受け取るのは物理ディスクですから、物理ディスクもSCSIディスクでなければいけません。

物理ディスクがSCSIでない(IDE/ATA)の場合は、VHD(VHDX)ファイルが破損しないように、キャッシュを手動で無効にする必要があります。

なお、仮想ディスクは、ドメインコントローラーの既定の動作によりSCSIであろうとなかろうと書き込みキャッシュを無効にします。

Microsoft TechNetのドキュメント「仮想化ドメイン コントローラーの展開に関する考慮事項」には以下の記述があります。

Active Directory のデータが壊れる可能性を減らすため、SCSI コントローラーを使用するか、ATA ドライブまたは IDE ドライブで書き込みキャッシュを無効にしてください。

仮想ドメイン コントローラーをホストする Hyper-V サーバーでは、IDE ドライブや ATA ドライブではなく SCSI 物理ドライブを使用してください。SCSI ドライブを使用できない場合は、仮想ドメイン コントローラーをホストする ATA ドライブまたは IDE ドライブで書き込みキャッシュを必ず無効にしてください。詳細については、「Event ID 1539 – Database Integrity (イベント ID 1539 - データベースの整合性に関するページ)」を参照してください。

ドメイン コントローラーとして実行するすべての仮想マシンで、仮想 SCSI コントローラーを使用してください。仮想 SCSI コントローラーを使用できない場合は、ドメイン コントローラーとして実行する仮想マシンの仮想 IDE ドライブで書き込みキャッシュを必ず無効にしてください。インストールされているディスク コントローラーの種類は Virtual Machine Manager の設定ダイアログ ボックスで確認できます。詳細については、「仮想マシンを構成する」を参照してください。

まとめると、以下の通りです。

  • 物理ディスクがATAの場合
    • 物理ディスク…手動でキャッシュ無効化
    • 仮想ディスク…自動的にキャッシュ無効化
  • 物理ディスクがSCSIの場合で仮想ディスクがATAの場合
    • 物理ディスク…手動でキャッシュ無効化
    • 仮想ディスク…自動的にキャッシュ無効化
  • 物理ディスクも仮想ディスクもSCSIの場合
    • 物理ディスク…FUAによる自動制御
    • 仮想ディスク…自動的にキャッシュ無効化

より詳細な内容は、以下のドキュメントをダウンロードしてください(英語です)。

Hyper-V でのドメイン コントローラーの実行に関するページ (ダウンロード可能な Word 文書)