web-dev-qa-db-ja.com

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

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

その件についてご意見をお聞かせください。

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

私は(SSDではなく)回転するディスクを持っていて、時々ビーチボールを目にします。続行する前に外部HDを回転させることさえあります。

activity monitor screen

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

試してみるのはどれくらい安全ですか?メモリが少なくなったときにページャーを再度有効にするスクリプトを作成できますか?

[更新]:1日の終わり、26 MBのスワップ、より多くのページインとページアウト、および多くの非アクティブなメモリ。

7
Pepijn

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

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

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

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

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

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

必要な量RAMが実際に利用可能な量を超える場合、問題が発生します。パニッククラッシュは、1日を終了するための非常に突然の方法です。ただし、大きなファイルを編集していない場合、または本質的にメモリを使用していない場合集中的なこと、これはリスクを考慮するのに十分まれかもしれません。

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

9
Seth Noble