Linuxperfを使用してC++アプリケーションのプロファイリングを行っており、GProf2dotを使用して優れた制御フローグラフを取得しています。ただし、Cライブラリ(libc6-2.13.so)の一部のシンボルは、合計時間のかなりの部分を占めますが、インエッジはありません。
例えば:
_int_malloc
時間の8%かかりますが、親に電話をかけることはありません。__strcmp_sse42
一緒にすると__cxxabiv1::__si_class_type_info::__do_dyncast
約10%の時間がかかり、名前が0
、である発信者がいて、発信2d6935c
者がいる、、、、2cc748c
および発信6
者がいない。
その結果、perfだけを使用して、このすべてのマロッキングと動的キャストの原因となっているルーチンを見つけることができません。ただし、他のシンボル(たとえばmalloc
、ではない_int_malloc
)には親の呼び出しがあるようです。
perfが_int_mallocの呼び出し親を表示しないのはなぜですか?__do_dyn_castの最終的な発信者が見つからないのはなぜですか?そして、この情報を取得できるようにセットアップを変更する方法はありますか?私はx86-64を使用しているので、フレームポインタを備えた(非標準の)libc6が必要かどうか疑問に思っています。