perf profiler结果

时间:2012-08-18 19:46:56

标签: c++ linux profiling profile profiler

我是perf的新手,

尝试理解结果,但如何阅读这样的内容?

 39.57%  TestSoft.exe  libc-2.15.so         [.] 0x3fd59
  7.04%  TestSoft.exe  libc-2.15.so         [.] malloc
  6.15%  TestSoft.exe  LoanSoft.exe         [.] LoanDef::update_vec()

第一行可能是libc中的某个函数,但是它的功能是什么? 0x3fd59是什么意思? 另外,对于第二行,我的代码中的哪个函数调用malloc?对于第三行,我可以进一步对该函数执行perf只是为了查看update_vec()的哪一部分很慢?

非常感谢!

2 个答案:

答案 0 :(得分:2)

您需要使用调试符号进行构建(编译时传递给g ++的-g选项)。然后,您将能够看到哪个函数使用该CPU时间。您还需要使用带有调试符号的库。

答案 1 :(得分:2)

由于转储是来自用户模式的所有功能,因此建议使用调试符号编译.x3fd59是一个例程,由于缺少符号,其实际名称不可用。
See here to do your analysis at Source level.

 39.57%  TestSoft.exe  libc-2.15.so         [.] 0x3fd59
  7.04%  TestSoft.exe  libc-2.15.so         [.] malloc
  6.15%  TestSoft.exe  LoanSoft.exe         [.] LoanDef::update_vec()
  

首先表明收集的总样本的百分比   相应的功能。

第二栏报告过程   从中收集样品。

第三栏显示   样本来自的ELF图像的名称。如果一个程序是   动态链接,然后这可能会显示共享库的名称。   当样本来自内核时,则为伪ELF图像名称   使用[kernel.kallsyms]。

第四栏表示   获取样本的特权级别,即程序时的特权级别   当它被打断时正在运行:

   [.] : user level
   [k]: kernel level
   [g]: guest kernel level (virtualization)
   [u]: guest os user space
   [H]: hypervisor
  

最后一列显示符号名称。