分类: LINUX
2012-10-24 13:32:56
内核模块(oprofile.ko):负责访问性能技术器或者基于时间采样的函数(使用register_timer_hook注册之,使时钟中断处理程序最后执行profile_tick时可以访问之),并采样置于内核的缓冲区内。
用户空间的守护进程(oprofiled):在后台运行,负责从内核空间收集数据,写入文件。
2. oprofile工具描述
op_help:列出可用的事件,并带有简短的描述
opcontrol:控制oprofile的数据收集
oprofpp: 检索有用的评测数据
op_time: 为系统上的所有映像列出相关的评测值
op_to_source: 产生带注解的源文件、汇编文件或源文件和汇编文件的混合
op_merge: 合并属于同一个应用程序的采样文件
op_import: 将采样数据库文件从外部格式(abi)转换为本地格式
3. 安装oprofile
内核支持
步骤一:增加内核选项支持。
在 .config 文件中设置CONFIG_PROFILING=y和CONFIG_OPROFILE=y。 另外,还要在 Processor type and features 菜单中启用 Local APIC 和 IO-APIC。
步骤二:重新编译内核。
编译完成后,在linux-2.6.34.10/arch/powerpc/oprofile/目录下会生成oprofile.ko。将oprofile.ko拷贝到目标ppc板上加载。
l 用户空间支持
方法1:在开源网站上下载oprofile的安装tar包。为了配置和安装oprofile工具,键入如下语句:
点击(此处)折叠或打开
方法2:很多交叉编译工具链都自带的有oprofile工具,直接将其拷贝到目标板即可。
内核和用户空间支持完成后,加载新编译的uImage,系统启动之后将oprofile.ko opcontrol ophelp opreport oprofiled拷贝到目标板上对应目录下即可开始使用oprofile了。
4. Oprofile使用
ophelp -r #查看CPU类型
ophelp #列出支持的event
opcontrol --list-events #与ophelp同,列出支持的event
步骤一:opcontrol监视内核,并且载入oprofile内核模块,创建/dev/oprofile目录
点击(此处)折叠或打开
步骤二:收集数据
点击(此处)折叠或打开
5. 问题解决
问题一:运行./opcontrol –init提示can't open '/dev/oprofile/cpu_type': No such file or directory
分析:我们的开发板的cpu是ppc的e500mc,oprofile的默认配置文件里没有这个type。
解决:我们的交叉编译工具LTIB的oprofile专门为e500mc的类型打了patch,只需将/opt/ltib/ltib-e500mc-20110128/rootfs/usr/share/oprofile/ppc/e500mc下的配置文件拷贝到目标板对应目录即可。
问题二:oprofile抓不到采样数据,opreport error: No sample file found: try running opcontrol --dump
分析
#dmesg | grep oprofile
oprofile: using NMI timer interrupt.
如果你的CPU不被oprofile认识,或者认识有问题,oprofile就会进入timer interrupt模式,表现就是:
点击(此处)折叠或打开
解决:在oprofile模块加载的时候强制使用timer=1.
点击(此处)折叠或打开
如果看到上面的字说明问题已经解决了。
6. 注意事项
使用oprofile一定要先保证系统中有objdump
oprofile不能在VMware环境中使用性能计数器。
oprefile包含在linux 2.5和更高版本的内核中。
oprofile貌似不能再x86_64环境下运行。即使linux内核满足要求。
oprofile各个版本间的工具名有差异,运行参数也有差异。