Linux代码性能检测利器(三)-控制分析器opcontrol使用说明

来源:互联网 发布:淘宝女装宣传视频 编辑:程序博客网 时间:2024/06/05 15:56

下面几个章节是对OProfile的详细介绍,感兴趣的童鞋可以继续看完,这些章节是从OProfile的使用指南中摘选出来的,对理解OProfile的分析原理以及应用范围很有帮助,就是有点枯燥:(


我们在这一节对OProfile分析系统的核心—opcontrol的配置进行深入的探讨。opcontrol脚本(注意它不是个可执行程序哦)有一个默认配置,使用这个默认配置就可以进行一些简单的分析,如果想要深入分析,就需要更改opcontrol脚本的设置选项了,尤其是当使用的硬件支持性能计数器(performance counter)时。

OProfile支持许多计数器,每一种计数器都可以利用一个事件进行计数,比如说cache misses或者MMX操作。这些事件的计数被OProfile用来反应分析的结果:排在分析结果前几位的函数或者二进制可以反映出所选事件发生时大部分都是在这些代码里面。

另外,每个计数器都有一个“计数值”(count),这个值决定了分析的细节程度,值越小,采样就越频繁,当前也会消耗很多的系统资源。每个计数器可以选择仅对内核代码采样、仅对用户态代码采样或者全部采样。最后,一些事件包含一个“unit mask”,它用来进一步限制所要计数的事件的类型。

1.1    opcontrol主要参数说明

--init

需要时加载OProfile模块,并且启动OProfile驱动接口。

--setup

       在设置分析器时使用,后面要跟参数列表,这些参数信息保存在/root/.oprofile/daemonrc文件中。这个设置不是必须的,最简单的情况你可以这样设置:opcontrol --no-vmlinux。

--status

显示配置信息。

--start-daemon

       开启分析后台服务,但不进行分析采样。分析采样可以使用--start来进行。当需要剔除OProfile后台服务启动对采样的影响时,这种启动方式就非常有用了,因为--start只是简单在oprofilefs中写一个文件。注意:2.22.4内核上不可用

--start

     使用--setup设置的参数或者使用保存在/roog/.oprofile/daemonrc文件中的参数开始数据收集(分析采样)。如果执行--verbose选项,后台服务会产生大量的调试信息。

--dump

       强制将收集的采样数据写入后台服务中。

--stop

       停止数据收集(这个步骤在2.2、2.4内核中不适用)。

--shutdown

       停止数据采集并且关闭后台服务。

--reset

       从当前会话(session)中清除数据,已经保存的会话不会被清除。

--save=session_name

       把数据从当前绘画中保存到session_name会话中。

--list-events

       列出时间类型和unitmasks。

--help

       打印使用帮助信息。

--event=[eventspec]

       使用指定的性能计数器进行采样分析。

--session-dir=dir_path

       创建/使用dir_path的数据库,如果不指定则使用默认目录的数据库(/var/lib/oprofile)。

--separate=[none,lib,kernel,thread,cpu,all]

       默认情况下,每一次采集分析都保存在一个单独的文件中,比如C库的采样都是/lib/libc.o的采样数据,不过你可以通过下面的参数来创建单独的采样文件:

表格 2‑1 分析参数表

none

没有单独的采样数据(默认配置)

lib

针对库,每个应用程序创建一份单独的分析数据

kernel

针对内核模块,每个应用程序创建一份单独的分析数据

thread

为每个线程和任务创建单独的分析数据

cpu

为每个CPU创建单独的分析数据

all

包含以上所有的参数

注意:--separate=kernel会打开--separate=lib。

使用--separate=kernel会在短时间内创建大量的采样文件,通常在短会话或者使用映像过滤(image filtering)时会非常实用。

--callgraph=#depth

       设置采样时调用深度的最大值,0表示禁用调用图分析。注意:该特性只在很有限的平台上可用,比如:

a)       安装2.6内核的x86平台

b)       安装2.6内核的ARM平台

c)       安装2.6.17的PowerPC平台

--image=image,[images]|”all”

       映像过滤。如果指定了一个或多个二进制映像的绝对路径,OProfile就只产生这些映像的分析解决。当分析结果很多时(比如使用--separate=thread时)很有用。默认值是all。

--vmlinux=file

       vmlinux内核映像。

--no-vmlinux

       当没有内核vmlinux文件时使用这个参数,使用这个参数就不会再分析内核啦,想要分析内核性能的童鞋慎用!不过使用它后OProfile仍然可以计算出内核采样的总数,但是不能给出内核的符号结果。


1.1    使用示例

Intel性能计数器设置步骤:


上图(step 1 --step 7)是使用Intel性能计数器对a.out进行分析的设置步骤,上图实现了启动opcontrol->设置opcontrol->开始采样->运行所测试程序->采样数据收集->停止分析采样->关闭opcontrol。

       但是该图中的操作没有查看采样结果,要查看分析结果,需要用到opreport和opannotate工具,这两个工具的使用在第三章进行详细说明。


RTC模式设置

由于该模式只适用2.2、2.4内核,实现木有环境,因此只能贴个Mannual上的图,实在有需求的童鞋去查看OProfile的原版E文Mannual吧。


定时器中断模式(timerinterrupt mode)

注意:该模式只支持2.6内核,老版本内核的童鞋别看错咯!


0 0
原创粉丝点击