精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>电脑技术>>● FreeBSD>>《FreeBSD使用大全》第二版>>3.5.2 程序性能分析

主题:3.5.2 程序性能分析
发信人: sungang(笨刚)
整理人: sungang(2003-09-16 11:52:59), 站内信件
3.5.2 程序性能分析

当编写程序的时候,有时希望最大程度的优化程序,得到一个高性能的程序。基本上,一个程序中最消耗系统资源的代码量其实非常少,大部分代码实际上只可能执行一次,甚至一次都没有被执行过,对于这些部分进行优化毫无意义。

因此找出程序或中那些部分的代码最为重要,根据这些地方进行优化才能达到优化性能的目的。这就要求深入程序内部或内核内部,对程序进行分析,这就需要进行程序分析。

1) 程序基本性能
普通应用程序执行所消耗的处理器资源可以使用系统命令time来执行这个应用程序,这能得到应用程序整体性能。

$ /usr/bin/time echo

       0.00 real       0.00 user      0.00 sys

系统命令time将报告相应的命令执行所消耗的全部处理器时间real,用户进程所消耗的处理器时间user,以及进程调用系统调用所消耗的处理器时间sys。

注意,在csh内部带有一个内建的time命令,如果使用csh,那么就会首先直接使用这个内部命令而不是外部的系统程序,因此前面例子中使用了全路径来指明使用系统指令/usr/bin/time。csh内部time和系统time指令功能相同,但显示方式略有不同。

通过上面的步骤分析系统状态,就可以得到程序运行的基本信息。然而,这些信息只能告诉程序作为一个整体表现出来的性能。

2) 应用程序分析
为了分析程序的性能,系统需要安装proflibs安装组件,以便支持系统性能分析器gprof。如果系统没有安装该组件,需要从安装介质上重新安装。

此后,首先需要使用特殊的选项”-pg”重新编译程序,以便程序中被编译入必要的分析代码,并执行编译好的程序。

$ cc -pg -o hello hello.c

$ ./hello

那么该程序中的分析代码就会在同样目录下产生命名为hello.gmon的文件,这个文件将包括程序中所有重要代码的执行过程信息,然后,就可以使用gprof对其进行分析。

$ gprof -b hello hello.gmon

参数”-b”用来使gprof不要输出一些描述性的文字。Gprof的输出可以分为三个部分,第一部分为程序之间的关系,主要描述函数之间的关系,以及它们被调用的次数。

第二部分为每个函数被调用的次数,以及相应消耗的处理器时间。第三部分为函数的索引与名字的对应。

每个部分之间使用^L分开,如果使用行式打印机,这个符号将使打印机走纸,在新的一页重新打印。

从gprof的分析结果可以看出哪些内部函数被执行次数较多,需要进行优化,以提高程序性能。

[关闭][返回]