Mac の dynamic_pager を無効にしますか?

Mac の dynamic_pager を無効にしますか?

私は Mac OS X のメモリ管理に関する次のブログ記事を読みました:http://workstuff.tumblr.com/post/20464780085/something-is-deeply-broken-in-os-x-memory-management

この件についてあなたの意見を聞かせてください。

メモリが「たった」4GBしかないので、カーネルパニックが発生する可能性があります。

私は回転ディスク(SSD ではなく)を使用しており、時々ビーチボールが表示され、続行する前に外付け HD を回転させることもあります。

アクティビティモニター画面

現時点ではスワップは使用されていないとのことですが、dynamic_pager を無効にしても何も起こらないということでしょうか? ページインはいくつかあります。

試してみるのはどの程度安全でしょうか? メモリが少なくなったときにページャーを再度有効にするスクリプトを記述できるでしょうか?

[更新]: 一日の終わりに、26MB のスワップ、さらに多くのページインとページアウト、そして大量の非アクティブ メモリが発生しました。

答え1

OS X には、これにつながる 3 つの問題があります。

  1. デフォルトでは、ディスクに書き込まれたデータやディスクから読み取られたデータは、最新のプログラム データよりも高い優先度で RAM にキャッシュされます。アプリケーションは、オプションを使用して記述子ごとにこれを無効にできますがF_NOCACHEfcntl()そうするアプリケーションはほとんどありません。その結果、大量のディスク アクティビティによって、その時点で使用されていないメモリがスワップ アウトされます。これにより、元のディスク アクティビティに加えて、スワップ アウトと、そのメモリをしばらく後に再度読み取るためのディスク アクティビティがさらに発生します。

  2. HFS+ は同時ファイル アクセスをうまく処理しません。特に、多数の異なるファイルを一度に開いたり閉じたりすると、大きな競合が発生し、一度に実行できるオープン/クローズ操作は 1 つだけです。

  3. 多くの OS X アプリケーションは、ディスク アクセスを多数の小さなファイルに分散します。

その結果、2 つ以上のアプリケーションが一度に大量のファイルにアクセスしようとすると、スワップ アクティビティがアプリケーションと I/O を競合するため、ディスク I/O 負荷が急激に増加します。

動的ページャを無効にすると、プライベート/ダーティなアプリケーション ページをディスクにプッシュする機能が削除されるため、この指数関数的な曲線の初期段階を回避できる可能性があります。代わりに、システムは、パブリック/クリーンなマップ ファイル (実行可能ファイル、ライブラリなど) から、およびおそらく最初からキャッシュされるべきではなかったキャッシュされたファイル データからページを収集する可能性があります。これによって実際にパフォーマンスが向上するかどうかは、使用しているアプリケーションに大きく依存します。たとえば、Safari はディスク I/O の管理が非常に下手なので、これが役立つと思います。

問題は、必要な RAM の量が実際に利用可能な量を超えた場合に発生します。パニック クラッシュは、1 日を突然終わらせる方法です。ただし、大きなファイルを編集したり、本質的にメモリを大量に消費する作業を行ったりしていない場合は、リスクを考慮するほどまれなケースかもしれません。

ちなみに、lsofコマンドを使用すると、どのプロセスによってどのファイルが開かれているかを確認でき、fs_usageコマンドを使用すると、ファイル操作の実行ログを確認できます。 どちらも、root として実行するか、 経由で実行するとより適切に機能しますsudo

関連情報