问题标签 [oprofile]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - OPROFILE 无法获取性能数据
我正在使用 OPROFILE 来收集一些性能数据。但我遇到了麻烦。
这是我的外壳:
c++ - 为什么我的程序在 _fini 中花费了 85% 的 CPU 周期?
使用 oprofile 分析我的程序后,我有点惊讶。
配置文件显示我的程序在以下方面花费了 85% _fini
:
CPU:Intel Core/i7,速度 1199 MHz(估计) 计数 CPU_CLK_UNHALTED 事件(未停止时的时钟周期),单位掩码为 0x00(无单位掩码)计数 100000 个样本 % 图像名称符号名称 553519 85.7402 eddic _fini
其他符号看起来不错。
我的程序是用 GCC 4.7 编译的。
据我了解,该符号_fini
是用于全局破坏的已弃用构造,因此我不明白为什么我的程序会在此符号上花费这么多时间。
这可能是由于 oprofile 或 GCC 的错误配置造成的吗?
我试图分析未优化的代码,但问题不存在。没有没有优化的符号。
有没有办法修复配置文件或避免花这么多时间_fini
?
我不能粘贴我的粘贴,因为它很长,我没有隔离问题。
感谢您的任何想法
valgrind - 需要重新编译的分析器和不需要重新编译的分析器有什么区别?
使用需要使用调试选项重新编译源代码的分析器(如 gprof)和不需要重新编译的分析器(如 Valgrind、OProfile...)之间有什么区别?
linux - Oprofile 警告“无法检查二进制文件”
我们使用 Oprofile 对内核模块进行分析,并且在 opreport 中有如下警告
任何人都可以解释什么是警告,它会影响 oprofile 输出的准确性吗?无论如何可以避免这个警告吗?
任何建议表示赞赏。非常感谢!
添加更多信息:在daemon/opd_mangling.c
对于内核模块文件,sf->kernel->name
是内核模块名称,所以填充头将始终填充mtime
为 0 并生成不需要的警告
c - 多核和 OProfile
线程感知/安全(意味着我可以安全地分析多线程应用程序),如果是oprofile
,与 有什么区别perf
?
linux - ftrace函数统计和oprofile的区别
有人可以比较ftrace
统计数据oprofile
吗?我们观察到以下现象:
- 在网络性能测试期间启用,我们发现使用 ftrace profiler ( ) 对性能测试的影响很小(与未启用
oprofile
的情况相比),oprofile
CONFIG_FUNCTION_PROFILER
- 当我们启用分析器时,网络测试的性能下降了大约 90%。
- 有很多函数在
oprofile
report中采样的比较少,但是在ftrace profile的report中,执行起来需要很多时间(大部分都是skb_alloc
andskb_free
)。
如果您之前使用过这两种分析,请对它们的准确性提出建议?
linux - 使用 perf_events/oprofile 在 Linux 上分析 JIT 的输出?
我想使用硬件性能计数器来分析由 Linux 上的 JIT 生成的代码。据我所知,最常见的分析器是oprofile
和perf
。
如何集成 JIT 和 oprofile/perf?
我的 JIT 不是 oprofile 已经支持的 JAVA。(性能?)
例如,我们可以考虑 LLVM 的 JIT。我想要
- 查看 JIT-ted 代码中最热门的函数(它们的名称)
- 查看最热门函数的反汇编,并为每条指令分配性能计数器统计信息
c++ - oprofile 可以忽略对外部函数的调用,而是将时间累积给调用者吗?
我目前正在使用以下参数调用 oprofile:
例如,输出为:
您可以看到大部分时间都花在了__memset_sse2
其中,但我自己的代码应该优化哪一个并不明显。至少不是来自上面的输出。
在我的具体情况下,我能够通过使用某种穷人的探查器来快速定位问题的根源。我在调试器中运行程序,不时停止它并查看每个线程的调用堆栈。
是否可以直接从 oprofile 的输出中获得相同的结果?如果性能瓶颈不像我的示例那样明显,那么我使用的策略很可能会失败。
是否有一个选项可以忽略对外部函数的所有调用(例如,对内核或 libc),而只是将时间累积给调用者?例如:
foo
在这里,我在分析输出的顶部看到会更有洞察力,而不是memset
.
(我试过opreport --exclude-dependent
但发现它没有帮助,因为它似乎只是跳过了输出中的外部函数。)
profiling - 通过 Oprofile 在每个函数中消耗的周期
Oprofile 致力于基于采样的理论。Opreport -l 选项通过以下方式为我们提供分析报告:
有了这些信息,我可以知道消耗时间的百分比。如果我在我的代码中做一些优化,我会再次得到报告:
在这份报告中,我没有得到多少周期优化已经完成,以便我可以进行基准测试。到目前为止已经做了多少优化?
有什么方法可以知道已经完成了多少周期优化,或者我可以通过任何其他方式进行基准测试?
我正在使用 AMD64 位机器。
linux - oprofile 0.9.8 在带有 Pentium D 的 Ubuntu 12.10 下失败
我正在尝试在奔腾 D 处理器(戴尔 OptiPlex-GX620 桌面)上运行的 Ubuntu 12.10 下使用 oprofile 0.9.8。当我尝试像“operf ls”这样简单的事情时,我得到了
通过安装带有 timer=1 的模块(见下文),我在 sudo 下使用 opcontrol 命令成功地在传统模式下运行 oprofile。
operf 似乎对这种配置不满意——这是新的首选方法。
我已经验证所有依赖包都已加载。
在 oprofile 网站上,他们没有将 pentium D 称为单独的架构,因此不确定它是否使用常规的 Pentium 架构。
我到处搜索,找不到这样的报道。任何帮助将不胜感激在此处确定问题。
PS 当我使用 opcontrol 以传统模式运行时,我取得了一些成功: