我有一个简单的程序,它的性能要在带有 linux 3.10 和 perf tool 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 的原因是我无法查看 main2 和 main3,如果它在 99 左右
更新:上述unknown
符号是因为 perf 不知道我们在跨平台上的符号,所以图表只是将 unknown 放在未知符号的十六进制地址中,因此建议提供 vmlinux 文件作为其输入report
,即使在提供它之后也是如此。我已经观察到perf
抛出错误的报告以及报告
[trout_fm] with build id 71f5660a1b9cba292e6bb94a5ba3ac20644852dd not found, continuing without symbols
这是因为我的 vmlinux build id 和带有 perf.data 的 buildid 不匹配?我认同 !
如果是这样,perf.data 是从哪里获得构建 ID 的?
前提是我已经仔细刷过相同的图像并使用相同的 vmlinux
perf report -k vmlinux
谁能帮帮我吗 ?克服这个问题。