SlideShare a Scribd company logo
1 of 16
Download to read offline
Oprofile
系统层面的性能微调工具
褚霸
核心系统数据库组
chuba@taobao.com
http://yufeng.info
2010/11/15
用途及关键特性
非侵入式,无需重新编译系统.
整个系统层面的Profile, All code is profiled.
利用硬件计数器.
低overhead.
OProfile is a system-wide profiler for Linux systems, capable of
profiling all running code at low overhead.
Oprofile系统工作流图
安装(RHEL5U4)
首先需要安装内核符号信息
rpm -i kernel-debuginfo-common-2.6.18-164.el5.x86_64.rpm
rpm -i kernel-debuginfo-2.6.18-164.el5.x86_64.rpm
安装好的vmlinux在这里:
/usr/lib/debug/lib/modules/2.6.18-164.el5/vmlinux
Oprofile发行版内置的,无需安装,最新版本0.9.6
文档: man oprofile
官方网站: http://oprofile.sourceforge.net/news/
确定观察什么
Oprofile在Nehalem CPU上可以观测的事件列表:
opcontrol --list-events
设置事件:
opcontrol --setup --event=name:count:unitmask:kernel:user --
event=xxxx
常用的事件有以下几种:
CPU_CLK_UNHALTED: CPU执行时间
LLC_MISSES: 末级Cache miss
DTLB_MISSES: 数据TLB miss
准备我们的程序
我们的程序,包括内核驱动都需要有符号信息:
应用程序这样编译:
gcc -g foo.c ...
查看内核的导出的符号信息:
cat /proc/kallsyms
初始化Oprofile
# 加载oprofile内核模块
opcontrol --init
#我们对内核的取样没兴趣
opcontrol --setup --no-vmlinux
#我们需要内核的取样
opcontrol --setup --vmlinux=/usr/lib/debug/lib/modules/2.6.18-164.
el5/vmlinux
采样数据
#在开始收集采样数据前回顾下我们的设置
opcontrol --status
#清除上一次采样到的数据
opcontrol --reset
#启动oprofiled守护程序,从内核中拉出采样数据
opcontrol --start
#运行我们的程序
./foo
#中途收集采样数据
opcontrol --dump
#关闭守护程序, 同时准备好采样的数据
opcontrol --shutdown
采样报告
#系统级别的
opreport --long-filenames
#模块级别的
opreport image:foo -l
#源码级别的
opannotate image:foo -s
最常用的命令
opcontrol --init
opcontrol --setup --no-vmlinux
opcontrol --status
opcontrol --start
opcontrol --dump
opcontrol --shutdown
opcontrol --reset
opreport --long-filenames
opreport image:filename -l
opannotate image:filename -s
实例演示-代码(ex1.c)
#include <string.h>
const char* find_str(const char* s, int l){
const char* e = s+l;
while(s <e) {
if(*s == '<') return s;
s++;
}
}
int main(int argc, char* argv[]) {
char*s = argv[1];
int i, l;
if(argc ==1) return -1;
l=strlen(s);
for(i = 0; i < 100000000; i++) find_str(s, l);
return 0;
}
一步步来看下实际效果
opcontrol --setup -e CPU_CLK_UNHALTED:6000:0:0:1
opcontrol --status
opcontrol --reset && opcontrol --start
time ./ex1 helloworld
opcontrol --shutdown
opannotate image:/home/wentong/ex1 -s
opreport --long-filenames
opannotate image:/home/wentong/ex1 -s
参考
http://oprofile.sourceforge.net/examples/
http://people.redhat.com/wcohen/Oprofile.pdf
谢谢大家!
Any question?

More Related Content

What's hot

Bypat博客出品-利用cent os快速构建自己的发行版
Bypat博客出品-利用cent os快速构建自己的发行版Bypat博客出品-利用cent os快速构建自己的发行版
Bypat博客出品-利用cent os快速构建自己的发行版redhat9
 
使用Rpm&yum进行基础软件管理
使用Rpm&yum进行基础软件管理使用Rpm&yum进行基础软件管理
使用Rpm&yum进行基础软件管理haiyuan ning
 
