有些时候,我们特别关注程序的性能,特别是底层软件,比如驱动程序,OS等。为了更好的优化程序性能,我们必须找到性能瓶颈点,“好钢用在刀刃上”才能取 得好的效果,否则可能白做工作。为了找到关键路径,我们可以使用profilng技术,在linux平台上,我们可以使用gprof和oprofile工 具。
gprof是GNU工具之一,它在编译的时候在每个函数的出入口加入了profiling的代码,运行时统计程序在用户态的 执行信息,可以得到每个函数的调用次数,执行时间,调用关系等信息,简单易懂。适合于查找用户级程序的性能瓶颈,对于很多时间都在内核态执行的程 序,gprof不适合。
oprofile也是一个开源的profiling工具,它使用硬件调试寄存器来统计信息,进 行profiling的开销比较小,而且可以对内核进行profiling。它统计的信息非常的多,可以得到cache的缺失率,memory的访存信 息,分支预测错误率等等,这些信息gprof是得不到的,但是对于函数调用次数,它是不能够得到的。。
简单来说,gprof简单,适合于查找用户级程序的瓶颈,而oprofile稍显复杂,但是得到的信息更多,更适合调试系统软件。
我们以编译运行hello.c为例,来说明如何使用这两个工具,这里不解释具体结果的含义,要想详细了解每个结果代表什么意思,可以看一下参考资料中官方站点上的doc信息,里面会给你详尽的解释。
gprof Quick Start
gprof是gnu binutils工具之一,默认情况下linux系统当中都带有这个工具。
使用 -pg 选项来编译hello.c,如果要得到带注释的源码清单,则需要增加 -g 选项。运行: gcc -pg -g -o hello hello.c
运行应用程序: ./hello 会在当前目录下产生gmon.out文件
使用gprof来分析gmon.out文件,需要把它和产生它的应用程序关联起来:
gprof hello gmon.out -p 得到每个函数占用的执行时间
gprof hello gmon.out -q 得到call graph,包含了每个函数的调用关系,调用次数,执行时间等信息。
gprof hello gmon.out -A 得到 一个带注释的“源代码清单”,它会注释源码,指出每个函数的执行次数。这需要在编译的时候增加 -g选项。
oprofile Quick Start
oprofile是sourceforge上面的一个开源项目,在2.6内核上带有这个工具,好像只有smp系统才有。比较老的系统,需要自己安装,重新编译内核。
oprofile是一套工具,分别完成不同的事情。
op_help: 列出所有支持的事件。
opcontrol:设置需要收集的事件。
opreport: 对结果进行统计输出。
opannaotate:产生带注释的源/汇编文件,源语言级的注释需要编译源文件时的支持。
opstack: 产生调用图profile,但要求x86/2.6的平台,并且linux2.6安装了call-graph patch
opgprof: 产生如gprof相似的结果。
oparchive: 将所有的原始数据文件收集打包,可以到另一台机器上进行分析。
op_import: 将采样的数据库文件从另一种abi转化成本地格式。
运行oprofile需要root权限,因为它要加载profile模块,启动oprofiled后台程序等。所以在运行之前,就需要切换到root。
opcontrol --init 加载模块,mout /dev/oprofile 创建必需的文件和目录
opcontrol --no-vmlinux 或者 opcontrol --vmlinux=/boot/vmlinux-`uname -r` 决定是否对kernel进行profiling
opcontrol --reset 清楚当前会话中的数据
opcontrol --start 开始profiling
./hello 运行应用程序,oprofile会对它进行profiling
opcontrol --dump 把收集到的数据写入文件
opcontrol --stop 停止profiling
opcotrol -h 关闭守护进程oprofiled
opcontrol --shutdown 停止oprofiled
opcontrol --deinit 卸载模块
常用的是3→7这几个过程,得到性能数据之后,可以使用opreport, opstack, opgprof, opannotate几个工具进行分析,我常用的是opreport, opannotate进行分析。
opreport使用 http://oprofile.sourceforge.net/doc/opreport.html
opannotate使用 http://oprofile.sourceforge.net/doc/opannotate.html
opgprof使用 http://oprofile.sourceforge.net/doc/opgprof.html
最常用的是opreport,这个可以给出image和symbols的信息,比如我想得到每个函数的执行时间占用比例等信息,用来发现系统性能瓶颈。opannotate可以对源码进行注释,指出哪个地方占用时间比较多。常用命令如下:
opreport -l /bin/bash --exclude-depand --threshold 1 , 用来发现系统瓶颈。
opannotate --source --output-dir=annotated /usr/local/oprofile-pp/bin/oprofiled
opannotate --source --base-dirs=/tmp/build/libfoo/ --search-dirs=/home/user/libfoo/ --output-dir=annotated/ /lib/libfoo.so
- 浏览: 36793 次
相关推荐
Linux性能评测工具中的gprof是一个强大的分析工具,它可以帮助开发者识别程序中的性能瓶颈。...尽管如此,gprof仍然是Linux环境下性能分析的常用工具,对于单线程或对多线程支持有限的场景,它提供了宝贵的性能数据。
性能分析工具gprof应用详细介绍,性能分析工具gprof应用详细介绍,性能分析工具gprof应用详细介绍。
《gprof性能分析工具深度解析》 在C++编程领域,优化代码性能是提升软件效率的关键环节。为了更好地理解和改善程序的运行效率,开发者需要掌握各种性能分析工具。其中,`gprof`是一款广泛使用的命令行工具,它能...
"gprof"是一款经典的性能分析工具,专用于C和C++程序,它能够帮助开发者识别程序运行时的热点,从而定位到可能存在的性能瓶颈。本篇文章将深入探讨gprof的使用方法及其在性能可视化分析中的作用。 gprof的工作原理...
为了更好地理解和改进程序的性能,开发者通常会借助各种工具,其中gprof和gprof2dot是两个非常实用的工具。本文将深入探讨gprof2dot,它是如何将gprof的性能分析数据转化为易于理解的图形表示。 首先,我们来了解...
为了将性能测试纳入开发周期,Andrew Glover 提倡使用 JUnitPerf 和 gprof 两种简单的方法来实现早期性能验证。 **JUnitPerf:** JUnitPerf 是一个基于 JUnit 的性能测试框架,它允许开发者在开发早期就能对应用的...
gprof是GNU项目提供的一款强大的性能分析工具,适用于Linux、AIX、Sun等操作系统,支持C、C++、Pascal、Fortran等多种编程语言。它通过对程序执行过程中的采样,帮助开发者了解程序运行时的时间消耗分布,找出程序中...
《gprof性能分析工具详解》 gprof是GNU项目中的一款强大的性能分析工具,它能够帮助开发者对C、C++、Pascal、Fortran等语言编写的程序进行性能分析,以识别程序中的性能瓶颈。在Linux、AIX、Sun等操作系统上,gprof...
在《Linux性能优化实战》案例中,我们深入探讨了如何利用Linux系统工具和技术来提升系统的运行效率和性能。Linux作为一款开源操作系统,其强大的可定制性和丰富的工具集使其成为性能优化的理想平台。以下是一些核心...
标题中的“性能优化工具 valgrind+graphviz+gprof2dot”涉及到的是三款在软件开发中用于性能分析和优化的重要工具。接下来,我们将详细探讨这些工具的作用、使用方法以及如何结合它们来提升程序效率。 1. **...
Linux 下的 C 语言工具对于程序设计和调试非常有用。本节将详细介绍一些常用的 C 语言工具,并描述它们的作用和使用方法。 检查源代码的工具 * cb: 该工具位于编译器中,用于检查源代码的格式和布局。它可以使...
在Linux环境下进行编程,开发者通常会利用一系列工具来提高效率和生产力。本资源"Linux下编程的三个重要工具(ZT)"似乎提供了一些关键工具的介绍,虽然具体细节未在描述中详述,但我们可以根据常见的编程工具来探讨...
### Linux常用性能诊断工具知识点详解 #### 一、性能概述与标准 - **性能基准**:性能基准是指衡量一个高性能系统的参考数据。它为评估系统的实际表现提供了标准。 - **设计阶段解决性能问题**:在设计阶段就考虑...
7. **性能分析与调优**:介绍性能监控工具,如gprof、strace、perf等,以及如何利用这些工具分析服务器性能瓶颈,进行代码优化。 8. **框架与库的使用**:可能涵盖了如Nginx、Apache、libevent、libev、Boost.Asio...
《Linux高性能服务器编程》这本书是针对那些希望深入理解如何在Linux环境下构建高效、稳定服务器的开发者和运维人员的宝贵资源。书中的内容涵盖了广泛的Linux系统编程和服务器优化技术,旨在帮助读者提升系统的性能...
gprof2dot linux环境下 C++性能测试工具 ,有助于查看程序的调用流程和次数.
标题 "Linux 测试程序" 暗示了...总的来说,Linux测试程序涉及到多种技术和工具,涵盖了从代码到系统的各个层面,确保软件在不同场景下都能正常运行。结合博客中的具体内容,可以深入学习和实践这些测试方法和工具。
在Linux环境中,测试工具对于确保系统的稳定性和优化性能至关重要。以下是一些常见的Linux测试工具及其用途: 1. **UltraISO**: 这是一个功能强大的光盘映像制作和编辑工具,可用于创建Linux安装U盘和光盘。通过...