RH442-2 Kernel层面的性能微调工具--Oprofile

简介:

Kernel层面的性能微调工具--Oprofile

一、用途及关键特性

1、非侵入式,无需重新编译系统.

2Kernel层面的Profile, All code is profiled.

3、利用硬件计数器.overhead.

二、安装

1.   硬件要求:IA-32IA-64AMD64PowerPC

#如果处理器是其他处理器,否则oprofile无法采集到数据

2.   首先需要安装内核扩展包kernel-debuginfo

[root@station8 ~]#rpm -i kernel-debuginfo-common-2.6.18-194.el5.rpm

[root@station8 ~]#rpm -i kernel-debuginfo-2.6.18-194.el5.rpm

#kernel-debugkernel-debuginfo是两个不同的软件包,kernel-debugkernel调试代码,kernel-debuginfo是扩展内核代码

#安装好的vmlinux在这里: /usr/lib/debug/lib/modules/2.6.18-194.el5/vmlinux

3.       Oprofile安装

[root@station8 ~]# yum install oprofile.i386

[root@station8 ~]# yum install oprofile-gui.i386

 

三、Oprofile设置

1、设置观察事件:

opcontrol --setup --event=name:count:unitmask:kernel:user --event=xxxx

常用的事件有以下几种:

CPU_CLK_UNHALTED: CPU执行时间

LLC_MISSES:  末级Cache miss

DTLB_MISSES: 数据TLB miss准备我们的程序

[root@station8 ~]# opcontrol --setup --event CPU_CLK_UNHALTED:6000:0:0:1

#我们的程序,包括内核驱动都需要有符号信息:

#查看内核的导出的符号信息:cat /proc/kallsyms

2、初始化Oprofile

[root@station8 ~]#opcontrol --init  

#加载oprofile内核模块

[root@station8 ~]#opcontrol --setup --no-vmlinux

#我们对内核的取样没兴趣,如不收件内核信息,可这样设置

[root@station8 ~]#opcontrol --setup --vmlinux=/usr/lib/debug/lib/modules/(uname –r)/vmlinux

#我们需要内核的取样,如需收件内核信息,需设置内核

 

四、采样数据

1、清除上一次采样到的数据

[root@station8 ~]#opcontrol --reset

2、启动oprofiled守护程序,从内核中采集数据

[root@station8 ~]#pcontrol --start

3、运行要采集其信息的应用程序

[root@station8 ~]#vim /root/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;

}

[root@station8 ~]#gcc  /root/ex1.c -o /root/ex1

#编译程序

[root@station8 ~]#time ./ex1 helloworld

3.143u 0.001s 0:03.14 100.0%    0+0k 0+0io 0pf+0w

#运行程序,time是计算运行程序的时间

4、中途收集采样数据

[root@station8 ~]#opcontrol –dump

#默认采集数据存放在/var/lib/oprofile/samples/

5、关闭守护程序同时准备好采样的数据

[root@station8 ~]#opcontrol --stop

[root@station8 ~]#opcontrol --shutdown

 

五、采样报告

[root@station8 ~]#opreport --long-filenames

#系统级别的

[root@station8 ~]#opreport image:ex1 –l

#模块级别的

[root@station8 ~]#opannotate image:ex1 –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


本文转自netsword 51CTO博客,原文链接:http://blog.51cto.com/netsword/561988

 

相关文章
|
6月前
|
机器学习/深度学习 人工智能 负载均衡
深度解析:Linux内核调度策略的演变与优化
【5月更文挑战第30天】 随着计算技术的不断进步,操作系统的性能调优成为了提升计算机系统效率的关键。在众多操作系统中,Linux因其开源和高度可定制性而备受青睐。本文将深入剖析Linux操作系统的内核调度策略,追溯其历史演变过程,并重点探讨近年来为适应多核处理器和实时性要求而产生的调度策略优化。通过分析比较不同的调度算法,如CFS(完全公平调度器)、实时调度类和批处理作业的调度需求,本文旨在为系统管理员和开发者提供对Linux调度机制深层次理解,同时指出未来可能的发展趋势。
|
2月前
|
人工智能 固态存储 调度
【Paper Reading】结合 NanoFlow 研究,优化大语言模型服务效率的探索
本文将深入探讨 NanoFlow 的关键思路和核心技术,分析 NanoFlow 与 阿里云人工智能平台 PAI 在实际工作中应用的潜力。
|
3月前
|
监控 网络协议 安全
在Linux中,如何进行网络性能的基准测试?
在Linux中,如何进行网络性能的基准测试?
|
4月前
|
人工智能 搜索推荐 UED
[AI Mem0 MultiOn] Mem0集成MultiOn,实现高效自动化网页任务
[AI Mem0 MultiOn] Mem0集成MultiOn,实现高效自动化网页任务
|
6月前
|
负载均衡 算法 Linux
深度解析:Linux内核调度器的演变与优化策略
【4月更文挑战第5天】 在本文中,我们将深入探讨Linux操作系统的核心组成部分——内核调度器。文章将首先回顾Linux内核调度器的发展历程,从早期的简单轮转调度(Round Robin)到现代的完全公平调度器(Completely Fair Scheduler, CFS)。接着,分析当前CFS面临的挑战以及社区提出的各种优化方案,最后提出未来可能的发展趋势和研究方向。通过本文,读者将对Linux调度器的原理、实现及其优化有一个全面的认识。
234 8
|
6月前
|
机器学习/深度学习 存储 编解码
多任务学习新篇章 | EMA-Net利用Cross-Task Affinity实现参数高效的高性能预测
多任务学习新篇章 | EMA-Net利用Cross-Task Affinity实现参数高效的高性能预测
166 0
|
人工智能 算法 调度
Soft Diffusion:谷歌新框架从通用扩散过程中正确调度、学习和采样
Soft Diffusion:谷歌新框架从通用扩散过程中正确调度、学习和采样
|
机器学习/深度学习 Oracle 算法
利用概率学实现组合优化层,新研究构建Julia开源包InferOpt.jl
利用概率学实现组合优化层,新研究构建Julia开源包InferOpt.jl
114 0
|
Linux
【Linux】Out of memory 应对方案
【Linux】Out of memory 应对方案
371 0
针对100G QSFP28 SR4光模块的特征及工作原理进行分析
100G光模块是为了适应网络市场由10G逐渐向40G、100G发展的趋势而诞生的传输速率为100G的光模块,在构建100G网络系统中发挥了至关重要的作用。 由于光通信行业的快速发展,用户对高速率的产品需越来越多,现在低速率的光模块已经开始不能满足用户的传输需求。
2178 0