Google Perftoolsはパフォーマンス測定用のプロファイラで有名ですが、その中にはTCMalloc(Thread Caching Malloc)という高速なmallocライブラリが含まれています。
TCMallocのページを見ると例として通常のmalloc 300nsに対して50nsで実行が終わるとあります。特にマルチスレッドで効果を発揮し、速度とメモリを節約するとあります。
mallocはユーザランドの根幹をなす重要なライブラリの一つなので入れ換えは恐いといえば恐いですが、それだけに効果もあることが予想されるため、やはり少し惹かれます。
インストール
インストールは個別にダウンロードして行ってもいいですが、Googleのリポジトリをパッケージ管理ツールに追加した方がベターです。
メジャーなディストリビューションなら普通にaptやyumでインストール出来るはずです。追記: aptで得られるパッケージのバージョンと比較すると個別にダウンロードできるものの方がバージョンが新しいようです。
使い方
使い方ですが、上のTCMallocのページではPRELOADでtcmallocライブラリだけ指定していますが、試したUbuntu 7.04ではfirefoxを起動しようとするとptherad_key_createがないとかのたまいますので、以下のような感じで。
もしくは.bashrcなどに
注:/usr/lib/libtcmalloc.so.0の方がいいかもしれません。
もっとチャレンジャーな方は/etc/ld.so.preloadに追加してみればシステムワイドに使えます。
使用感など
特にこのTCMallocが効きそうなマルチスレッド化されているアプリをps axmなどとして探してみるとmysql, firefox, thunderbird, gnome関連, eclipse (java), google desktopと比較的大物が多いようです。
とりあえずshellのrcに設定して使ってみていますが、少なくともブラウザとeclipse、gnome-terminalは軽くなったような気がします。特に複数の大きなソフトを立ち上げているときに重くなりにくい感じです。(プラシーボ効果かもしれませんが...)
あとは試してはいませんがwebサーバなんかでapacheをスレッド版にするとmysqlと併せて効果がでるかもしれません。
追記: 非互換性に付いて
どうもemacsenとこのライブラリの相性が悪くSegFaultで落ちてしまいます。ご注意下さい。