2011年4月5日

Mac OSX の dynamic_pager ハックと SnowLeopard

もうそろそろ Lion も出ようかというタイミングでこのハックに気付いた悲しみ。

Mac を常用していると Sleep で作業する比率が増えるんですが、
そうやって uptime を増やしていくと swapfile が増えて超重くなるわけですね。

んで、その処理をしてる dynamic_pager をハックしちゃおうぜってのが↓なわけです。

http://blog.livedoor.jp/dankogai/archives/51101101.html ( Leopard )

Dan Kogai さんのブログですね。
日付がなんと 2008年08月25日 になっています。
つまり2年ちょい前に知っておけよ、な話だったりするわけですよ。

で、これを見て「やったー軽くなるじゃんうっひょー」とか言ってビルドするわけですが、
SnowLeopard の環境だと失敗するわけですね。

そこで Google ですよ!
http://d.hatena.ne.jp/syuu1228/20100523/1274563355

あった。
ビルドも通ったし、自分の環境でも動いてるように見える。
でもこれ lipo で fat-binary にしてないし、
仮に 32bit 環境でビルドしたら 64bit 起動した時に地獄見るんじゃないかな。
怖いなぁ、何か他に方法ないんですかー? なんて考えて

そこで Google ですよ!
http://notohiro.com/?p=1313

あった。
えっ、ちょっ launchctl で disable できるじゃないですかやったー!
早速蹴って swapfile 消して再起動。
普通に動いてるし、swapfile も作られてない。
いい感じじゃないですか!!

と思うじゃん?
ここに設定直前 (数日ほど sleep <-> wake で利用した時 ) のグラフがあります。


Wire に注目。 1GB くらいですね。
で、今回の変更直後 (再起動して常用アプリ立ち上げた後くらい) のグラフがこちら。


嘘みたいだろ‥‥ PageIn してるんだぜ‥‥でも swapfile は生成されてません。
で、Wire のメモリがすでに 1GB 越えてるわけですね。
これってつまり Swap できないから Wire してます的な扱いじゃなかろうか。

メモリ潤沢にあればいいのかなって気はするけど、
swapfile 増えないかわりに Wire が増えるのはちょっと笑えない気がする。
でも今のところ快適だから困った時に考えればいいよね、うん。
comments powered by Disqus