一、Oprofile
本文分析说明一下Oprofile,Oprofile工具是一个低开销的适应于Linux系统的多平台支持的性能测试工具。Oprofile较高版本中使用工具operf替代了opcontrol。operf可以直接采集用户态和内核态与性能相关的数据,而不再需要内核模块的支持。
在这个工具集里还有几个相关的辅助工具,如opgprof和opreport。前者用来生成与gprof格式的报告,而后者用来生成采样汇总的报告。
二、安装
安装Oprofile工具的方法也很简单,运行下面的命令:
sudo apt-get install oprofile
安装完成后,则可以直接使用上述的工具。
三、使用方法
Operf工具的应用方法如下:
operf [ options ] [ --system-wide | --pid=<PID> | [ command [ args ] ] ]
具体的说明如下:
1、command [args]
要分析的命令或应用程序。[args]是命令或应用程序所需的输入参数。需要注意的是,–pid和–system-wide命令,不能同时使用。
2、–pid / -p [PID]
分析正在运行的进程的ID,可以使用ctrl+c来终止任务
3、–system-wide / -s
这个选项用来进行系统范围内的配置方式,需要使用root权限才能运行。需要注意的是,保存相关结果数据时尽量在普通用户可访问的位置
4、–callgraph / -g
此选项允许在分析过程中保存调用图。注意:调用堆栈的深度不受限
更多的应用参看官网文档:
https://oprofile.sourceforge.io/doc/
四、具体示例
使用与上一个相同的测试程序:
1、启动测试
//start app
./bin/ccore
//get pid
ps -ef|grep ccore #174520
//start operf
sudo operf --pid 174520
operf: Press Ctl-c or 'kill -SIGINT 174620' to stop profiling
operf: Profiler started
^C #执行到预期
Profiling done.
2、生成报告
#执行命令
opreport
Using /home/oprofile_data/samples/ for samples directory.
CPU: Intel Architectural Perfmon, speed 4800 MHz (estimated)
Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (No unit mask) count 100000
CPU_CLK_UNHALT...|
samples| %|
------------------
1012 100.000 controlCore
CPU_CLK_UNHALT...|
samples| %|
------------------
314 31.0277 kallsyms
198 19.5652 libsdbus-c++.so.1.1.0
132 13.0435 libc.so.6
112 11.0672 controlCore
112 11.0672 libsystemd.so.0.32.0
107 10.5731 libstdc++.so.6.0.30
32 3.1621 libglog.so.0.7.0
3 0.2964 [vdso] (tgid:174520 range:0x7ffd74e9c000-0x7ffd74e9dfff)
2 0.1976 ld-linux-x86-64.so.2
这个工具在不同的平台应用可能有些细节上的依赖不同,需要大家自行处理。
五、总结
Oprofile这个工具功能非常强大,特别是在不同的硬件平台上支持的也不错。但一般来说,越是平台支持好的,可能在不同的平台上使用上都可能需要一些硬件的支持,应用时一定注意。

206

被折叠的 条评论
为什么被折叠?



