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选项更加详细的采样数据,