Oracle Solaris Studio 12.2:性能分析器

数据的存储位置

应用程序的一次执行过程中所收集的数据称作实验。实验由存储在目录下的一组文件组成。实验的名称即目录的名称。

除记录实验数据以外,收集器还为程序所使用的装入对象创建自己的归档文件。这些归档文件包含装入对象中每个目标文件和函数的地址、大小和名称以及装入对象的地址和上次修改的时间戳。

缺省情况下,实验存储在当前目录中。如果该目录位于网络文件系统上,则存储数据所需的时间比在本地文件系统中长,而且可能会导致性能数据失真。如有可能,应始终尝试在本地文件系统中记录实验。可以在运行收集器时指定存储位置。

子孙进程的实验存储在创始进程的实验内部。

实验名称

新实验的缺省名称为 test.1.er。后缀 .er 是必需的:如果您赋予的名称不具有该后缀,则系统会显示一条错误消息而且不接受该名称。

如果您选择使用格式为 experiment.n.er 的名称,(其中 n 是正整数),则收集器会将后续实验名称中的 n 自动递增 1。例如,mytest.1.er 的后面是 mytest.2.ermytest.3.er 等。如果实验已经存在,收集器也会递增 n,直到找到未使用的实验名称才停止递增 n。如果实验名称不含 n 且实验存在,则收集器会列显一条错误消息。

实验可按组收集。组在实验组文件中定义,缺省情况下该文件存储在当前目录中。实验组文件是纯文本文件,它具有特殊的标题行,并在随后的每一行中显示实验名称。实验组文件的缺省名称为 test.erg如果名称不以 .erg 结尾,则系统会显示一条错误并且不接受该名称。创建实验组后,您使用该组名运行的所有实验都会添加到该组中。

可以手动创建实验组文件,方法是创建第一行是如下内容的纯文本文件


#analyzer experiment group

然后将实验名称添加到随后的行中。文件的名称必须以 .erg 结尾。

还可以通过使用带有 -g 参数的 collect 命令来创建实验组。

子孙进程的实验是沿袭命名的,如下所示。要形成子孙进程的实验名称,可将下划线、代码字母和数字添加到其创建者实验名称的主干中。代码字母 f 表示派生,x 表示执行,c 表示组合。数字是派生或执行的索引(无论是否成功)。例如,如果创始进程的实验名称为 test.1.er,则在第三次调用 fork 时为子进程创建的实验为 test.1.er/_f3.er。如果该子进程成功调用 exec,新子孙进程的实验名称为 test.1.er/_f3_x1.er

移动实验

如果要将实验移到其他计算机以便对其进行分析,则应了解分析对在其中记录实验的操作环境的依赖性。

归档文件包含计算函数级度量和显示时间线所必需的全部信息。但是,如果要查看带注释的源代码或带注释的反汇编代码,则必须能够访问与记录实验时所用装入对象或源文件相同的版本。

性能分析器在下列位置依次搜索源代码、对象和可执行文件,并在找到具有正确基本名称的文件时停止:

可以从分析器 GUI 或通过使用 setpath(请参见setpath path_list)和 addpath(请参见addpath path_list)指令来更改搜索顺序或添加其他搜索目录。还可以使用 pathmap 命令扩大搜索。

为了确保能够看到程序的正确的带注释源代码和带注释反汇编代码,可以在移动或复制实验之前将源代码、目标文件和可执行文件复制到该实验中。如果您不想复制目标文件,则可以使用 -xs 来链接程序,以确保源代码行和文件位置上的信息插入可执行文件中。可以通过使用 collect 命令的 -A copy 选项或 dbx collector archive 命令将装入对象自动复制到实验中。