如何在Aix上运行prm for oracle database
如何在Aix上运行prm for oracle database如何在Aix上运行prm for oracle database
如何在Aix上运行prm for oracle databasemaclean liu
 
Introduction to Nand Flash interface (chinese)
Introduction to Nand Flash interface (chinese)Introduction to Nand Flash interface (chinese)
Introduction to Nand Flash interface (chinese)Sneeker Yeh
 
makefile20141121
makefile20141121makefile20141121
makefile20141121Kevin Wu
 
Kick start无人值守批量安装linux
Kick start无人值守批量安装linuxKick start无人值守批量安装linux
Kick start无人值守批量安装linuxYiwei Ma
 
利用Cent Os快速构建自己的发行版
利用Cent Os快速构建自己的发行版利用Cent Os快速构建自己的发行版
利用Cent Os快速构建自己的发行版xingsu1021
 
My sql 5.5 innodb xtradb 性能诊断与优化
My sql 5.5 innodb xtradb 性能诊断与优化My sql 5.5 innodb xtradb 性能诊断与优化
My sql 5.5 innodb xtradb 性能诊断与优化YUCHENG HU
 
Nagios的安装部署和与cacti的整合(linuxtone)
Nagios的安装部署和与cacti的整合(linuxtone)Nagios的安装部署和与cacti的整合(linuxtone)
Nagios的安装部署和与cacti的整合(linuxtone)Yiwei Ma
 
C/C++调试、跟踪及性能分析工具综述
C/C++调试、跟踪及性能分析工具综述C/C++调试、跟踪及性能分析工具综述
C/C++调试、跟踪及性能分析工具综述Xiaozhe Wang
 
附錄--Anaconda installation
附錄--Anaconda installation附錄--Anaconda installation
附錄--Anaconda installation艾鍗科技
 
Oraliux+mysql5单机多实例安装文档
Oraliux+mysql5单机多实例安装文档Oraliux+mysql5单机多实例安装文档
Oraliux+mysql5单机多实例安装文档xuebao_zx
 
Sery lvs+keepalived
Sery lvs+keepalivedSery lvs+keepalived
Sery lvs+keepalivedcolderboy17
 
Install Oracle11g For Aix 5 L
Install Oracle11g For Aix 5 LInstall Oracle11g For Aix 5 L
Install Oracle11g For Aix 5 Lheima911
 
Linux基础
Linux基础Linux基础
Linux基础zhuqling
 
Raspberry Pi 智能風扇
Raspberry Pi 智能風扇Raspberry Pi 智能風扇
Raspberry Pi 智能風扇艾鍗科技
 
U boot 程式碼打掃計畫
U boot 程式碼打掃計畫U boot 程式碼打掃計畫
U boot 程式碼打掃計畫Macpaul Lin
 

What's hot (20)

Bypat博客出品-利用cent os快速构建自己的发行版
Bypat博客出品-利用cent os快速构建自己的发行版Bypat博客出品-利用cent os快速构建自己的发行版
Bypat博客出品-利用cent os快速构建自己的发行版
 
使用Rpm&yum进行基础软件管理
使用Rpm&yum进行基础软件管理使用Rpm&yum进行基础软件管理
使用Rpm&yum进行基础软件管理
 
Linux chapt3
Linux chapt3Linux chapt3
Linux chapt3
 
如何在Aix上运行prm for oracle database
如何在Aix上运行prm for oracle database如何在Aix上运行prm for oracle database
如何在Aix上运行prm for oracle database
 
Introduction to Nand Flash interface (chinese)
Introduction to Nand Flash interface (chinese)Introduction to Nand Flash interface (chinese)
Introduction to Nand Flash interface (chinese)
 
makefile20141121
makefile20141121makefile20141121
makefile20141121
 
Kick start无人值守批量安装linux
Kick start无人值守批量安装linuxKick start无人值守批量安装linux
Kick start无人值守批量安装linux
 
利用Cent Os快速构建自己的发行版
利用Cent Os快速构建自己的发行版利用Cent Os快速构建自己的发行版
利用Cent Os快速构建自己的发行版
 
