OS X で一ついやなものは、swapping.

もちろんパートナーでなくて、実記憶と仮想記憶の、ね。

現在私が使っている MacBook Pro には、4GBのRAMが乗っている。滅多なことではswapしないと思いきや、する時にはする。特に VMWare Fusion を使うようになってからは。VMWareが提供するのは仮想マシンだけど、仮想マシンも物理メモリーを必要とするのだし。

問題は、メモリーを食っているアプリケーションを終了しても、一度 swap out されたプロセスたちが実メモリーには戻ってこないこと。んで、一つでもswap outされているプロセスがあれば、/var/vm/swapfileN はそこに居続ける。最低一個はあるのだけど、これがいくつも出来るようになると、システムは大変のろまなものになってしまう。

このあたりは他のUnixも同じなのだけど、 Mac OS X の場合、専用のパーティションではなく通常のファイルシステムにスワップファイルを作るところが違う。これのおかげで専用パーティションなしでも仮想記憶が使える一方、一度出来たスワップファイルは滅多なことでは削除されないということになってしまう。

でも、メモリーを何GBも積んでいても、スワップがありうるというのはやはりいやだ。

と考えたのは私だけではないらしくて、こんなHackをした人がいた。

Killing Mac OS X Swapping : How To Disable dynamic_pager - cestdelamerde.com
If like me you cannot deal with the swapping in OS X, and if you have tried everything possible, even not to launch dynamic_pager (and you've seen that you're system is not usable anymore (on my mac the 2Gb was detected but the system was refusing to use more then 1Gb :-( )), then I have the solution : create another dynamic_pager that fits your needs :-P

試してみると、これがきちんと機能する。その証拠に、わざとメモリーをたくさん使うようにすると

% grep pager /var/log/system.log
Aug 25 05:58:25 XXXXXXXX kernel[0]: (default pager): [KERNEL]: no space in available paging segments

というメッセージが現れるし、/var/vm/swapfile0 以外のスワップファイルは作られない。

というわけで、この作業を少し洗練させてみた。

Makefile

使い方は以下の通り。

  1. Xcodeをちゃんとインストールしておく。
  2. 適当にディレクトリーを作る
  3. そこに上のMakefileをおく
  4. make
    sudo make install
    
  5. 再起動
  6. 一応make uninstallもできるようにしてある

お楽しみは各自の責任においてお願いします。

Enjoy @ your own risk!

Dan the Leopard Tamer

追記: OS X でも FreeBSD みたく

swapoff -a
swapon -a

という技が使えればいいのに。