64 ビット Windows のデフォルト設定では、なぜ依然として大きなページ ファイルが想定されるのでしょうか?

64 ビット Windows のデフォルト設定では、なぜ依然として大きなページ ファイルが想定されるのでしょうか?

私の質問は、64ビットWindowsの導入以来、私の周りの多くの人がシステムのページファイル関連のロックアップに陥っているという観察に基づいています。たとえば、zeros(2e5)MATLABのような単純なもの割り当てる1600 KB のゼロではなく、160 GB のゼロです。64 ビットのアドレス空間のおかげで、この量のアドレス指定は可能ですが、RAM では不可能な場合がほとんどです (メモリ割り当てに帰着するこのような例は数多く挙げられます)。その結果、Windows はページ ファイルを使用することになり、160 GB のゼロをディスクに保存します。その後 (または強制的にシャットダウンした後) にのみ、システムは再び応答するようになります。

32 ビット Windows では、最大 4 GB のアドレス空間によってこの問題はほぼ回避されました。

では、なぜ Microsoft はデフォルトで依然として大きなページ ファイルを設定するのでしょうか。私の観察によると、RAM が大きいほどデフォルトのサイズも大きくなりますが、非常に高価な SSD など、非常に大きくて非常に高速なドライブがない限り、これはあまり意味がありません。そのため、私は 64 ビット Windows インストールでページ ファイルをオフにする傾向があります。それとも、オフにすべきではないのでしょうか。これを行うべき、またはそうしない理由は何ですか。

答え1

Windows は Linux のようにメモリの遅延割り当てを行わず、割り当て可能なメモリの量はページ ファイルに依存します。

Linux では、メモリの「まばらな」割り当ては完全には利用されないという前提があるため、プログラムはメモリを物理的に使い果たすまで継続的に過剰割り当てすることができます。プログラムがコミットされたメモリを実際に満たしても、要求を満たすのに十分な RAM またはスワップがない場合、プロセスが強制終了されます。

Windows ではその逆で、割り当てられたメモリはすべて最終的に使用されるものと想定し、物理メモリ + ページ ファイル サイズが満たされるまですべての予約が尊重されます。プログラムがメモリを割り当てることができれば、それを使用できます。メモリを割り当てることができない場合は、RAM とページ ファイル サイズの制限に達しています。

ページ ファイルを無効にすると、使用していないメモリを割り当てるプログラム (つまり、ページ ファイルを想定しているプログラム) によって、まだ「空き」領域があるにもかかわらずメモリが不足する可能性があります。

Windows システムで RAM をすべて活用したい場合は、ページ ファイルを提供して、システムが意図したとおりに機能するようにする必要があります。

答え2

ページファイルは OS に 2 つの大きな利点をもたらしますが、どちらも 64 ビット OS によって大きく影響されることはありません。

  1. ページファイルによりコミット制限が増加します。

アプリケーションがメモリを割り当てると、Windows OS は、最悪のシナリオでも十分なストレージが確保されることを約束または約束します。このストレージは、RAM またはページファイルにあります。コミット制限は、RAM サイズとページファイル サイズの合計からわずかなオーバーヘッドを引いた値として定義されます。ページファイルがない場合、コミット制限は RAM サイズよりもいくらか小さくなります。メモリ マネージャーは、割り当てられたメモリの合計を追跡し、コミット制限を超えないようにします。

ページファイルがない場合、コミット制限は OS の実行中に増加できないハード制限です。デフォルトのページファイル構成では、コミット制限ははるかに大きいだけでなく、必要に応じてページファイルを拡張することで増加できるソフト制限でもあります。

Windows でコミット制限に達するのはよくありません。ほとんどのアプリケーションはこのような事態にうまく対処できず、OS 自体もこれを許容できないことがよくあります。

  1. ページファイルは RAM の使用を最適化します。

コンピュータには、長い間アクセスされていない、あるいはセッション中にまったくアクセスされない可能性のある大量のデータが常に格納されている可能性があります。もちろん、メモリ マネージャにはこのデータの重要性を知る手段がないため、どこかに保管する必要があります。

めったに使用されないデータをすべて高速 RAM に保存することは、この貴重なリソースの重大な誤用です。 RAM にこのような負担がなければ、アプリケーションの使用やキャッシュの目的に利用できる容量が増えることになります。 キャッシュは現代の OS では非常に重要であり、優れたパフォーマンスに大きく貢献します。

ページファイルは、メモリ マネージャがあまり使用されないデータをオフロードし、RAM をこの作業から解放できる場所を提供します。これを行うには確かにコストがかかりますが、あまり使用されないデータなので、それほど深刻ではないことを覚えておいてください。また、メモリ マネージャには、このコストを最小限に抑えるためのさまざまな最適化機能があります。

しかし、これをコストと考えるのではなく、パフォーマンスへの投資と考えてください。お金を賢く投資することが良いことと同じように、メモリ マネージャーは、後で大きな利益が得られることを期待して、ページファイルの使用に少しの時間を投資します。通常はうまくいきます。

これは新しいアイデアではありません。Windows や Linux では長年使用されており、それよりずっと前から大規模なコンピュータ システムでも使用されていました。これは何十年にもわたって最適化されてきた実証済みの原則です。

要するに、Windows がページファイルを好きなように管理できるようにすればいいのです。設計者は何をしているか分かっています。残念ながら、Microsoft はユーザーにこの点をうまく伝えておらず、誤解が広がっています。少なくとも、ページファイルに関してインターネットで読む情報の多くには重大な誤りが含まれています。

関連情報