OProfile是Linux平台支持的一款功能强大的性能分析工具。网络上很多关于如何安装在虚拟机上安装OProfile的文章,但很多都存在这样或那样的问题。现经本人整理和实验后,其在Linux上虚拟机上的安装过程如下:
①、安装虚拟机
为了保证虚拟机能够正常启动,在安装虚拟机的过程中,请将磁盘模式设置为IDE。否则,升级内核后,将会报"pci 18.2: no compatible bridge window for [io 0xf000-0xffff]"错误,且无法启动虚拟机!
图1 设置磁盘模式
②、配置内核
内核的配置可参考博文《Linux内核升级》,配置完成后,再对内核配置文件.config进行如下修改:
// 加上OPROFILE配置
CONFIG_PROFILING=y
CONFIG_OPROFILE=m(注:m表示编译为模块,y表示编译到内核中)
CONFIG_OPROFILE_EVENT_MULTIPLEX=y
// 加上APIC配置
CONFIG_X86_IO_APIC=y
CONFIG_X86_LOCATE_APIC=y
CONFIG_PCI_IOAPIC=y
③、内核替换
有了①、②的配置之后,便可进行内核的编译和替换了(注:可参考博文《Linux内核升级》)
④、其他配置
内核升级完成后,这时使用OProfile会报如下错误:
#opreport -l ./a.out
Overflow stats not available
error: no sample files found: profile specification too strict?
解决方案:
#opcontrol --deinit
#modprobe oprofile timer=1
#echo "options oprofile timer=1" >> /etc/modprobe.conf
⑤、执行过程
// 加载模块
#opcontrol --init
// 是否对内核进行测试(一般不测试内核)
#opcontrol --no-vmlinux
// 重置测试数据
#opcontrol --reset
// 开始
#opcontrol --start
// 运行程序(注:可执行文件编译时,需加上编译选项-g)
#./a.out
// 把收集到的数据写入文件
#opcontrol --dump
// 停止
#opcontrol --stop
// 关闭守护进程
#opcontrol --shutdown
// 卸载模块
#opcontrol --deinit
// 源码时间分析
#opannotate --source ./a.out
// 生成测试报告
#opreport -l ./a.out
—— 邹祁峰
2012.12.03