OProfile使用指南.docx

上传人:b****7 文档编号:9969214 上传时间:2023-02-07 格式:DOCX 页数:9 大小:23.62KB
下载 相关 举报
OProfile使用指南.docx_第1页
第1页 / 共9页
OProfile使用指南.docx_第2页
第2页 / 共9页
OProfile使用指南.docx_第3页
第3页 / 共9页
OProfile使用指南.docx_第4页
第4页 / 共9页
OProfile使用指南.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

OProfile使用指南.docx

《OProfile使用指南.docx》由会员分享,可在线阅读,更多相关《OProfile使用指南.docx(9页珍藏版)》请在冰豆网上搜索。

OProfile使用指南.docx

OProfile使用指南

OProfile使用指南

OProfile是一个低管理费用的系统全局的性能监视工具。

它使用处理器上的性能监视硬件来检索关于内核以及系统上的可执行文件的信息,例如内存是何时被引用的;L2缓存请求数量;收到的硬件中断数量等。

在红帽企业Linux系统上,你必须安装oprofileRPM软件包才能使用该工具。

  许多处理器都包含专用的性能监视硬件。

该硬件能够在某些事件发生时(如所请求的数据不在缓存内)检测到它们。

硬件通常是一个或多个计数器(counters),它们在每次事件发生时都递增一位。

当计数器的值“翻转还原”,中断就会生成,从而能够控制性能监视的详细程度(以及由此带来的费用)。

  OProfile使用这个硬件(若没有性能监视硬件则使用一个基于计时器的代用品)来在每次计数器生成中断时收集与性能相关的数据样品(samples)。

这些样品被定期写入磁盘;稍后,其中的数据就会被用来生成系统级别和应用程序级别的性能报告。

  OProfile是一个很有用的工具,但是请了解使用它的一些局限性:

对共享库的使用—除非使用--separate=library选项,共享库中的编码样品不会成为某个特定应用程序的属性。

性能监视样品不精确—当性能监视注册器引发了抽样行动,中断处理将不会明确给出例外的类型。

由于处理器要无序地执行指令,样品可能会在附近的指令上被抽取。

oprofpp不能够正确地归类内联函数样品—oprofpp使用一个简单的地址范围机制来决定它所在的是哪个函数的地址。

内联函数样品不从属于那个内联函数,而是从属于那个内联函数所插入的函数。

OProfile从多次运行中积累数据—OProfile是一个系统范围内的建档器,它预计进程会被多次启动和关闭。

这样,样品就会从多次运行实例中被积累下来。

使用opcontrol--reset来清除从以前运行实例中抽取的样品。

非CPU约束的性能问题—OProfile能够找出受CPU约束的进程的问题。

OProfile不会识别正处于睡眠状态的进程,因为这些进程正在等待锁或其它事件的发生(如等待I/O设备完成操作)。

  在RedhatEnterpriseLinux中,只有多处理器(SMP)内核才启用了OProfile支持。

要判定运行的是哪个内核,使用以下命令:

uname-r

  如果返回的内核版本以.entsmp结束,运行的就是多处理器内核。

否则,即使系统不是多处理器系统,也请通过红帽网络或发行光盘来安装它。

多处理器内核可以在单处理器内核上运行。

第1节工具总览

提供了对oprofile软件包中包括的工具的总览。

命令    描述

opcontrol    配置要收集的数据。

详情请参阅。

op_help    显示系统处理器的可用事件以及每个事件的简单描述。

op_merge    合并同一可执行文件的多个样品。

详情请参阅。

op_time    提供对所有建档的可执行文件的总览。

详情请参阅。

op_to_source    如果应用程序使用调试符号编译了,创建带注解的源码。

详情请参阅。

oprofiled    作为守护进程来运行,定期把样品数据写入磁盘。

oprofpp    检索档案数据。

详情请参阅。

op_import    把样品数据库文件从异类二进制格式转换成系统的本地原始格式。

只有在分析不同体系的样品数据库时才使用该选项。

表1.OProfile命令

第2节配置OProfile

  在运行OProfile之前,它必须被配置。

至少需要选择是否要监视内核。

以下各节描述了如何使用opcontrol工具来配置OProfile。

在opcontrol命令被执行时,设置选项就会被保存到/root/.oprofile/daemonrc文件中。

2.1.指定内核

  首先,配置OProfile是否应该监视内核。

这是在启动OProfile前唯一所需的配置选项。

其它选项都是可选的。

  要监视内核,以根用户身份执行以下命令:

