CSV インメモリ読み取りキャッシュを使用する

適用対象: Azure Stack HCI バージョン 21H2 および 20H2、Windows Server 2022、Windows Server 2019、Windows Server 2016

このトピックでは、システム メモリを使用して、頻繁な読み取りをキャッシュすることで Azure Stack HCI と Windows Server のパフォーマンスを向上させる方法について説明します。 書き込みをメモリにキャッシュすることはできません。

Azure Stack HCI と Windows Server は、クラスター共有ボリューム (CSV) のインメモリ読み取りキャッシュに対応しています。 システム メモリを使用して読み取りをキャッシュすると、バッファーなし I/O を使用して VHD または VHDX ファイルにアクセスする Hyper-V などのアプリケーションのパフォーマンスを向上させることができます。 (バッファなし I/O とは、Windows キャッシュ マネージャーによってキャッシュされないすべての操作です。)

インメモリ キャッシュはサーバーローカルであるため、データの局所性が向上します。最近の読み取りは、仮想マシン (VM) が実行されているのと同じホスト上のメモリにキャッシュされるため、ネットワーク経由での読み取りの頻度が減少します。 この結果、待機時間が短くなり、ストレージのパフォーマンスが向上します。

CSV インメモリ読み取りキャッシュは、記憶域プール キャッシュとは異なるので注意してください。

計画に関する考慮事項

インメモリ読み取りキャッシュは、仮想デスクトップ インフラストラクチャ (VDI) など、大量の読み取りが発生するワークロードで最も効果的です。 反対に、ワークロードで書き込みが極めて大量に発生する場合は、キャッシュによってその価値を上回るオーバーヘッドが発生する場合があるため、キャッシュは無効にする必要があります。

CSV インメモリ読み取りキャッシュ用に、物理メモリの合計の最大 80% を使用できます。 仮想マシンに十分なメモリを確保するよう注意してください。

注意

DISKSPD や VM Fleet など、一部のマイクロベンチマーク ツールでは、CSV インメモリ読み取りキャッシュがない場合より、有効になっている場合に、より悪い結果が出ることがあります。 既定では、VM Fleet では、VM ごとに 10 GiB の VHDX が 1 つ作成され (100 の VM に対して合計で約 1 TiB)、それらに対して一様にランダムな読み取りと書き込みが実行されます。 実際のワークロードとは異なり、読み取りは予測可能なパターンまたは反復パターンに従わないため、インメモリ キャッシュは効果がなく、オーバーヘッドが発生します。

インメモリ読み取りキャッシュを構成する

CSV インメモリ読み取りキャッシュは、同じ機能を持つ Azure Stack HCI、Windows Server 2019、Windows Server 2016 で使用できます。 Azure Stack HCI と Windows Server 2019 では、既定ではオンになっており、1 ギビバイト (GiB) が割り当てられます。 Windows Server 2016 では、既定ではオフになっています。

OS バージョン 既定の CSV キャッシュ サイズ
Azure Stack HCI 1 GiB
Windows Server 2019 1 GiB
Windows Server 2016 0 (無効)

Windows Admin Center を使用したキャッシュの構成

Windows Admin Center を使用してキャッシュを構成するには、左側の [ツール] メニューの一番下にある [設定] を選択します。 次に、[ストレージ] [In-memory cache](インメモリ キャッシュ) に移動します。 チェックボックスを使用してキャッシュを有効または無効にします。また、キャッシュに割り当てるサーバーあたりの最大メモリを指定することもできます。 変更を加えた後は、必ずページの下部にある [保存] をクリックしてください。

In Windows Admin Center, a checkbox enables or disables the cache. You can also specify the maximum memory per server to be allocated to the cache.

PowerShell を使用したキャッシュの構成

PowerShell を使用して割り当てられているメモリの量を確認するには、以下を実行します。

(Get-Cluster).BlockCacheSize

返される値は、サーバーあたりのメビバイト (MiB) 数です。 たとえば、1024 は 1 GiB を表します。

割り当てられているメモリの量を変更するには、PowerShell を使用してこの値を変更します。 たとえば、サーバーあたり 2 GiB を割り当てるには、以下を実行します。

(Get-Cluster).BlockCacheSize = 2048

変更をただちに有効にするために、CSV ボリュームを一時停止して再開するか、サーバー間で移動します。 たとえば、次の PowerShell フラグメントを使用して、各 CSV を別のサーバー ノードに移動し、再び戻します。

Get-ClusterSharedVolume | ForEach {
    $Owner = $_.OwnerNode
    $_ | Move-ClusterSharedVolume
    $_ | Move-ClusterSharedVolume -Node $Owner
}

次のステップ

関連情報については、以下も参照してください。