My sql 5.5 innodb xtradb 性能诊断与优化
My sql 5.5 innodb xtradb 性能诊断与优化My sql 5.5 innodb xtradb 性能诊断与优化
My sql 5.5 innodb xtradb 性能诊断与优化
 
Nagios的安装部署和与cacti的整合(linuxtone)
Nagios的安装部署和与cacti的整合(linuxtone)Nagios的安装部署和与cacti的整合(linuxtone)
Nagios的安装部署和与cacti的整合(linuxtone)
 
Linux firewall
Linux firewallLinux firewall
Linux firewall
 
C/C++调试、跟踪及性能分析工具综述
C/C++调试、跟踪及性能分析工具综述C/C++调试、跟踪及性能分析工具综述
C/C++调试、跟踪及性能分析工具综述
 
附錄--Anaconda installation
附錄--Anaconda installation附錄--Anaconda installation
附錄--Anaconda installation
 
Oraliux+mysql5单机多实例安装文档
Oraliux+mysql5单机多实例安装文档Oraliux+mysql5单机多实例安装文档
Oraliux+mysql5单机多实例安装文档
 
Sery lvs+keepalived
Sery lvs+keepalivedSery lvs+keepalived
Sery lvs+keepalived
 
Linux
LinuxLinux
Linux
 
Install Oracle11g For Aix 5 L
Install Oracle11g For Aix 5 LInstall Oracle11g For Aix 5 L
Install Oracle11g For Aix 5 L
 
Linux基础
Linux基础Linux基础
Linux基础
 
Raspberry Pi 智能風扇
Raspberry Pi 智能風扇Raspberry Pi 智能風扇
Raspberry Pi 智能風扇
 
U boot 程式碼打掃計畫
U boot 程式碼打掃計畫U boot 程式碼打掃計畫
U boot 程式碼打掃計畫
 

Viewers also liked

Erlang全接触
Erlang全接触Erlang全接触
Erlang全接触Feng Yu
 
高级服务器设计和实现2
高级服务器设计和实现2高级服务器设计和实现2
高级服务器设计和实现2Feng Yu
 
Tsung 压力测试工具
Tsung 压力测试工具Tsung 压力测试工具
Tsung 压力测试工具Feng Yu
 
P2P 设计经验谈
P2P 设计经验谈P2P 设计经验谈
P2P 设计经验谈Feng Yu
 
高级服务器设计和实现1
高级服务器设计和实现1高级服务器设计和实现1
高级服务器设计和实现1Feng Yu
 
高级服务器设计和实现3
高级服务器设计和实现3高级服务器设计和实现3
高级服务器设计和实现3Feng Yu
 
Cap 理论与实践
Cap 理论与实践Cap 理论与实践
Cap 理论与实践james tong
 
MySQL和IO(上)
MySQL和IO(上)MySQL和IO(上)
MySQL和IO(上)Feng Yu
 
了解集群
了解集群了解集群
了解集群Feng Yu
 
利用新硬件提升数据库性能
利用新硬件提升数据库性能利用新硬件提升数据库性能
利用新硬件提升数据库性能Feng Yu
 
mnesia脑裂问题综述
mnesia脑裂问题综述mnesia脑裂问题综述
mnesia脑裂问题综述Feng Yu
 
低成本和高性能MySQL云架构探索
低成本和高性能MySQL云架构探索低成本和高性能MySQL云架构探索
低成本和高性能MySQL云架构探索Feng Yu
 
Flash存储设备在淘宝的应用实践
Flash存储设备在淘宝的应用实践Flash存储设备在淘宝的应用实践
Flash存储设备在淘宝的应用实践Feng Yu
 
SSD在淘宝的应用实践
SSD在淘宝的应用实践SSD在淘宝的应用实践
SSD在淘宝的应用实践Feng Yu
 
Cpu高效编程技术
Cpu高效编程技术Cpu高效编程技术
Cpu高效编程技术Feng Yu
 
MySQL和IO(下)
MySQL和IO(下)MySQL和IO(下)
MySQL和IO(下)Feng Yu
 
