oprofile使用简介

2018-01-13 11:02:05来源:https://www.jianshu.com/p/e99209a89cbe作者:秋刀鱼杂记人点击

分享
第七城市th7cn

Oprofile使用


1 介绍


Oprofile是linux上的性能监测工具,通过CPU硬件提供的性能计数器对事件进行采样,从代码层面分析程序的性能消耗情况,找出程序性能的问题点。


2 oprofile安装


RHEL6.8GA上直接提供了安装包,配置好yum源直接安装即可。



yum install oprofile



3 oprofile使用


设置检测事件


opcontrol --event=<event-name>:<sample-rate>:<unit-mask>:<kernel>:<user>



各字段含义如下:

























event-name事件名称,如CPU_CLK_UNHALTED,支持的事件列表可以通过opcontrol --list-events命令列出
sample-rate触发一次采样的事件计数值,如100000
unit-mask硬件单元掩码,如0x0F
kernel是否对内核进行监测,取值0或1
user是否对用户空间进行监测,取值0或1

实际检测案例:



opcontrol --event=CPU_CLK_UNHALTED:6000:0x00:0:1 #对core cycle进行profile



开始检测启动


opcontrol --init #加载模块




opcontrol --reset #清除当前会话中的数据




opcontrol --start #开始profiling



注:如果opcontrol –start报错,可以使用以下命令解决



opcontrol --deinit




echo 0 > /proc/sys/kernel/nmi_watchdog



保存检测数据

程序业务执行完成后,使用下面的命令将监测数据转储下来:



opcontrol --dump #把收集到的数据写入文件



停止检测


opcontrol –stop #停止profiling




opcontrol –shutdown #关闭守护进程oprofiled




opcontrol –deinit #卸载模块



4 oprofile其他用法


除了监测事件以外,oprofile还提供了以下的使用


是否监测内核文件

当要对内核进行监测时,需要指定内核的文件路径,使用下面的命令(其中file为内核文件完整路径):



opcontrol --vmlinux=file



如果不需要对内核进行性能监测,则此处直接使用--no-vmlinux参数:



opcontrol --no-vmlinux



设置监测数据分离方式


opcontrol --separate=<choice>



<choice> 有几下几个参数:





















nonedo not separate the profiles (default)
librarygenerate per-application profiles for libraries
kernelgenerate per-application profiles for the kernel and kernel modules
allgenerate per-application profiles for libraries and per-application profiles for the kernel and kernel modules

例:



Opcontrol --separate=library



oprofile更多用法使用opcontrol –help查看

5 性能数据分析


监测数据转储后,即可以通过opreportopannotate命令查看性能消耗情况了。


1) 显示各模块整体的性能消耗情况



opreport



2) 显示各函数的性能消耗情况



opreport -l



3) 显示代码级别的性能消息情况



opannotate -s



6 脚本实例
下面的脚本是以前测试过程中临时写的,采集的思路可供参考。


LOGFILE="/tmp/OProfile_LOG"
DURATION=600
echo "start OProfile ($DURATION s)"
echo "set up OProfile"
opcontrol --deinit 2>> $LOGFILE -- 加载
modprobe oprofile timer=1
opcontrol --setup --vmlinux=/usr/lib/debug/lib/modules/`uname -r`/vmlinux -- 设置跟踪vmlinux
opcontrol -c 0
opcontrol –reset --清空当面的信息
echo "start OProfile"
opcontrol --start >> $LOGFILE 2>&1 -- 开始跟踪
sleep $DURATION
echo "shutdown OProfile"
opcontrol --shutdown >> $LOGFILE 2>&1 -- 结束跟踪
echo "report OProfile"
opreport -l > $OUTDIR/opreport_-l.txt 2>> $LOGFILE --以函数的角度显示检测结果
echo "oprofile temp data size: $(du -sh /var/lib/oprofile)"
echo "cleanup OProfile"
opcontrol --reset
opcontrol --deinit 2>> $LOGFILE
echo "finish OProfile"

参考文献


http://hutaow.com/blog/2013/12/29/performance-analysis-with-oprofile/

注:如需转载,请标注出处。





第七城市th7cn

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台