OProfile是一种Linux内核支持的性能分析机制,它在时钟中断处理入口处建立监测点,记录被中断的上下文现场。用户态的工具oprof_start负责在用户态收集数据,opreport则分析数据并给出分析报告。
OProfile可以帮助开发人员找到程序的瓶颈,指导代码优化。该工具由John Levon在2001年为Linux内核版本2.4编写,包括一个内核模块、一个用户态守护进程和几个用户态工具。
在Linux 2.2/2.4中,仅支持32位x86和IA64;在Linux 2.6中,支持范围更广:x86(32位和64位)、DEC Alpha、MIPS、ARM、sparc64、ppc64、AVR32。调用图仅在x86和ARM上受支持。
2012年,两位IBM工程师将OProfile评选为
Linux上使用最广泛的两种性能计数器监控分析工具之一,与perf工具齐名。2021年,OProfile将从Linux kernel 5.12中移除,而用户空间工具将继续通过使用kernel的perf系统来工作。
功能和服务
oprofile 是 Linux 平台上的一个功能强大的性能分析工具, 支持两种采样(sampling)方式:基于事件的采样(event based)和基于时间的采样(
时间 based)。
基于事件的采样是oprofile只记录特定事件(比如L2 cache miss)的发生次数,当达到用户设定的 定值时oprofile 就记录一下(采一个样)。这种方式需要CPU 内部有性能计数器(performace counter)。
基于时间的采样是oprofile 借助OS 时钟中断的机制,每个时钟中断 oprofile 都会记录一次(采一次样)。引入的目的在于,提供对没有性能计数器 CPU 的支持。其精度相对于基于事件的采样要低。因为要借助 OS 时钟中断的支持,对禁用中断的代码oprofile不能对其进行分析。
oprofile 在
Linux 上分两部分,一个是内核模块(oprofile.ko),一个为用户空间的守护进程(oprofiled)。前者负责访问性能计数器或者注册基于时间采样的函数(使用register_timer_hook注册之,使时钟中断处理程序最后执行profile_tick 时可以访问之),并采样置于内核的缓冲区内。后者在后台运行,负责从内核空间收集数据,写入文件。
Oprofile 工具概述:
op_help: 列出可用的事件,并带有简短的描述
opcontrol: 控制 Oprofile 的数据收集
oprofpp: 检索有用的评测数据
op_to_source: 产生带注解的源文件、汇编文件或源文件和汇编文件的混合
op_merge: 合并属于同一个应用程序的采样文件
op_import: 将采样数据库文件从外部格式(abi)转换为本地格式
参考资料
Warning: Invalid argument supplied for foreach() in
/www/wwwroot/newbaike1.com/id.php on line
362