def*_*ode 12 c++ profiling popen oprofile
精简版:
是否有适合Linux的基于良好时间的采样分析器?
长版:
我通常使用OProfile来优化我的应用程序.我最近发现了一个令我疑惑的缺点.
问题是紧密循环,产生c ++ filt来解码c ++名称.在追逐另一个瓶颈时,我偶然偶然发现了代码.OProfile没有显示代码的任何异常,所以我几乎忽略了它,但我的代码意识告诉我优化调用,看看发生了什么.我将popenc ++ filt 更改为abi::__cxa_demangle.运行时间从一分多钟到一秒多一点.大约x60加速.
有没有办法我可以配置OProfile标记popen呼叫?随着配置文件数据的出现,现在OProfile认为瓶颈是堆和std::string调用(BTW一旦优化就将运行时间降低到不到一秒,超过x2加速).
这是我的OProfile配置:
$ sudo opcontrol --status
Daemon not running
Event 0: CPU_CLK_UNHALTED:90000:0:1:1
Separate options: library
vmlinux file: none
Image filter: /path/to/executable
Call-graph depth: 7
Buffer size: 65536
Run Code Online (Sandbox Code Playgroud)
还有另一个Linux的分析器可能找到了瓶颈吗?
我怀疑问题是OProfile只将其样本记录到当前正在运行的进程中.我希望它始终将其样本记录到我正在分析的过程中.因此,如果当前流程已被切换(阻止IO或popen呼叫),OProfile只会将其样本置于阻塞的呼叫中.
如果我无法修复此问题,OProfile仅在可执行文件接近100%CPU时才有用.它对于具有低效阻塞调用的可执行文件无能为力.