opcontrol--vmlinux=/boot/vmlinux-`uname-r`

  要配置OProfile不监视内核,以根用户身份执行以下命令:

opcontrol--no-vmlinux

  这个命令还会载入oprofile内核模块(如果还没有被载入),并创建/dev/oprofile/目录(如果不存在)。

关于这个目录的详情,请参阅。

    注记

    即便OProfile被配置成不为内核建档,SMP内核仍旧必须运行,这样,oprofile模块才会被载入。

  设置样品是否应在内核中收集只会改变所收集的数据,而不会改变收集数据的方法或贮存地点。

要为内核和应用程序库生成不同的样品文件,请参阅。

2.2.设置要监视的事件

  多数处理器包含计数器(counters)。

它们被OProfile用来监视指定的事件。

如所示,可用的计数器的数量要根据处理器而定。

处理器    cpu_type    计数器数量

PentiumPro    i386/ppro    2

PentiumII    i386/pii    2

PentiumIII    i386/piii    2

Pentium4(无超线程)    i386/p4    8

Pentium4(有超线程)    i386/p4-ht    4

Athlon    i386/athlon    4

AMD64    x86-64/hammer    4

Itanium    ia64/itanium    4

Itanium2    ia64/itanium2    4

TIMER_INT    计时器(timer)    1

IBMeServeriSeries    计时器(timer)    1

IBMeServerpSeries    计时器(timer)    1

IBMeServerS/390    计时器(timer)    1

IBMeServerzSeries    计时器(timer)    1

表2.OProfile处理器和计数器

  使用的信息来校验所检测到的处理器类型是否正确,并且判定能够被同时监视的事件数量。

如果处理器没有支持的性能监视硬件,计时器(timer)就会被用作处理器类型。

  如果使用了timer,事件就不能为任何处理器设置,因为硬件不支持硬件性能计数器。

相反,计时器中断会被用来建档。

  如果timer没有被用作处理器类型,监视的事件就可以被改变,处理器的计数器0就会被默认设置为基于时间的事件。

如果处理器上有多个计数器,0以外的计数器就不会被默认设置任何事件。

被监视的默认事件显示在中。

处理器    计数器0的默认事件    描述

PentiumPro,PentiumII,PentiumIII,Athlon,AMD64    CPU_CLK_UNHALTED    处理器的时钟没有停止

Pentium4(HT和非HT)    GLOBAL_POWER_EVENTS    处理器没有停止的时间

Itanium2    CPU_CYCLES    CPU周期

TIMER_INT    (none)    每个计时器中断的抽样

表3.默认事件

  可以被同时监视的事件数量是由处理器的计数器数量决定的。

不过,这不是一对一的情况;在某些处理器上,某些事件必须被映射到指定的计数器上。

要判定可用的计数器数量,执行以下命令:

cat/dev/oprofile/cpu_type

  可用的事件要根据处理器类型而定。

要判定可被建档的事件,以根用户身份执行以下命令(该列表是针对系统处理器类型特有的):

op_help

  每个计数器的事件都可以通过命令行被配置,也可以使用图形化界面配置。

如果计数器没有被设置给指定的事件,错误消息就会被显示。

  要通过命令行来为每个可配置的计数器设置事件,使用opcontrol:

opcontrol--ctrlN-event=

  把N替换成计数器号码(从0开始),把替换成op_help中显示的确切事件名称。

2.2.1.抽样率

  默认设置会选择基于时间的事件设置。

它大约会创建每处理器每秒2000个样品。

如果使用了计时器中断,计时器就被设置成两幅画面的最小时间间隔率,而且还不能被用户设置。

如果cpu_type不是timer,每个事件就必须设置了一个抽样率(samplingrate)。

抽样率是每次抽样之间发生的事件数量。

  在为计数器设置事件时,还可以指定一个抽样率:

opcontrol--ctrN-event=--ctrN-count=

  把替换成再次抽样前要等待的事件数量。

这个值越小,抽样的频率就越高。

对于不常发生的事件,你可能需要使用一个较小的值才能捕获事件实例。

    小心

    在设置抽样率时务必小心。

抽样率太频繁会使系统超载,导致系统似乎僵住或者真的僵住了。

2.2.2.单元屏蔽

  如果cpu_type不是timer,那么就可能还需要单元屏蔽(unitmasks)来进一步确定事件。

  每个事件的单元屏蔽可以使用op_help命令列举。

每个单元屏蔽的值都以十六进制格式显示。

要指定一个以上单元屏蔽,十六进制的值必须使用逐位“或”(or)算符来组合。

opcontrol--ctrN-event=--ctrN-count=--ctrN-unit-mask=