了解IO协议栈
了解IO协议栈了解IO协议栈
了解IO协议栈Feng Yu
 
C1000K高性能服务器构建技术
C1000K高性能服务器构建技术C1000K高性能服务器构建技术
C1000K高性能服务器构建技术Feng Yu
 
Systemtap
SystemtapSystemtap
SystemtapFeng Yu
 
了解IO设备
了解IO设备了解IO设备
了解IO设备Feng Yu
 

Viewers also liked (20)

Erlang全接触
Erlang全接触Erlang全接触
Erlang全接触
 
高级服务器设计和实现2
高级服务器设计和实现2高级服务器设计和实现2
高级服务器设计和实现2
 
Tsung 压力测试工具
Tsung 压力测试工具Tsung 压力测试工具
Tsung 压力测试工具
 
P2P 设计经验谈
P2P 设计经验谈P2P 设计经验谈
P2P 设计经验谈
 
高级服务器设计和实现1
高级服务器设计和实现1高级服务器设计和实现1
高级服务器设计和实现1
 
高级服务器设计和实现3
高级服务器设计和实现3高级服务器设计和实现3
高级服务器设计和实现3
 
Cap 理论与实践
Cap 理论与实践Cap 理论与实践
Cap 理论与实践
 
MySQL和IO(上)
MySQL和IO(上)MySQL和IO(上)
MySQL和IO(上)
 
了解集群
了解集群了解集群
了解集群
 
利用新硬件提升数据库性能
利用新硬件提升数据库性能利用新硬件提升数据库性能
利用新硬件提升数据库性能
 
mnesia脑裂问题综述
mnesia脑裂问题综述mnesia脑裂问题综述
mnesia脑裂问题综述
 
低成本和高性能MySQL云架构探索
低成本和高性能MySQL云架构探索低成本和高性能MySQL云架构探索
低成本和高性能MySQL云架构探索
 
Flash存储设备在淘宝的应用实践
Flash存储设备在淘宝的应用实践Flash存储设备在淘宝的应用实践
Flash存储设备在淘宝的应用实践
 
SSD在淘宝的应用实践
SSD在淘宝的应用实践SSD在淘宝的应用实践
SSD在淘宝的应用实践
 
Cpu高效编程技术
Cpu高效编程技术Cpu高效编程技术
Cpu高效编程技术
 
MySQL和IO(下)
MySQL和IO(下)MySQL和IO(下)
MySQL和IO(下)
 
了解IO协议栈
了解IO协议栈了解IO协议栈
了解IO协议栈
 
C1000K高性能服务器构建技术
C1000K高性能服务器构建技术C1000K高性能服务器构建技术
C1000K高性能服务器构建技术
 
Systemtap
SystemtapSystemtap
Systemtap
 
了解IO设备
了解IO设备了解IO设备
了解IO设备
 

Similar to Oprofile linux

Oracle管理藝術第1章 在Linux作業體統安裝Oracle 11g
Oracle管理藝術第1章 在Linux作業體統安裝Oracle 11gOracle管理藝術第1章 在Linux作業體統安裝Oracle 11g
Oracle管理藝術第1章 在Linux作業體統安裝Oracle 11gChien Chung Shen
 
Aix操作系统培训文档
Aix操作系统培训文档Aix操作系统培训文档
Aix操作系统培训文档lwj2012
 
[精彩回顾]Linux新手教程
[精彩回顾]Linux新手教程[精彩回顾]Linux新手教程
[精彩回顾]Linux新手教程NJU OPEN
 
Install oracle ebs r12.1.1 on OEL5.6 x86(include demo)
Install oracle ebs r12.1.1 on OEL5.6 x86(include demo)Install oracle ebs r12.1.1 on OEL5.6 x86(include demo)
Install oracle ebs r12.1.1 on OEL5.6 x86(include demo)acqua young
 
GNU Autoconf / Automake #1
GNU Autoconf / Automake #1GNU Autoconf / Automake #1
GNU Autoconf / Automake #1imacat .
 
