gprof是GNU的profiling工具,使用的时候需要编译期的支持
使用:
1 编译:时需要使用"-pg"选项
$cc -g -c myprog.c utils.c -pg $cc -o myprog myprog.o utils.o -pg如果加上了"-g"选项(如上),则可以支持Line-by-line Profiling
2 运行: 执行生成的可执行文件(比如上面的myprof), 这时会生成一个"gmon.out"的文件
3 查看: 用gprof 查看profiling结果
$gprof myprof | more参考:
gprof Quick-Start Guide
perf
perf是Linux下非常强大的profiling工具,也非常好用.
perf类似于git那样,有一堆子命令,比较常用的有record,report,annotate,stat等.
运行一个程序foo并记录下profile(默认为perf.data):
$ sudo perf record ./foo读取刚才生成的profile结果(默认perf.data)并显示分析结果:
$ sudo perf report输出结果类似
49.97% foo filter_bench [.] main 5.31% foo libc-2.12.1.so [.] 0x7aeab 0.36% foo libstdc++.so.6.0.15 [.] operator new[](unsigned long)注意这里libc-2.12.1.so中的symbol没有被load进来,所以无法显示具体的函数名而只能看见一个入口地址0x7aeab.
在ubuntu/debian上你可以安装libc6-dbg(注意不是libc6-dev)帮助gdb,perf这样的工具traceback.libc6-dbg包含了libc6的debug信息
$ apt-get install libc6-dbg显示annotated code
$ sudo perf annotate运行一个命令并查看硬件counter:
$ perf stat --repeat 10 -e cycles:u \ -e instructions:u -e l1-dcache-loads:u -e l1-dcache-load-misses:u ./foo查看所有支持的硬件counter:
$ perf list参考:
Linux kernel profiling with perf
OProfile
OProfile利用硬件支持来profile系统或者application. 与gprof不同,OProfile不会在binary中添加指令
启动:
1 加载oprofile
$sudo opcontrol --init2 设置是否需要profile kernel,如果需要
$sudo opcontrol --vmlinux=/boot/vmlinux-`uname -r`如果不需要
$sudo opcontrol --no-vmlinux3 开始采集数据
$sudo opcontrol --start Using default event: CPU_CLK_UNHALTED:100000:0:1:1 Using 2.6+ OProfile kernel interface. Using log file /home/apc999/tempsession/samples/oprofiled.log Daemon started. Profiler running.4 查看oprofile状态
$sudo opcontrol --status Daemon running: pid 13892 Separate options: none vmlinux file: none Image filter: none Call-graph depth: 05 结束采集数据
$sudo opcontrol --stop6 结束oprofile daemon
$sudo opcontrol --shutdown
参考:
OProfile Manual
No comments:
Post a Comment