web-dev-qa-db-ja.com

perfプロファイラーの呼び出しスタック

次の方法で「perf」を実行しています。

perf record -a --call-graph -p some_pid

perf report --call-graph --stdio

次に、これがわかります:

 1.60%     my_binary  my_binary                [.] my_func
           |
           --- my_func
              |          
              |--71.10%-- (nil)
              |          (nil)
              |          
               --28.90%-- 0x17f310000000a

My_func()を呼び出す関数を確認できません。代わりに「nil」と「0x17f310000000a」が表示されます。私は何か間違ったことをしていますか?一部の記号が表示されているのに他の記号が表示されていないため、これはおそらくデバッグ情報の問題ではありません。

より詳しい情報:

  • CentOS 6.2(カーネル2.6.32-220.4.1)を実行しています。
  • perf rpm-perf-2.6.32-279.5.2.el6.x86_64。
26
erezz

-fno-omit-frame-pointergccオプションを使用してコードをコンパイルしたことを確認してください。

25
Andriy

あと少しですが、-Gオプションがありません(システムにインストールされているパフォーマンスよりも新しいパフォーマンスが必要になる場合があります)。

$ perf report --call-graph --stdio -G

perf help reportから:

   -G, --inverted
       alias for inverted caller based call graph.
14
holygeek

Zoom でプロファイリングを試しましたか? perf、カスタムドライバー、またはoprofileを使用してサンプルを収集できます。 1つのプロセスだけを見たい場合は、「スレッド時間」構成を試してください。

Zoomのオプションのいずれかが、スタンドアロンのパフォーマンスよりも機能情報を取得するのに優れているかどうかに興味があります。

0
federal