Linux 3.10 および perf ツール 3.4 バージョンを搭載した arm cortex a7 マシンでパフォーマンスを測定する単純なプログラムがあります。
プログラム:
#include<stdio.h>
int i=0;
void main2(void)
{
for(i=0;i<20000;i++);
}
void main3(void)
{
for(i=0;i<30000;i++);
}
void main4(void)
{
for(i=0;i<40000;i++);
}
void main5(void)
{
for(i=0;i<50000;i++);
}
main(void)
{
printf("Main2\n");
main2();
printf("Main3\n");
main3();
printf("Main4\n");
main4();
printf("Main5\n");
main5();
}
フレーム グラフを使用して視覚化された perf ツール データ
#perf record -F 5000 -g a.out
#perf script 1>temp1 2>temp2
#stackcollapse-perf.pl temp1 > temp
#flamegraph.pl temp > temp.svg
temp.svgは以下です
ここで私の疑問は、なぜそれらが発生するのか不明なトレースです。サンプリングレートを 5000 に上げた理由は、99 前後の場合、main2 と main3 を表示できないためです。
更新: 上記のunknown
シンボルは、perf がクロス プラットフォームでシンボルを認識しないためです。そのため、グラフは未知のシンボルの 16 進アドレスに unknown を配置するだけreport
です。私は、レポートとperf
一緒にスローエラーのレポートを観察しました
[trout_fm] with build id 71f5660a1b9cba292e6bb94a5ba3ac20644852dd not found, continuing without symbols
これは、私の vmlinux ビルド ID と perf.data のビルド ID が一致しないためですか? そう思います !
もしそうなら、perf.dataはどこからビルドIDを取得しましたか?
同じイメージを注意深くフラッシュし、同じ vmlinux を使用している場合
perf report -k vmlinux
誰でも私を助けてもらえますか?この問題を克服するために。