プロファイラ

Cで書いた拡張ライブラリについてはプロファイルが難しい。標準のprofile.rbではRubyレベルのものしか取れない、つまり拡張ライブラリ内部の呼出しは取れない。
かといってC用のプロファイラgprofで取ろうと-pgを付けてコンパイルしても、ダイナミック・リンクされているからなのか、拡張ライブラリのプロファイルは取れない。ruby本体を-pgでコンパイルしてみたが、ruby本体のプロファイルしか取れない。
で、どうしようもないので2chで質問してみたらprofile.rbかprof, gprofを使えと帰ってきた。本当に試してから答えているのか?と疑問に思う答えだ。
まあ、それは無視することとして他の手段を探してみた。google-perftoolsだ。共有ライブラリをリンクして実行するだけでプロファイリングが出来る、しかもグラフ化が高機能だという奴だ。これを使ったところ上手くいった。

LD_PRELOAD=/usr/lib/libprofiler.so.0 CPUPROFILE=/tmp/profile.out ruby script.rb
pprof --text /usr/local/bin/ruby /tmp/profile.out

と実行するとプロファイルが表示される。グラフ化するには--textを--psなどに変えれば良い。これでOK。
それと質問した手前、最後に結果報告をしてきた。検索するとhttp://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-ext/2264というのがあるのだけど解答がついていないのだよな。れあケースなのだろうか。