OProfile 是一个低管理费用的系统全局的性能监视工具。它使用处理器上的性能监视硬件来检索关于内核以及系统上的可执行文件的信息,例如内存是何时被引用的;L2 缓存请求数量;收到的硬件中断数量等。在红帽企业 Linux 系统上,你必须安装 oprofile RPM 软件包才能使用该工具。
许多处理器都包含专用的性能监视硬件。该硬件能够在某些事件发生时(如所请求的数据不在缓存内)检测到它们。硬件通常是一个或多个计数器(counters),它们在每次事件发生时都递增一位。当计数器的值“翻转还原”,中断就会生成,从而能够控制性能监视的详细程度(以及由此带来的费用)。
OProfile 使用这个硬件(若没有性能监视硬件则使用一个基于计时器的代用品)来在每次计数器生成中断时收集与性能相关的数据样品(samples)。这些样品被定期写入磁盘;稍后,其中的数据就会被用来生成系统级别和应用程序级别的性能报告。
重要 | |
---|---|
红帽企业 Linux 3 对 OProfile 的内核支持是基于从2.5版的开发内核中后向导入的。当引用 OProfile 文档时,尽管内核版本是2.4,但是2.5版特有的功能可以应用在红帽企业 Linux 3 的 OProfile 上。同理,2.4版特有的 OProfile 功能就不能被应用到红帽企业 Linux 3 上。 |
OProfile 是一个很有用的工具,但是请了解使用它的一些局限性:
对共享库的使用 — 除非使用 --separate=library 选项,共享库中的编码样品不会成为某个特定应用程序的属性。
性能监视样品不精确 — 当性能监视注册器引发了抽样行动,中断处理将不会明确给出例外的类型。由于处理器要无序地执行指令,样品可能会在附近的指令上被抽取。
oprofpp 不能够正确地归类内联函数样品 — oprofpp 使用一个简单的地址范围机制来决定它所在的是哪个函数的地址。内联函数样品不从属于那个内联函数,而是从属于那个内联函数所插入的函数。
OProfile 从多次运行中积累数据 — OProfile 是一个系统范围内的建档器,它预计进程会被多次启动和关闭。这样,样品就会从多次运行实例中被积累下来。使用 opcontrol --reset 来清除从以前运行实例中抽取的样品。
非 CPU 约束的性能问题 — OProfile 能够找出受 CPU 约束的进程的问题。OProfile 不会识别正处于睡眠状态的进程,因为这些进程正在等待锁或其它事件的发生(如等待 I/O 设备完成操作)。
在红帽企业 Linux 中,只有多处理器(SMP)内核才启用了 OProfile 支持。要判定运行的是哪个内核,使用以下命令:
uname -r |
如果返回的内核版本以 .entsmp 结束,运行的就是多处理器内核。否则,即使系统不是多处理器系统,也请通过红帽网络或发行光盘来安装它。多处理器内核可以在单处理器内核上运行。
表 43-1提供了对 oprofile 软件包中包括的工具的总览。
命令 | 描述 |
---|---|
opcontrol | 配置要收集的数据。详情请参阅第 43.2 节。 |
op_help | 显示系统处理器的可用事件以及每个事件的简单描述。 |
op_merge | 合并同一可执行文件的多个样品。详情请参阅第 43.5.4 节。 |
op_time | 提供对所有建档的可执行文件的总览。详情请参阅第 43.5.1 节。 |
op_to_source | 如果应用程序使用调试符号编译了,创建带注解的源码。详情请参阅第 43.5.3 节。 |
oprofiled | 作为守护进程来运行,定期把样品数据写入磁盘。 |
oprofpp | 检索档案数据。详情请参阅第 43.5.2 节。 |
op_import | 把样品数据库文件从异类二进制格式转换成系统的本地原始格式。只有在分析不同体系的样品数据库时才使用该选项。 |
表 43-1. OProfile 命令