程式設計師的自我修養 Chapter 8
程式設計師的自我修養 Chapter 8程式設計師的自我修養 Chapter 8
程式設計師的自我修養 Chapter 8Shu-Yu Fu
 
Sales q&a apc4.0
Sales q&a apc4.0Sales q&a apc4.0
Sales q&a apc4.0ahnlabchina
 
Apc4.0销售常见问答
Apc4.0销售常见问答Apc4.0销售常见问答
Apc4.0销售常见问答ahnlabchina
 
自动化运维管理
自动化运维管理自动化运维管理
自动化运维管理frankwsj
 
Erlang Optimize
Erlang OptimizeErlang Optimize
Erlang OptimizeFeng Yu
 
Think php 1.0.0rc1开发人员指南
Think php 1.0.0rc1开发人员指南Think php 1.0.0rc1开发人员指南
Think php 1.0.0rc1开发人员指南Ashim Thapa
 
Device Driver - Chapter 3字元驅動程式
Device Driver - Chapter 3字元驅動程式Device Driver - Chapter 3字元驅動程式
Device Driver - Chapter 3字元驅動程式ZongYing Lyu
 
Erlang分布式系统的的领域语言
Erlang分布式系统的的领域语言Erlang分布式系统的的领域语言
Erlang分布式系统的的领域语言Feng Yu
 
Linux系统工程师教程
Linux系统工程师教程Linux系统工程师教程
Linux系统工程师教程yiditushe
 
How to replace linux system call by module
How to replace linux system call by moduleHow to replace linux system call by module
How to replace linux system call by moduleYU-CHENG Hsu
 
Erlang Emulator Implementation
Erlang Emulator ImplementationErlang Emulator Implementation
Erlang Emulator ImplementationFeng Yu
 
基于PXE实现部署Linux服务器
基于PXE实现部署Linux服务器基于PXE实现部署Linux服务器
基于PXE实现部署Linux服务器ekoing
 

Similar to Oprofile linux (20)

Oracle管理藝術第1章 在Linux作業體統安裝Oracle 11g
Oracle管理藝術第1章 在Linux作業體統安裝Oracle 11gOracle管理藝術第1章 在Linux作業體統安裝Oracle 11g
Oracle管理藝術第1章 在Linux作業體統安裝Oracle 11g
 
Aix操作系统培训文档
Aix操作系统培训文档Aix操作系统培训文档
Aix操作系统培训文档
 
[精彩回顾]Linux新手教程
[精彩回顾]Linux新手教程[精彩回顾]Linux新手教程
[精彩回顾]Linux新手教程
 
04
0404
04
 
Install oracle ebs r12.1.1 on OEL5.6 x86(include demo)
Install oracle ebs r12.1.1 on OEL5.6 x86(include demo)Install oracle ebs r12.1.1 on OEL5.6 x86(include demo)
Install oracle ebs r12.1.1 on OEL5.6 x86(include demo)
 
GNU Autoconf / Automake #1
GNU Autoconf / Automake #1GNU Autoconf / Automake #1
GNU Autoconf / Automake #1
 
程式設計師的自我修養 Chapter 8
程式設計師的自我修養 Chapter 8程式設計師的自我修養 Chapter 8
程式設計師的自我修養 Chapter 8
 
Sales q&a apc4.0
Sales q&a apc4.0Sales q&a apc4.0
Sales q&a apc4.0
 
Apc4.0销售常见问答
Apc4.0销售常见问答Apc4.0销售常见问答
Apc4.0销售常见问答
 
自动化运维管理
自动化运维管理自动化运维管理
自动化运维管理
 
Ch04
Ch04Ch04
Ch04
 
Erlang Optimize
Erlang OptimizeErlang Optimize
Erlang Optimize
 
Think php 1.0.0rc1开发人员指南
Think php 1.0.0rc1开发人员指南Think php 1.0.0rc1开发人员指南
Think php 1.0.0rc1开发人员指南
 
Device Driver - Chapter 3字元驅動程式
Device Driver - Chapter 3字元驅動程式Device Driver - Chapter 3字元驅動程式
Device Driver - Chapter 3字元驅動程式
 
