1.Gprof
Gprof实现原理:
通过在编译和链接你的程序的时候(使用 -pg 编译和链接选项),gcc 在你应用程序的每个函数中都加入了一个名为mcount ( or “_mcount” , or “__mcount” , 依赖于编译器或操作系统)的函数,也就是说你的应用程序里的每一个函数都会调用mcount, 而mcount 会在内存中保存一张函数调用图,并通过函数调用堆栈的形式查找子函数和父函数的地址。这张调用图也保存了所有与函数相关的调用时间、调用次数等等的所有信息。
(1)gcc -pg -o myexe myexe.c
(2)./myexe ->生成gmon.out
(3)gprof myexe|less) kprof
http://hi.baidu.com/daisycheung/blog/item/72c0f9276465690f908f9df2.html
2.Oprofile
Oprofile原理:
oprofile和Intel的VTune类似,都是利用CPU提供的性能计数功能对系统进行profiling. CPU提供一些性能计数器,经过配置可以对各种事件进行计数,当超过一定的threshold,会发出NMI中断,中断处理程序可以记录下当前的PC,current task等信息。用户可以对其dump进行分析。
采样往往会对系统性能带来一些影响(想想测不准原理),oprofile带来的影响为1%-8%,还好。特别是考虑到它可能是唯一能提供你所需要的信息的工具。
OProfile使用了(1)一个内核模块和(2)一个用户空间守护进程,前者可以访问性能计数寄存器,后者在后台运行,负责从这些寄存器中收集数据。在启动守护进程之前,OProfile 将配置事件类型以及每种事件的样本计数(sample count)。如果没有配置任何事件,那么 OProfile 将使用 Linux on POWER 上的默认事件,即 CYCLES,该事件将对处理器循环进行计数。事件的样本计数将决定事件每发生多少次计数器才增加一次。OProfile 被设计成可以在低开销下运行,从而使后台运行的守护进程不会扰乱系统性能。
与OProfile内核支持一起提供的还有(3)一些与内核交互的用户空间工具以及分析收集到的数据的工具。如前所述,OProfile守护进程收集样本数据。控制该守护进程的工具称作 opcontrol。需要注意的是oprofile不支持虚拟机,即使运行正确也opreport得不到任何的结果。
对于禁用中断的代码,OProfile 不能对其进行分析。
profile--->oprofile--->VTune(intel)
oprofile:opcontrol opreport opannotate ; opgprof oparchive
主要用于系统调优,是找hotspot的很不错的工具。
top只能采样到进程一级,
oprofile可以深入到指令一级,这是它最大的优势。
<1>.初始化: opcontrol --init 加载oprofile模块
(1)opcontrol --reset
(2)opcontrol --no-vmlinux
(3)opcontrol -i ./your_binary_program
<2>.配置: (4)opcontrol --setup (-e)--event=name:count:unitmask:kernel:user
<3>.启动: (5)opcontrol --start
<4>.运行程序: (6)./your_binary_program
<5>.取出数据: (7)opcontrol --dump
opcontrol --stop
(8)opcontrol --shutdown
(9)opcontrol --deinit 卸载oprofile模块
[Note]:标序号的是常用的!
<6>.分析结果: opreport -l ./your_binary_program
opreport -d ./your_binary_program
or
opannotate --source --output-dir=/path/to/annotated-source ./your_binary_program (built it with -g,produce some annotated source)
or
opreport (look at the rankings of the various system components as a whole)
References:
http://hi.baidu.com/daisycheung/blog/item/f295681fa1bff56ff724e4f3.html
oprofile的manual
oprofile的使用
工具分析linux内核及模块使用方法.html
http://blog.chinaunix.net/u/30686/showart_264903.html
http://www.ibm.com/developerworks/linux/library/l-oprof.html
3.Valgrind
debugging and profiling programs用的不多,可参见
http://hi.baidu.com/timegoneby/blog/item/ffaad71790bf060dc93d6dd6.html
4.strace pstrace ltrace
这个是看系统调用的,有时可以定位程序出错的原因,经常用
5.在Kernel方面stap(systemtap)
阅读(4954) | 评论(0) | 转发(0) |