[FIX]Windows Server 2016 および Windows 10 における ReFS の大容量メモリの使用

適用対象: Windows 10, version 1809Windows Server 2019, all versionsWindows Server 2016 詳細

現象


Windows Server 2016 または Windows 10 を実行しているコンピューターでは、メモリ使用量が大きくなります。

原因


メタデータの復元性を高めるために、Windows Server 2016 の Resilient File System (ReFS) では、すべてのメタデータ更新のために allocate-on-write のセマンティクスが使用されます。 つまり、ReFS はメタデータのインプレース アップデートを実行しません。 代わりに、すべての書き込みが新たに割り当てられた領域に書き込まれます。 

ただし allocating-on-write の場合、ReFS は、write-in-place ファイル システムよりも多くのメタデータ I/O が、ボリュームの新しい領域に生じます。さらに、ReFS は、ブロック キャッシュ ロジックを使用して、RAM でそのメタデータをキャッシュします。 これは、ファイル キャッシュ ロジック ほどリソースが効率的ではありません。 

一方、ReFS ブロックのキャッシュ ロジックと、allocate-on-write のセマンティクスによって、ReFS メタデータストリームが大きい場合があります。 ReFS は、キャッシュ マネージャーを使用してメタデータ ストリームを作成し、キャッシュ マネージャーは非アクティブなビューを必要な時のみアンマップします。 状況によっては、このマッピング解除は、サーバーでアクティブな作業セットの増加の原因となります。 これにより、パフォーマンスが低下する可能性があるメモリ負荷が作成されます。

解決方法


これは、2017 年 3 月 14 日にリリースされた累積更新プログラム 4013429 で紹介されています。 この更新プログラムでは、3 つのチューナブル レジストリ パラメータ を紹介します。 (「回避策」セクションを参照してください。)

累積更新プログラム 4013429 は、Windows Update を介して利用可能です。 Microsoft Update カタログから、直接ダウンロードもできます。 

詳細については、以下のサポート技術情報を参照してください。

チューナブル パラメーターを設定する方法


この更新プログラムは、大規模な ReFS メタデータストリームに対応する 3 つのチューナブル レジストリ パラメータを提供します。 このパラメータを設定するには、以下のオプション メソッドを使用します。 これらのパラメータは、機能的に重ならないため、どのような組み合わせでも使用できます。 

Warning Serious problems might occur if you modify the registry incorrectly by using Registry Editor or by using another method. These problems might require that you reinstall the operating system. Microsoft cannot guarantee that these problems can be solved. Modify the registry at your own risk.
重要 

  • このパラメータ変更を有効にするために、再起動が必要です。
  • これらのパラメータは、フェールオーバー クラスタのすべてのノードで一貫して設定する必要があります。

オプション 1

このオプションを選択すると、ReFS はすべてのチェック ポイントにおいて、すべてのメタデータ ストリームの完全な MM アンマップを試行します。 このオプションは、ボリュームがアイドル状態で、マップされたページがない場合にのみ予想される結果を生成します。 

次のサブキーで指定した値を指定します。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem
値の名前: RefsEnableLargeWorkingSetTrim
設定 RefsEnableLargeWorkingSetTrim = 1
値の種類: REG_DWORD


オプション 2

ReFS は、必要な時のみの MM アンマップ ロジックがあります。 したがって、ReFS はネームスペース全体を 循環し、1 つの MM アンマップを完成し、数量が割り当てられていない場合は、特定の粒度でマップ解除します。 マップ解除されていない仮想アドレススペースの量は、次の式によって決まります。

RefsNumberOfChunksToTrim * 128MB (ボリューム サイズ > 10 TB)
RefsNumberOfChunksToTrim * 64MB (ボリューム サイズ < 10 TB)

このオプションは、マップされていない、マップされていない VA 範囲にアクティブな参照 (つまり、マップされたメタデータ ページ) がない場合に機能します。

次のサブキーで指定した値を指定します。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem
値の名前: RefsNumberOfChunksToTrim
値の種類: REG_DWORD
規定値 (設定しない、または 0 の場合): 4

RefsNumberOfChunksToTrim の設定をより高い値に設定すると、ReFS のより積極的なトリミングを発生します。 これにより、使用されているメモリの量が減少します。 トリミング値を適切な数値に設定します。 8、16、32 など。


オプション 3

このオプションでは、ReFS は、メタデータ ページ をアンマップしながら、MM トリムをインラインで送信します。 これはもっとも積極的なオプションで、SSD や NVMe など、高品質メディアで ReFS が使用されている場合にパフォーマンスがリグレッションする可能性があるためです。 

次のサブキーで指定した値を指定します。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem
値の名前: RefsEnableInlineTrim
値の種類: REG_DWORD
設定 RefsEnableInlineTrim = 1

推奨方法:

大きな作業中のワークフローがパフォーマンスを低下させる場合は、まず RefsEnableLargeWorkingSetTrim = 1 を設定します。

この設定が期待どおりの結果を生成しない場合は、 8、16、32 などの異なるRefsNumberOfChunksToTrim 値を使用してください。

それでも目的のエフェクトが提供されていない場合は、 RefsEnableInlineTrim = 1 を設定します。 

詳細情報


メタデータを更新するために、ReFS は writing-in-place ではなく allocate-on-write を使用し、破損に対する復元を向上します。

Writing-in-place は書き込みの障壁にさらされます。 これは、停電または予期しない中断が発生した場合にのみ発生します。

Allocating-on-write を使用すると、ReFS はパワー障害または予期しない中断が発生した後で、メタデータの整合性を確実に維持できます。 これは、ReFS が以前の一貫性のあるメタデータ コピーを引き続き参照できるためです。