Erlang分布式系统的的领域语言
Erlang分布式系统的的领域语言Erlang分布式系统的的领域语言
Erlang分布式系统的的领域语言
 
Asm+aix
Asm+aixAsm+aix
Asm+aix
 
Linux系统工程师教程
Linux系统工程师教程Linux系统工程师教程
Linux系统工程师教程
 
How to replace linux system call by module
How to replace linux system call by moduleHow to replace linux system call by module
How to replace linux system call by module
 
Erlang Emulator Implementation
Erlang Emulator ImplementationErlang Emulator Implementation
Erlang Emulator Implementation
 
基于PXE实现部署Linux服务器
基于PXE实现部署Linux服务器基于PXE实现部署Linux服务器
基于PXE实现部署Linux服务器
 

More from Feng Yu

Erlang开发实践
Erlang开发实践Erlang开发实践
Erlang开发实践Feng Yu
 
了解应用服务器
了解应用服务器了解应用服务器
了解应用服务器Feng Yu
 
我为什么要选择RabbitMQ
我为什么要选择RabbitMQ我为什么要选择RabbitMQ
我为什么要选择RabbitMQFeng Yu
 
了解网络
了解网络了解网络
了解网络Feng Yu
 
了解内存
了解内存了解内存
了解内存Feng Yu
 
了解Cpu
了解Cpu了解Cpu
了解CpuFeng Yu
 
Rethink db&tokudb调研测试报告
Rethink db&tokudb调研测试报告Rethink db&tokudb调研测试报告
Rethink db&tokudb调研测试报告Feng Yu
 
高性能集群服务器(Erlang解决方案)
高性能集群服务器(Erlang解决方案)高性能集群服务器(Erlang解决方案)
高性能集群服务器(Erlang解决方案)Feng Yu
 
淘宝商品库MySQL优化实践
淘宝商品库MySQL优化实践淘宝商品库MySQL优化实践
淘宝商品库MySQL优化实践Feng Yu
 
开源混合存储方案(Flashcache)
开源混合存储方案(Flashcache)开源混合存储方案(Flashcache)
开源混合存储方案(Flashcache)Feng Yu
 
Erlang low cost_clound_computing
Erlang low cost_clound_computingErlang low cost_clound_computing
Erlang low cost_clound_computingFeng Yu
 
Inside Erlang Vm II
Inside Erlang Vm IIInside Erlang Vm II
Inside Erlang Vm IIFeng Yu
 

More from Feng Yu (14)

Erlang开发实践
Erlang开发实践Erlang开发实践
Erlang开发实践
 
了解应用服务器
了解应用服务器了解应用服务器
了解应用服务器
 
我为什么要选择RabbitMQ
我为什么要选择RabbitMQ我为什么要选择RabbitMQ
我为什么要选择RabbitMQ
 
了解网络
了解网络了解网络
了解网络
 
了解内存
了解内存了解内存
了解内存
 
了解Cpu
了解Cpu了解Cpu
了解Cpu
 
Rethink db&tokudb调研测试报告
Rethink db&tokudb调研测试报告Rethink db&tokudb调研测试报告
Rethink db&tokudb调研测试报告
 
高性能集群服务器(Erlang解决方案)
高性能集群服务器(Erlang解决方案)高性能集群服务器(Erlang解决方案)
高性能集群服务器(Erlang解决方案)
 
淘宝商品库MySQL优化实践
淘宝商品库MySQL优化实践淘宝商品库MySQL优化实践
淘宝商品库MySQL优化实践
 
开源混合存储方案(Flashcache)
开源混合存储方案(Flashcache)开源混合存储方案(Flashcache)
开源混合存储方案(Flashcache)
 
Erlang low cost_clound_computing
Erlang low cost_clound_computingErlang low cost_clound_computing
Erlang low cost_clound_computing
 
Go
GoGo
Go
 
Inside Erlang Vm II
Inside Erlang Vm IIInside Erlang Vm II
Inside Erlang Vm II
 
Go Lang
Go LangGo Lang
Go Lang
 

Oprofile linux