Is there a way to find performance of individual functions in a process using perf tool?

安稳与你 提交于 2021-02-18 22:25:50

问题


I am trying to get performance of individual functions within a process. How can I do it using perf tool? Is there any other tool for this?

For example, let's say, main function calls functions A , B , C . I want to get performance of main function as well as functions A,B,C individually .

Is there a good document for understating perf source code?

Thank you.


回答1:


What you want to do is user-land probing. Perf can only do part of it. Try sudo perf top -p [pid] and then watch the scoreboard. It will show the list of functions sorted by CPU usage. Here is an snapshort of redis during benchmark:

perf top profiling redis

If you want to get more infos of your user-land functions, such as IO usage, latency, memory usage, I strongly suggest you to use Systemtap. It is both scripting language and tool for profiling program on Linux kernel-based operation system. Here is a tutorial about it:

http://qqibrow.github.io/performance-profiling-with-systemtap/

And you don't need to be a expert of systemtap scripting, there are many good script online for you. For example, there is an example about using it to find out the latency of specific function.

https://github.com/openresty/stapxx#func-latency-distr




回答2:


See the Perforator tool, which is built for this: https://github.com/zyedidia/perforator.

Perforator uses the same perf_event_open API that perf uses, but also uses ptrace so that profiling can be selectively enabled only for certain regions of a program (such as functions). See the examples at the Github repository for details.




回答3:


perf is documented at https://perf.wiki.kernel.org/index.php/Main_Page with a tutorial at https://perf.wiki.kernel.org/index.php/Tutorial

perf report gives the breakdown by "command", see https://perf.wiki.kernel.org/index.php/Tutorial#Sample_analysis_with_perf_report. perf annotate provides a way to select what commands to report, see "Source level analysis with perf annotate" in https://perf.wiki.kernel.org/index.php/Tutorial#Options_controlling_output_2.



来源:https://stackoverflow.com/questions/27749804/is-there-a-way-to-find-performance-of-individual-functions-in-a-process-using-pe

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!