2.3.分离内核和用户空间档案

  按照默认设置,每个事件都收集内核模式和用户模式的信息。

要配置OProfile在某个指定的计数器中不计数内核模式的事件,执行以下命令(这里的N是计数器号码):

opcontrol--ctrN-kernel=0

  执行以下命令来再次启动计数器的建档内核模式:

opcontrol--ctrN-kernel=1

  要配置OProfile不计数某个指定计数器的用户模式的事件,执行以下命令(这里的N是计数器号码):

opcontrol--ctrN-user=0

  执行以下命令来再次启动计数器的建档用户模式:

opcontrol--ctrN-user=1

  当OProfile守护进程把档案数据写入样品文件,它可以把内核和库档案的数据分成两个单独的样品文件。

要配置守护进程写入样品文件的方式,以根用户身份执行以下命令:

opcontrol--separate=

可以是以下之一:

none—不要分离档案(默认)

library—为库生成每个应用程序的档案

kernel—为内核和内核模块生成每个应用程序的档案

all—为库生成每个应用程序的档案,为内核和内核模块生成每个应用程序的档案

  如果--separate=library被使用,抽样文件名在包括可执行文件名称的同时还包括库的名称。

第3节启动和停止OProfile

  要使用OProfile来开始监视系统,以根用户身份执行以下命令:

opcontrol--start

  所显示的输出和下面相似:

Usinglogfile/var/lib/oprofile/oprofiled.log

Daemonstarted.

Profilerrunning.

  /root/.oprofile/daemonrc中的设置被使用。

  OProfile守护进程oprofiled被启动;它定期把样品数据写入/var/lib/oprofile/samples/目录。

该守护进程的日志位于/var/lib/oprofile/oprofiled.log。

  如果OProfile使用不同的配置选项被重新启动,以前会话中的样品文件就会被自动备份到/var/lib/oprofile/samples/session-N目录中,这里的N是前一次备份会话数量再加1。

Backingupsamplesfiletodirectory/var/lib/oprofile/samples//session-1

Usinglogfile/var/lib/oprofile/oprofiled.log

Daemonstarted.

Profilerrunning.

  要停止建档器,以根用户身份执行以下命令:

opcontrol--shutdown

第4节保存数据

  有时,在指定时间保存样品会很有用。

例如,在给可执行文件建档的时候,根据不同的输入数据来收集不同的样品可能会很有用。

如果要监视的事件数量超过了处理器可用的计数器数量,你可以运行多次OProfile来收集数据,每次都把样品数据保存到不同的文件中。

  要保存当前的抽样文件集合,执行以下命令,把替换成当前会话中的独特描述性名称。

opcontrol--save=

  目录/var/lib/oprofile/samples/name/被创建,当前的抽样文件被复制到其中。

第5节分析数据

  OProfile守护进程oprofiled定期收集样品,并把它们写入/var/lib/oprofile/samples/目录。

在读取数据之前,请以根用户身份执行以下命令来确定所有数据都被写入这个目录中了:

opcontrol--dump

  每个样品文件名称都基于可执行文件的名称,使用右括号(})来代替每个正斜线(/)。

文件名的结尾是井号(#)和用于该样品文件的计数器号码。

例如,以下文件包括了计数器0所收集的/sbin/syslogd这个可执行文件的样品数据:

}sbin}syslogd#0

  一旦抽样数据被收集,你可以使用以下工具来分析它们:

op_time

oprofpp

op_to_source

op_merge

  使用这些工具以及被建档的二进制文件来生成可以进一步被分析的报告。

    警告

    被建档的可执行文件必须使用这些工具来分析数据。

如果它在数据收集后必须被改变,请备份用来创建样品的可执行文件,以及这些样品文件。

  每个可执行文件的样品都被写入一个样品文件。

每个动态链接库的样品也被写入一个样品文件。

在OProfile运行的时候,如果被监视的可执行文件改变了,而且用于这个可执行文件的样品文件存在,这个现存的样品文件就会被自动删除。

因此,如果这个样品文件要被保留,它就必须在可执行文件被新版本替代前和所用的可执行文件一起备份。

关于如何备份样品文件的详情,请参阅。

5.1.使用op_time

    op_time提供了对所有建档的可执行文件的总览。

  以下是输出示例的一部分:

581      0.2949  0.0000/usr/bin/oprofiled

966      0.4904  0.0000/usr/sbin/cupsd

1028    0.5218  0.0000/usr/sbin/irqbalance

1187    0.6026  0.0000/bin/bash

1480    0.7513  0.0000/usr/bin/slocate

