2012-10-02 49 views
2

我想通過使用硬件性能計數器來剖析由Linux上的JIT生成的代碼。據我所知,最常見的配置文件是oprofileperf使用perf_events/oprofile分析Linux上JIT的輸出?

如何整合JIT和oprofile/perf?

我的JIT不是已經在oprofile中支持的JAVA。 (perf?)

例如,我們可以考慮LLVM的JIT。我想

  1. 見最熱門的功能(自己的名字)從JIT泰德代碼
  2. 見最熱函數的反彙編,分配給每一個指令
+0

oprofile可能是[opagent](http://oprofile.sourceforge.net/doc/devel/index.html)嗎? – osgx

+0

而對於perf,penberg @通過'/ tmp/perf-1來支持Jato JVM的JIT補丁[「perf報告:增加對profiling JIT生成代碼的支持」](http://lwn.net/Articles/474254/) $ PID.map'符號(?)文件。格式爲「Startaddr大小名稱\ n」。這個文件必須可以被'perf report' – osgx

+1

讀取,這裏是perf補丁:https://lkml.org/lkml/2009/6/8/499「perf report:添加對分析JIT生成代碼的支持」 – osgx

回答

3

要分析JIT編譯的代碼的性能計數器統計使用perf,下載,編譯並安裝perf-map-agent庫,然後(對於java代碼)將 -agentpath:<path>/libperfmap.so添加到命令行。

對於非java代碼,只要生成/tmp/perf-$pid.map符號映射文件,perf 將在生成perf報告時使用這些代碼。

布倫丹格雷格有一個blog post有相關的參考文獻。

+0

seacoder,謝謝。 '/ tmp/perf- $ pid.map'的格式是什麼?何時perf訪問它,在'record'中,'record'或'report'子命令之後?我怎樣才能反彙編JIT生成的代碼? – osgx

+2

映射文件在每行上包含格式爲

+0

seacoder,我可以通過perf報告訪問靜態機器代碼的反彙編,但不能訪問JIT生成的代碼。由JIT製作的代碼在執行報告時被刪除,並且該機器代碼的副本不被保存。 – osgx