Hyper-V ストレージ: レイヤーのキャッシュとデータ整合性への影響

この記事では、仮想ストレージ スタックでのキャッシュの概要について説明し、必要なデータ整合性要件が満たされていることを確認するためのガイダンスをソフトウェア開発者と管理者に提供します。

適用対象: Windows Server 2012 R2
元の KB 番号: 2801713

詳細

少なくとも、システム内のキャッシュのさまざまなレイヤーには、通常、次のものが含まれます。

  • ファイルシステム キャッシュ。 既定では、Windows はディスクから読み取られ、ディスクに書き込まれるファイル データをキャッシュします。 つまり、読み取り操作は、物理ディスクではなくシステム ファイル キャッシュと呼ばれるシステム メモリ内の領域からファイル データを読み取ります。 それに応じて、書き込み操作はディスクではなくシステム ファイル キャッシュにファイル データを書き込みます。この種類のキャッシュはライトバック キャッシュと呼ばれます。 アプリケーションでは、ファイルシステムのバッファーなしセマンティクスを使用して、書き込みがシステム キャッシュにキャッシュされないようにすることができます。
  • ディスク ドライブのキャッシュ。 ディスク ドライブは、ディスク ドライブのパフォーマンスを向上させるために、ファームウェア層にキャッシュを実装します。 ファームウェアレイヤーでのキャッシュはパフォーマンスを向上させることができますが、電源障害が発生した場合、ディスクに書き込まれる前にディスク上のデータが失われる可能性があります。 このキャッシュ動作を制御するオプションは、SCSI、SATA、ATA などの標準化されたドライブ インターフェイスの一部です。 これらのオプションは次のとおりです。
    1. 強制ユニット アクセス (FUA) と呼ばれる I/O ごとの制御メカニズムを使用します。 このフラグは、シグナリングが完了する前にドライブが安定したメディア ストレージにデータを書き込む必要があることを指定します。 これを行う必要があるアプリケーションは、電源障害が発生した場合にデータが失われないように、ディスクの問題 FUA でデータが安定していることを確認します。

      サーバー クラスのディスク ドライブ (SCSI とファイバー チャネル) では、通常、FUA フラグがサポートされます。 コモディティ ドライブ (ATA、SATA、USB) では、FUA が受け入れられない可能性があります。 これにより、ドライブの書き込みキャッシュが無効になっていない限り、データが不整合な状態になる可能性があります。 このメカニズムに依存している場合は、ディスク サブシステムが FUA を正しく処理することを確認します。

    2. ディスク キャッシュのフラッシュを強制します。 フラッシュをディスクに送信するアプリケーションまたはシステムは、ディスク サブシステムにキャッシュ内のすべてのデータを強制的にディスクに書き込みます。 フラッシュを頻繁に発行すると、フラッシュが返される前にディスク キャッシュ内のすべての情報をディスク メディアに書き込む必要があるため、パフォーマンスが低下します。

    3. ディスク キャッシュを無効にします。 IOCTL_DISK_SET_CACHE_INFORMATION制御コードをディスクに発行することで、ディスクの書き込みキャッシュを無効にすることができます。 書き込みキャッシュの状態 (オンまたはオフ) は、システムの再起動後も保持されます。 この制御コードを発行すると、そのディスクに発行されるすべての I/O メカニズムに対して、パフォーマンスに非常に大きな影響を与えます。 これらの結果には、パフォーマンスの大幅な低下が含まれる可能性が最も高くなります。 デプロイする前に、このコントロール コードの使用を慎重に検討する必要があります。

      注:

      ディスク キャッシュを無効にできない場合は、オプション 1 と 2 を考慮する必要があります。

そのため、アプリケーションまたはワークロードが仮想マシン (VM) 内で実行されている場合、さまざまなキャッシュ レイヤーはデータの整合性に影響します。

  • ゲスト ファイルシステム キャッシュ。 このレイヤーは、前に説明したように、バッファーなしのファイルシステム セマンティクスを使用してバイパスできます。

  • ゲスト仮想ディスク キャッシュ。 仮想化された IDE (エミュレートまたは合成) または SCSI デバイスは、下位スタックによって返される書き込みキャッシュの状態を報告します。 仮想ディスクは、書き込みキャッシュが有効になっていることを報告し、ゲストが書き込みキャッシュをオフにすることを拒否します。 キャッシュを無効にすると失敗し、キャッシュが有効になっていることを常に応答します。 この動作は、次の理由で必要です。

    • Hyper-V では、同じディスク上で実行されているすべての VM にディスク キャッシュ設定を同じにする必要があると想定することはできません。

    • 基になるストレージには、常時オンの書き込みキャッシュがあり、オフにできない場合があります。 これは、仮想ディスクが同じホスト上の別のディスク (ライブ ストレージの移行) または別のホスト (ライブ マイグレーション) に移行される可能性があるという事実によって強調されています。

      アプリケーションはディスク キャッシュをオフにできないため、ゲスト内のアプリケーションで電源障害の間でデータの整合性を確保する必要がある場合は、オプション 1 またはオプション 2 を使用して、書き込みがディスク キャッシュをバイパスするようにする必要があります。

  • ホスト ファイルシステム キャッシュ。 Hyper-V ストレージ スタックでは、バッファーなしの書き込みも使用して、ゲストからの書き込みが基になるホスト ファイルシステム スタックをバイパスするようにします。

  • ホスト ディスク キャッシュ。 ゲストによって設定された FUA は、ホストとホスト ストレージ スタックに伝達されます。 ホスト物理ディスク システムは、電源障害を通じて仮想化されたワークロード データの整合性を確認するために、次の条件の少なくとも 1 つを満たす必要があります。

    • システムは、サーバー クラスのディスク (SCSI、ファイバー チャネル) を使用します。
    • システムは、ディスクがバッテリバックアップ キャッシュ ホスト バス アダプター (HBA) に接続されていることを確認します。
    • システムは、ストレージ・コントローラー (RAID システムなど) をストレージ・デバイスとして使用します。
    • システムは、ディスクへの電源が無停電電源装置 (UPS) によって保護されていることを確認します。
    • システムは、ディスクの書き込みキャッシュ機能が無効になっていることを確認します。