2039    1.0351  0.0000/usr/lib/rpm/rpmq

6249    3.1722  0.0000/usr/X11R6/bin/XFree86

8842    4.4885  0.0000/bin/sed

31342    15.9103  0.0000/usr/bin/gdmgreeter

58283    29.5865  0.0000/no-vmlinux

82853    42.0591  0.0000/usr/bin/perl

  每个可执行文件都在它自己的行上列出。

第一列是为该可执行文件记录的样品数量。

第二列是样品和样品总数的百分比。

第三列没有被使用,第四列是这个可执行文件的名称。

  关于op_time命令行选项的列表,请参阅它的说明书页。

例如-r选项被用来按照样品数量的大小给输出排序;-c选项在指定计数器号码时有用。

5.2.使用oprofpp

  要检索关于指定可执行文件的详细信息,使用oprofpp:

oprofpp

必须是到要分析的可执行文件的完整路径。

必须是以下之一:

-l

按照符号列举样品数据。

例如:

以下是运行命令oprofpp-l/usr/X11R6/bin/XFree86的部分输出:

vma    samples  %        symbolname

...

08195d104      3.0303    miComputeCompositeClip

080b91805      3.78788    Dispatch

080cdce05      3.78788    FreeResource

080ce4a05      3.78788    LegalNewID

080ce6405      3.78788    SecurityLookupIDByClass

080dd4709      6.81818    WaitForSomething

080e136012    9.09091    StandardReadRequestFromClient

...

第一列是虚拟内存地址(vma)的起点。

第二列是该符号的样品数量。

第三列是该符号的样品和该可执行文件的总体样品的百分比。

第四列是符号的名称。

要把输出按照样品的数量多少排序(反向),使用-r和-l选项。

-s

列举某个符号名称特有的样品数据。

例如:

以下输出是从命令oprofpp-sStandardReadRequestFromClient/usr/X11R6/bin/XFree86中截取的:

vma    samples  %        symbolname

080e136012    100      StandardReadRequestFromClient

080e13601      8.33333

080e137f1      8.33333

080e13bb1      8.33333

080e13f41      8.33333

080e13fb1      8.33333

080e144a1      8.33333

080e15aa1      8.33333

080e16681      8.33333

080e18031      8.33333

080e18731      8.33333

080e190a2      16.6667

第一行是符号/可执行文件组合的摘要。

第一列包括抽样的虚拟内存地址。

第二列是该内存地址的抽样数量。

第三列是该内存地址的样品和该符号的样品总数的百分比。

-L

按照符号列举样品数据,比-l更详细。

例如:

vma    samples  %        symbolname

080836302      1.51515    xf86Wakeup

080836411      50

080836a11      50

080b81501      0.757576  Ones

080b81791      100

080b8fb02      1.51515    FlushClientCaches

080b8fb91      50

080b8fba1      50

...

数据和-l选项一样,只不过,对于每个符号来说,每个所用的虚拟内存地址都被显示。

对于每个虚拟内存地址,样品数量以及样品和该符号的样品数量的百分比也被显示。

-g

按照gprof格式把输出生成到文件中。

如果生成的文件叫做gmon.out,gprof就能够被用来进一步分析数据。

详情请参阅gprof的说明书页。

能够进一步限定数据的其它选项如下:

-f

使用指定的样品文件

按照默认设置,/var/lib/oprofile/samples/中的样品文件会被使用。

使用这个选项来指定来自前一个会话的样品文件。

-i

使用作为要检索数据的可执行文件的名称。

-d

给C++符号名称解码(demangle)。

-D

给C++符号名称解码(demangle),简化STL库的解码名称。

--counter

为指定计数器收集信息。

若没有指定,默认的计数器是0。

-o

每个样品都显示源码中的行号。

当可执行文件被编译时,应该使用GCC的-g选项。

否则,该选项将无法显示行号。

红帽企业Linux的可执行文件默认都没有使用这个选项编译。

vma    samples  %    symbolname      linearinfo

0806cbb00      0    _start        ../sysdeps/i386/elf/start.S:

47

-e

在输出中不包括用逗号分隔的符号列表。

-k

显示包含共享库的附加列。

这个选项只有在配置OProfile时指定了--separate=library选项,同时又没有指定--dump-gprof-file选项时才会生成结果。

-t

按照指定列顺序来显示输出。

该选项不能和-g一起使用。

使用以下字母来代表列:

字母    描述

v    虚拟内存地址

s    样品数量

S    样品的累计数量

p    样品和该可执行文件的样品总数

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 教育学心理学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1