分类: LINUX
2010-09-19 16:34:02
有些时候,我们特别关注程序的性能,特别是底层软件,比如驱动程序,OS等。为了更好的优化程序性能,我们必须找到性能瓶颈点,“好钢用在刀刃上”才能取 得好的效果,否则可能白做工作。为了找到关键路径,我们可以使用profilng技术,在linux平台上,我们可以使用gprof和oprofile工 具。
我们以编译运行hello.c为例,来说明如何使用这两个工具,这里不解释具体结果的含义,要想详细了解每个结果代表什么意思,可以看一下参考资料中官方站点上的doc信息,里面会给你详尽的解释。 gprof Quick Start gprof是gnu binutils工具之一,默认情况下linux系统当中都带有这个工具。 运行应用程序: ./hello 会在当前目录下产生gmon.out文件 gprof hello gmon.out -p 得到每个函数占用的执行时间 gprof hello gmon.out -q 得到call graph,包含了每个函数的调用关系,调用次数,执行时间等信息。 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 --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 最常用的是opreport,这个可以给出image和symbols的信息,比如我想得到每个函数的执行时间占用比例等信息,用来发现系统性能瓶颈。opannotate可以对源码进行注释,指出哪个地方占用时间比较多。常用命令如下:
使用 GNU profiler 来提高代码运行速度 http://www-128.ibm.com/developerworks/cn/linux/l-gnuprof.html 使用 OProfile for Linux on POWER 识别性能瓶颈 http://www-128.ibm.com/developerworks/cn/linux/l-pow-oprofile/ 本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/99507/showart_2156128.html |