相关疑难解决方法(0)

gprof 的替代品

还有哪些程序与 gprof 做同样的事情?

profiler profiling gprof

170
推荐指数
6
解决办法
7万
查看次数

node_s/v8 flamegraph中使用perf_events的未知事件

我尝试做使用Linux作为perf_events由布伦丹·格雷格描述的一些分析的NodeJS 这里.

工作流程如下:

  1. 运行节点> 0.11.13 with --perf-basic-prof,这将创建/tmp/perf-(PID).map写入JavaScript符号映射的文件.
  2. 使用捕获堆栈 perf record -F 99 -p `pgrep -n node` -g -- sleep 30
  3. 使用存储库中的stackcollapse-perf.pl脚本折叠堆栈
  4. 使用flamegraph.pl脚本生成svg火焰图

我得到以下结果(开头看起来非常好): 在此输入图像描述

问题是有很多[unknown]元素,我认为应该是我的nodejs函数调用.我假设整个过程在第3点失败,其中perf数据应该使用由node/v8生成的映射来折叠--perf-basic-prof./tmp/perf-PID.map在节点执行期间创建文件并将一些映射写入其中.

如何解决这个问题呢?

我使用的是CentOS 6.5 x64,并且已经尝试使用节点0.11.13,0.11.14(预建和编译),但没有成功.

performance profiling v8 node.js perf

8
推荐指数
2
解决办法
3414
查看次数

使用__gnu_mcount_nc捕获函数退出时间

我正在尝试对支持不佳的原型嵌入式平台进行一些性能分析.

我注意到GCC的-pg标志导致__gnu_mcount_nc在每个函数的入口处插入thunk .没有__gnu_mcount_nc可用的实现(并且供应商对协助不感兴趣),但是因为编写一个简单记录堆栈帧和当前循环计数的操作是微不足道的,所以我已经这样做了; 这工作正常,并且在调用者/被调用者图和最常被称为函数方面产生有用的结果.

我真的想获得有关在函数体中花费的时间的信息,但是我很难理解如何只使用条目而不是退出来解决这个问题,每个函数都被钩住了:你可以确切地知道每个函数的确切时间输入,但没有挂钩退出点,你不知道多少时间,直到你收到下一条信息属于被叫者和呼叫者多少.

尽管如此,GNU概要分析工具实际上可以在许多平台上收集函数的运行时信息,因此可能开发人员在实现这一目标时需要考虑一些方案.

我已经看到一些现有的实现,它们执行诸如维护阴影调用堆栈并将入口处的返回地址旋转到__gnu_mcount_nc,以便在被调用者返回时再次调用__gnu_mcount_nc; 然后,它可以将调用者/被调用者/ sp三元组与影子调用堆栈的顶部进行匹配,从而将此案例与条目调用区分开来,记录退出时间并正确返回调用者.

这种方法还有很多不足之处:

  • 在没有-pg标志的情况下,在递归和库编译的情况下,它似乎很脆弱
  • 在没有工具链TLS支持且当前线程ID可能昂贵/复杂的嵌入式多线程/多核环境中,似乎难以实现低开销或完全实现

是否有一些明显更好的方法来实现__gnu_mcount_nc,以便-pg构建能够捕获函数退出以及我缺少的入口时间?

c++ gcc profiling gprof

3
推荐指数
1
解决办法
2836
查看次数

标签 统计

profiling ×3

gprof ×2

c++ ×1

gcc ×1

node.js ×1

perf ×1

performance ×1

profiler ×1

v8 ×1