64ビットWindowsのデフォルト設定が依然として大きなページファイルを意味するのはなぜですか?


0

私の質問は、64ビットWindowsの導入以来、私の周りのより多くの人々がシステムのページファイル関連のロックアップに陥るように見えるという観察に基づいています。たとえば、次のような単純なもの zeros(2e5) MATLABで 割り当てる 1600 kBのゼロだけでなく、160 GBもあります。 64ビットのアドレス空間のおかげで、この量はアドレス指定できますが、ほとんどの場合RAMにはありません。結果として、Windowsはページファイルを使用することに頼り、ディスクに160 GBのゼロを格納します。その後(または強制シャットダウン)になって初めて、システムは再び応答するようになります。

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

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


ページファイルは、Windowsのメモリ管理に不可欠な部分です。ページファイルを無効にすると、すべての物理メモリを使用できなくなります。 Windowsで仮想メモリがどのように機能するかをお読みください。
Daniel B

回答:


3

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

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

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

ページファイルを無効にすることによって、それが使用していないメモリを割り当てるプログラム(つまり、ページファイルを想定しています)を使用すると、まだ空き領域があるときに使い尽くすことができます。

あなたがWindowsシステムであなたのRAMの全てを利用したいならば、あなたはそれにページファイルを与えることによって意図されたようにシステムを機能させるべきです。


軽微な注意:仮想メモリを無効にすることはできません。
Daniel B

スワップとバーチャルを混同しないようにしていましたが、残念ながら私の古い心で私は失敗しました。それを指摘してくれてありがとう。 :)
Mokubai

ご回答有難うございます。残念なことに、それは私の質問の具体的な設定には対処していません。あなたの説明が実質的に適切であるためには、ほとんどの場合、大量のRAMをページファイル化する必要があり、それは多くのディスク時間を要します。
bers

1

ページファイルは、OSに2つの大きな利点を提供しますが、どちらも64ビットOSの影響を大きく受けません。

  1. ページファイルはコミット制限を増やします。

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

ページファイルがない場合、コミット制限はOSの実行中に増やすことができない厳しい制限です。デフォルトのページファイル設定では、コミット制限ははるかに大きいだけでなく、必要なときにページファイルを拡張することによって増やすことができる弱い制限です。

Windowsでコミット制限を打つのは悪いことです。ほとんどのアプリケーションはこの不測の事態をうまく処理できず、OS自体がそれを許容できないことがよくあります。

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

コンピュータには、長期間アクセスされていない大量のデータが含まれている可能性があり、実際にはセッション中にアクセスされることはありません。メモリマネージャはもちろん、このデータがどれほど重要であるかを知る方法がないので、それをどこかに保存しなければなりません。

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

ページファイルは、メモリマネージャがこのめったに使用されないデータをオフロードし、この義務からRAMを解放する場所を提供します。これを行うのにコストがかかるのは事実ですが、それはめったに使用されないデータであることを忘れないでください。そして、メモリマネージャは、このコストを最小限に抑えるために数多くの最適化をしています。

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

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

つまり、Windowsがページファイルを管理するようにします。デザイナーは自分たちがしていることを知っています。残念ながら、マイクロソフトはこれをユーザーに知らせるための非常に良い仕事をしておらず、多くの誤解があります。あなたがインターネット上でページファイルについて読んだものの大部分は、少なくとも深刻なエラーを含んでいます。


ご回答有難うございます。残念なことに、それは私の質問の具体的な設定には対処していません。あなたの説明が実質的に適切であるためには、ほとんどの場合、大量のRAMをページファイル化する必要があり、それは多くのディスク時間を要します。
bers

答えはまったく正しくありません。 v.a.sをコミットしていても、単にmalloc(lots_of_bytes)を実行した場合。コミットする必要があります。アクセスするまで、実際には(ページファイル内でも)どこにも領域を占有しません。このような領域からページを初めて読み取ったときには、Windowsは0で一杯の物理ページを割り当てます。あなたの説明によれば、MATLABはこの地域に積極的にゼロを書くことを主張していますが、Windowsが正しいことをしているとは信じていません。それはOSのせいではありません。
Jamie Hanrahan
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.