Oprofile:CPU性能分析工具指南
2015-07-31 14:45
471 查看
http://www.oenhan.com/oprofile-cpu-analysis
在平台升级中经常碰到自测时性能指标没有问题,而平台转到产品业务部门匹配测试时就出了问题.如果是功能异常的问题,一般还是很好处理的,但如果碰到系统的性能问题,如CPU升高,内存使用超标,就比较不好搞了,老虎吞天,没有目标,一个版本几十万行代码一行行看,绝对能累死,尤其是内核组.
幸好开源界的风气好,提供了各种工具,本文主要介绍Oprofile工具,适用系统的CPU性能分析,最主要它能深入内核函数,这是很多用户态工具达不到的地方.
一、基本原理
根据CPU架构采样的触发有两种模式:
1) NMI模式: 利用处理器的performance counter功能, 指定counter的类型type和累进数量count. 比如, type=DTLB_MISS, count=500, 代表”Data TLB miss”每发生500次, 会触发一次中断. Oprofile.ko模块会相应这个中断, 然后看当前正在执行的是什么指令,那个函数, 那个模块(或者app, lib), 并进行计数. 不同的处理器支持的counter类型和count取值范围各不相同. 可以通过ophelp来查看当前cpu所支持的counter类型和参数.
例如, “–event=MISALIGN_MEM_REF:1000:0:1:0″表示非对齐的内存访问, 每1000次触发一个中断, 1000后面的0表示改特定counter的mask, 具体含义看ophelp的内容; 最后的1:0表示只对kernel采样, 不对用户空间程序采样. “–event=CPU_CLK_UNHALTED:10000:0:1:0″代表cpu时钟周期事件.每10000个cycle触发一次中断. “–event=L1I_MISSES:500:0:1:0″表示一级指令缓存的cache miss.
2) Timer Interrupt模式: 在没有performance counter支持的情况下(例如Vmware虚拟机下), 可以利用时钟中断来采样. 这时候就没有performance counter的概念了. 或者可以当成近似的cpu时钟周期事件. 要使用timer interrupt模式, 需要在加载oprofile.ko模块的时候,传递”timer=1″参数. modprobe oprofile timer=1
二、快速操作
1.首先要安装了Oprofile,具体版本适用不同,请自行Google
2.准备获取有debuginfo信息的内核文件vmlinux,具体方法请点入链接,这个vmlinux应该是用和环境内核完全一致的代码编译出来的
3.初始化oprofile,可以通过demsg查看oprofile使用的是哪一种模式:
帮助
4.开始获取CPU采样
帮助
5.这个时候启动需要监控的程序,如果是内核,就直接sleep一段时间即可
6.停止采样
帮助
7.获取采样信息
帮助
这个样子就可以获取系统的CPU主要耗费在哪个函数上了,从上面的示例可以看到内核CPU主要在fb_deferred_io_fault和native_read_tsc函数上,就可对症下药,缩小问题排查范围。
oprofile还有很多参数,包括事件采样的配置等直接参考man手册吧。
关于oprofile代码调优的文章推荐阅读:
用 OProfile 彻底了解性能
利用Oprofile对多核多线程进行性能分析
在平台升级中经常碰到自测时性能指标没有问题,而平台转到产品业务部门匹配测试时就出了问题.如果是功能异常的问题,一般还是很好处理的,但如果碰到系统的性能问题,如CPU升高,内存使用超标,就比较不好搞了,老虎吞天,没有目标,一个版本几十万行代码一行行看,绝对能累死,尤其是内核组.
幸好开源界的风气好,提供了各种工具,本文主要介绍Oprofile工具,适用系统的CPU性能分析,最主要它能深入内核函数,这是很多用户态工具达不到的地方.
一、基本原理
根据CPU架构采样的触发有两种模式:
1) NMI模式: 利用处理器的performance counter功能, 指定counter的类型type和累进数量count. 比如, type=DTLB_MISS, count=500, 代表”Data TLB miss”每发生500次, 会触发一次中断. Oprofile.ko模块会相应这个中断, 然后看当前正在执行的是什么指令,那个函数, 那个模块(或者app, lib), 并进行计数. 不同的处理器支持的counter类型和count取值范围各不相同. 可以通过ophelp来查看当前cpu所支持的counter类型和参数.
例如, “–event=MISALIGN_MEM_REF:1000:0:1:0″表示非对齐的内存访问, 每1000次触发一个中断, 1000后面的0表示改特定counter的mask, 具体含义看ophelp的内容; 最后的1:0表示只对kernel采样, 不对用户空间程序采样. “–event=CPU_CLK_UNHALTED:10000:0:1:0″代表cpu时钟周期事件.每10000个cycle触发一次中断. “–event=L1I_MISSES:500:0:1:0″表示一级指令缓存的cache miss.
2) Timer Interrupt模式: 在没有performance counter支持的情况下(例如Vmware虚拟机下), 可以利用时钟中断来采样. 这时候就没有performance counter的概念了. 或者可以当成近似的cpu时钟周期事件. 要使用timer interrupt模式, 需要在加载oprofile.ko模块的时候,传递”timer=1″参数. modprobe oprofile timer=1
二、快速操作
1.首先要安装了Oprofile,具体版本适用不同,请自行Google
2.准备获取有debuginfo信息的内核文件vmlinux,具体方法请点入链接,这个vmlinux应该是用和环境内核完全一致的代码编译出来的
3.初始化oprofile,可以通过demsg查看oprofile使用的是哪一种模式:
帮助
帮助
6.停止采样
帮助
帮助
oprofile还有很多参数,包括事件采样的配置等直接参考man手册吧。
关于oprofile代码调优的文章推荐阅读:
用 OProfile 彻底了解性能
利用Oprofile对多核多线程进行性能分析
相关文章推荐
- 架构设计与概要设计的区别
- heartbeat实现web高可用
- context:property-placeholder
- fread,fwrite,fopen,fclose ,fseek用法
- 使用vs中的工具进行架构比较
- weblogic部署应用,访问控制台就报内存溢出
- Centos安装pycurl
- 红帽企业虚拟化管理平台RHEVM安装指南(精简版)
- Linux基金会新近成立的云原生计算基金会隐藏着什么名堂?
- Linux基金会新近成立的云原生计算基金会隐藏着什么名堂?
- 在centos7 ubuntu15.04 上通过bosh-lite 搭建单机环境cloudfoundry
- linux shell的使用
- Linux设备驱动第七篇:高级字符驱动操作之阻塞IO
- Linux设备驱动第七篇:高级字符驱动操作之阻塞IO
- CentOS7安装性能监控系统
- 多校第四场 1010 hdu 5336 XYZ and Drops(bfs+模拟)
- 将linux英文系统变成中文系统
- linux下mysql常用的命令
- PropertyPlaceholderConfigurer的使用
- Linux Deepin 2014 cpu温度与频率设定