全部博文(77)
分类: LINUX
2009-06-19 17:26:41
一、Oprofile简介
Oprofile 是用于 Linux 的若干种评测和性能监控工具中的一种。它可以工作在不同的体系结构上,包括 IA32, IA64 和 AMD Athlon 系列。它的开销小,被包含在(Linux)2.6 版的内核中。
Oprofile可以帮助用户识别诸如循环的展开、高速缓存的使用率低、低效的类型转换和冗余操作、错误预测转移等问题。它收集有关处理器事件的信息,其中包括TLB的故障、停机、存储器访问、位于 DCU(数据高速缓存单元)中的总线路数、一个 DCU 故障的周期数,以及不可高速缓存的和可高速缓存的指令的获取数量。Oprofile是一种细粒度的工具,可以为指令集或者为函数、系统调用或中断处理例程收集采样。Oprofile 通过取样来工作。使用收集到的评测数据,用户可以很容易地找出性能问题。
二、配置Oprofile
2.1监视内核
首先,配置 OProfile 是否应该监视内核。这是在启动 OProfile 前唯一所需的配置选项。其它选项都是可选的。 要监视内核,以根用户身份执行以下命令:
opcontrol --vmlinux=/boot/vmlinux-`uname -r`
要配置 OProfile 不监视内核,以根用户身份执行以下命令:
opcontrol --no-vmlinux
这个命令还会载入 oprofile 内核模块(如果还没有被载入),并创建 /dev/oprofile/ 目录(如果不存在)。 设置样品是否应在内核中收集只会改变所收集的数据,而不会改变收集数据的方法或贮存地点。
2.2选择监视的事件
Oprofile有多个计数器。计数器的事件都可以通过命令行被配置,也可以使用图形化界面配置。如果计数器没有被设置给指定的事件,错误消息就会被显示。 要通过命令行来为每个可配置的计数器设置事件,使用 opcontrol:
opcontrol --ctrlN-event=
把 N 替换成计数器号码(从0开始),把
三、收集数据
启动监测
opcontrol --start
运行用户程序
yourapplication
停止采样
opcontrol --stop
导出剖析数据
opcontrol –dump
四、分析结果
以运行k_select.c为例。果想要查看每个函数的运行时间,则使用如下的命令:
opcontrol --no-vmlinux
opcontrol --start
gcc –g –o k k_select.c
./k
opreport -l ./k
[root@localhost openmp]# opreport -l ./k
CPU: P4 / Xeon, speed 2400.25 MHz (estimated)
Counted GLOBAL_POWER_EVENTS events (time during which processor is not stopped) ry) count 100000
samples % image name symbol name
1873843 99.9170 k find
1361 0.0726 anon (tgid:3480 range:0x54c000-0x54d000) (no symbols)
180 0.0096 k .plt
15 8.0e-04 k main
这样opreport工具就会打印出运行k时应用程序中具体每个函数占用cpu时间的百分比。