使用 perf_events/oprofile 在 Linux 上分析 JIT 的输出?
Posted
技术标签:
【中文标题】使用 perf_events/oprofile 在 Linux 上分析 JIT 的输出?【英文标题】:Profiling output of JIT on Linux with perf_events/oprofile? 【发布时间】:2012-10-02 19:35:06 【问题描述】:我想使用硬件性能计数器分析由 Linux 上的 JIT 生成的代码。据我所知,最常见的分析器是oprofile
和perf
。
如何集成 JIT 和 oprofile/perf?
我的 JIT 不是 oprofile 已经支持的 JAVA。 (性能?)
例如,我们可以考虑 LLVM 的 JIT。我想要
-
查看 JIT 代码中最热门的函数(它们的名称)
查看最热门函数的反汇编,并为每条指令分配性能计数器统计信息
【问题讨论】:
oprofile 可能是opagent? 对于性能,penberg@ 的补丁"perf report: Add support for profiling JIT generated code" 通过/tmp/perf-$PID.map
符号(?)文件支持 Jato JVM 的 JIT。格式为“Startaddr 大小名称\n”。 perf report
必须能读取此文件
这里是性能补丁:lkml.org/lkml/2009/6/8/499"性能报告:添加对分析 JIT 生成代码的支持"
对于 oprofile 有支持代码:llvm/lib/ExecutionEngine/OProfileJIT/OProfileWrapper.cpp
感谢lists.cs.uiuc.edu/pipermail/llvmdev/2013-March/060153.html
【参考方案1】:
要使用 perf 分析 JITed 代码,请下载、编译并安装 perf-map-agent 库,然后(对于 java 代码)添加
-agentpath:<path>/libperfmap.so
到命令行。
对于非java代码,只要生成/tmp/perf-$pid.map
符号映射文件,perf
将在生成性能报告时使用它们。
Brendan Gregg 有一个 blog post,其中包含相关参考资料。
【讨论】:
seacoder,谢谢。/tmp/perf-$pid.map
的格式是什么? perf 何时在record
、record
之后或report
子命令中访问它?如何对 JIT 生成的代码进行反汇编?
地图文件的每一行都包含 perf
反汇编 JITed 代码,所以我将不得不遵从 perf 文档。以上是关于使用 perf_events/oprofile 在 Linux 上分析 JIT 的输出?的主要内容,如果未能解决你的问题,请参考以下文章
在哪里使用 CORBA 以及在哪里使用 SNMP 进行监控?
为啥在使用 unicode 时我不能在 :before :after 内容之后使用空格
在哪里使用 callable 以及在哪里使用 Runnable Interface?
在 Observable RxSwift 中使用 'asPromise()' 可以在 PromiseKit Promise 中使用吗?
可以在 SELECT 查询中使用 IF() 但不能在 UPDATE 中使用
使用 React,在使用 react-transition-group 时,在 StrictMode 中不推荐使用 findDOMNode 作为警告