早就想试试oprofile,这几天简单的试了一下最基本的功能。
由于条件限制只能在虚拟机上实验。
1. 下载oprofile工具,加压后编译,安装
./configure --with-kernel-support
make
make install
2. 加载模块
insmod /lib/modules/kernel/xxx/arch/x86/oprofile/oprofile.ko timer=1
虚拟机的cpu上没有计数器,所以只能用时钟中断timer=1
3. 测试代码性能
[root@localhost app]# opcontrol --init
[root@localhost app]# opcontrol --vmlinux=/home/ping/works/linux/linux-2.6.37/vmlinux
[root@localhost app]# opcontrol --start
Using 2.6+ OProfile kernel interface.
Reading module info.
Using log file /var/lib/oprofile/samples/oprofiled.log
Daemon started.
Profiler running.
[root@localhost app]# ./01
[root@localhost app]# opcontrol --stop
Stopping profiling.
[root@localhost app]# opcontrol --shutdown
Killing daemon.
[root@localhost app]# opannotate --source 01
[root@localhost app]# opreport
CPU: CPU with timer interrupt, speed 0 MHz (estimated)
Profiling through timer interrupt
------------------
[root@localhost app]# opcontrol --deinit
Stopping profiling.
Killing daemon.
Unloading oprofile module
4. 总结
177 86.7647 : for (i=0;i<0xffffff;i++) 本条语句运行177个时钟中断
27 13.2353 : j++; 本条语句运行27个中断
基本用法算是掌握,但是用时钟中断计数不太准,所以在虚拟机上也就是试试用法。