3、红帽性能工具oprofile

OProfile是一个低开销、系统层面性能监控工具。需要安装oprofile包。

使用处理器性能监控硬件来获取内核和可执行文件的信息,例如内存,二级缓存请求,硬件终端等。也可以用来定位JVM上运行的应用。每次中断收集性能相关数据,周期性写入到磁盘,然后可以从系统层面和应用层面来报告性能。

命令:opcontrol工具和operf工具。

ophelp是显示系统处理器可用事件。

opimport从外部采样的数据库二进制文件转换为系统格式。

opannotate如果应用是通过debug方式编译创建annoted原给可执行文件。

opcontrol在一次profiling运行中配置收集哪些数据。

限制:

共享库,对于特定应用不会采样共享库,除非使用—separate=library选项。

性能监控采样不是非常精确,因为乱序执行,采样记录不精确。

opreport不会采样内联函数。

oprofile累计多次运行数据。oprofile是系统层面评测器和需要进程启动和关闭多次。

不能再虚拟机运行,因为是硬件性能计数器。

不能发现非CPU受限性能问题。oprofile是目标发现CPU局限的进程。例如是IO设备瓶颈。

工具简介

有两个方法来收集OProfile数据。一个是operf另一个是opcontrol.

operf推荐的profiling模式。operf工具使用Linux性能事件子系统,不需要oprofile内核驱动。operf工具允许你定位profiling更加精确,不管是单个进程还是系统层面,允许oprofile和其他工具共存。不像opcontrol,可以通过非root权限来使用。然而operf可以通过—system-wide选项来使能系统层面操作,需要root权限。

通过operf,没有必要初始化安装。

opcontrol模式包含opcontrol shell脚本,oprofiled后台,多个后台进程工具。opcontrol命令用于配置,启动和停止一个profiling会话。一个OProfile内核驱动,通常作为内核模块编译,用于收集采样。如果有root权限可以使用传统模式。

operf

在启动前不需要初始化。停止只需要按下CTRL+C即可。

典型命令语法如下:

opera options range command args

其中options可以用期望的命令选项来执行设置。例如—system-wide,—pid=

当然使用—system-wide需要root权限,最好在root目录下,这样不会被其他用户访问了。

制定内核

监控内核,执行如下命令:

opera —vmlinux=vmlinu_path

如果出现如下:

Your kernel's Performance Events Subsystem does not support your processor type

说明处理器太老,不支持operf.

因为硬件性能技术在虚拟机上不可用,需要使能定时器来在虚拟机系统上使用operf。

opcontrol --deinit

modprobe oprofile timer=1

设置每个可配置计数器

opera —events=event1,event2…

每个事件定义如下:

event-name:sample-rate:unit-mask:kernel:user

后面三个值是可选的。主要是采样频率。

事件名字,可以通过ophelp来获取。

采样频率:太高了会影响系统。默认是处理器100000周期采样一次。

unit-mask:定义不定义事件,在ophelp中列出。可以插入一个0x开头的16进制值。

kernel:确定是否profile内核代码

user:确定是否profile用户层代码。

可用事件取决于处理器型号。如果没有指定事件,默认事件会被profileing.

采样归类:

—separate-thread选项通过进程组ID和进程ID来归类。在多个进程中单个进程比较有用。当结合—system-wide选项,—separate-thread可以用来查看每个进程采样。

opcontrol

使用传统模式前,必须要配置。在最小情况下,选择监控内核。如果执行opcontrol文件,安装选择会保存到/root/.oprofile/daemnrc文件中。

制定内核:

受限,配置手否监控内核。在开始OProfile前需要配置选项。

监控内核命令如下:

opcontrol --setup --vmlinux=/usr/lib/debug/lib/modules/`uname - r`/vmlinux

监控内核需要安装kernel-debuginfo包

不监控内核,配置如下:

opcontrol --setup --no-vmlinux

该命令也会加载oprofile内核模块,如果没有加载创建/dev/oprofile/目录。

设置监控事件:

大多数处理器包含计数器,被OProfile用来监控制定事件。计数器数量取决于处理器。如果处理器不支持性能监控硬件,timer用于处理器类型。

如果timer被使用,那么事件不能设置,因为硬件不支持硬件性能计数器。

如果timer不作为处理器类型使用,事件监控可以被改变,计数器0默认是基于时间的事件。其他计数器默认事件。

一次可以监控的事件取决于处理器拥有的计数器数量。但是,不是一一对应的。在一些处理器上,有些事件必须映射到特定的计数器上。为了确定可用的计数器,执行如下命令:ls -d /dev/oprofile/[0-9]*

每个计数器的事件可以通过命令行或图形化接口设置。

opcontrol --event=event-name:sample-rate

采样频率:

默认,选择基于时间事件。每100,000时钟周期采样一次。如果timer interrupt使用,timer被设置为期望的频率用户不可改。如果cpu_type不是timer,每个事件可以有一个采样频率。采样频率是两个采样快照之间的事件数量。

采样太频繁,会导致系统冻住。

unit masks:

有些性能监控事件需要unit masks来进一步定义事件。

内核模式oprofile

opcontrol --event=event-name:sample-rate:unit-mask:1

用户模式oprofile

opcontrol --event=event-name:sample-rate:unit-mask:0

保存profile数据到采样文件。可以分开内核和共享profile数据到独立的采样文件。

opcontrol --separate=choice

none— Do not separate the profiles (default).

library— Generate per-application profiles for libraries.

kernel— Generate per-application profiles for the kernel and kernel modules.

all— Generate per-application profiles for libraries and per-application profiles for the kernel and kernel modules.

启动和关闭传统模式的Oprofile

启动监控 opcontrol —start

启动后,周期性写采用数据到/var/lib/oprofile/samples目录中。

日志文件在/var/lib/oprofile/oprofiled.log

在红帽7.0系统,nmi_watchdog注册了perf子系统。所以perf子系统控制了性能计数器在启动时候,阻止了OProfile.

为解决这个,系统增加参数nmi_watchdog=0或运行如下命令来关闭nmi_watchdog

echo 0 > /proc/sys/kernel/nmi_watchdog

重新使用运行如下:

echo 1 > /proc/sys/kernel/nmi_watchdog

关闭profile,执行

opcontrol —shutdown

传统方式保存数据:

有时候监控的事件超过了计数器,需要运行多次,可以把每次数据保存到不同的文件。保存命令如下:

opcontrol —save=name

会创建如下目录:

/var/lib/oprofile/samples/name/

指定会话目录来保存采样数据,使用—session-dir选项。如果不指定,数据会保存在oprofile_data目录中。

分析数据:

分析工具例如opreport 和opannotate可以用来产生profile报告。这些工具先在current_dir/oprofile_data目录中寻找采样数据。如不存在,使用 /var/lib/oprofile.

当使用传统模式时候,oprofiled会周期性收集采样数据写到/var/lib/oprofile/samples目录中。在读数据前,确保所有数据已经被写入到目录。

通过如下命令:opcontrol —dump

使用opreport

opreport工具提供所有可执行的概括。

每个可执行都列在自己的线上。第一列是可执行文件到采样记录数。第二列相比采样的百分比。第三列是可执行的名字。

使用 -t选项来裁剪opcontrol输出。

再单一可执行中使用opreport

可用如下命令获得指定可执行的详细信息

opreport mode executable

其中mode可以是-l

opreport -l /usr/lib/tls/libc-version.so

-i 符号名字

列出指定符号名字的采样数据。

-d选项列出比-l选项更加详细的采样数据,

你可能感兴趣的:(3、红帽性能工具oprofile)