Sun Studio 12:性能分析器

性能分析器 GUI

分析器窗口具有菜单栏、工具栏以及一个包含用于显示各种数据的标签的拆分窗格。

菜单栏

菜单栏包含“文件”菜单、“视图”菜单、“时间线”菜单和“帮助”菜单。

“文件”菜单用来打开、添加和删除实验和实验组。利用“文件”菜单可以通过性能分析器 GUI 来收集实验数据。有关使用性能分析器收集数据的详细信息,请参阅记录实验。您也可以通过“文件”菜单创建映射文件,用以优化可执行文件的大小或优化其有效的高速缓存行为。有关映射文件的更多详细信息,请参阅生成映射文件和函数重新排序

利用“视图”菜单可以配置实验数据的显示方式。

正如其名称所表示的那样,“时间线”菜单可以帮您浏览时间线显示,分析器数据显示对其进行了介绍。

“帮助”菜单提供性能分析器的联机帮助、新功能摘要、快速参考和快捷键以及故障排除。

工具栏

工具栏提供了几组图标作为快捷方式,此外包含“查找”功能以帮助您在标签中定位文本或突出显示的行。有关“查找”功能的更多详细信息,请参阅查找文本和数据

分析器数据显示

性能分析器使用拆分窗口将数据显示在两个窗格中。每个窗格都含有标签,以便您可以为同一实验或实验组选择不同的数据显示。

数据显示,左窗格

左窗格按标签出现的顺序显示主要分析器显示中的标签:

如果调用分析器时没有指定目标,系统将提示您打开一个实验。

缺省情况下,选中第一个可见的标签。仅显示适用于装入实验中的数据的标签。

打开实验时某个标签是否显示在分析器窗口的左窗格中取决于启动分析器时读取的 .er.rc 文件中的标签指令以及标签是否适用于实验中的数据。您可以使用“设置数据表示”对话框中的“标签”标签(请参见“标签”标签)来选择要为实验显示的标签。

“争用”标签

“争用”标签显示在数据争用实验中检测到的所有数据争用列表。有关更多信息,请参见《Sun Studio 12:线程分析器用户指南》

“死锁”标签

“死锁”标签显示在死锁实验中检测到的所有死锁列表。有关更多信息,请参见《Sun Studio 12:线程分析器用户指南》

“函数”标签

“函数”标签显示包含函数及其度量的列表。度量是根据在实验中收集的数据得出的。度量可以是独占的,也可以是包含的。独占的度量在函数本身内部使用。包含的度量在函数及其所调用的所有函数中使用。

collect(1) 手册页中提供了每种收集的数据的可用度量列表。仅列出具有非零度量的函数。

时间度量显示为秒,精度可达到毫秒。百分比精确到 0.01%。如果某个度量值正好为零,则其时间和百分比显示为 "0"。如果值不是恰好为零,但小于精度,则其值将显示为 "0.000",其百分比为 "0.00"。由于进行了舍入,百分比总和可能不会恰好是 100%。计数度量显示为整数计数。

初始显示的度量基于收集的数据以及从各种 .er.rc 文件中读取的缺省设置。初始安装性能分析器时,缺省值如下所示:

如果收集的数据类型多于一种,则显示每种类型的缺省度量。

可以更改或重新组织显示的度量;有关详细信息,请参见联机帮助。

要搜索函数,请使用查找工具。有关“查找”工具的更多详细信息,请参阅查找文本和数据

要选择单个函数,请单击该函数。

要选择在标签中连续显示的多个函数,请选择组中的第一个函数,然后按住 Shift 键并单击组中的最后一个函数。

要选择标签中不是连续显示的多个函数,请选择组中的第一个函数,然后通过按住 Ctrl 键并单击每个函数来选择其他函数。

单击工具栏中的“编写过滤子句”按钮时,将打开“过滤”对话框,同时已选中其中的“高级”标签并且“过滤子句”文本框装入反映“函数”标签中的选择的过滤子句。

“调用者与被调用者”标签

“调用者与被调用者”标签在中间的窗格中显示所选择的函数,该函数的调用者显示在上面的窗格中,该函数的被调用者显示在下面的窗格中。

除了显示每个函数独占的和包含的度量值之外,该标签还显示归属度量。对于所选择的函数,归属度量表示该函数的独占度量。对于被调用者,归属度量表示被调用者的包含度量中归属于中心函数调用的那一部份。被调用者和所选函数的归属度量之和等于所选函数的包含度量。

对于调用者,归属度量表示所选函数的包含度量中归属于调用者的调用的那一部分。所有调用者的归属度量之和同样应等于所选函数的包含度量。

可以更改或重新组织“调用者与被调用者”标签中显示的度量;有关详细信息,请参见联机帮助。

单击调用者或被调用者窗格中的函数将选择该函数,窗口的内容将被刷新,从而使所选函数显示在中间的窗格中。

“双重数据源”标签

“双重数据源”标签显示所选数据争用或死锁涉及到的两个源上下文。仅当装入了数据争用检测或死锁实验时才会显示此标签。

"Source-Disassembly"(源-反汇编)标签

"Source-Disassembly"(源-反汇编)标签在上面的窗格中显示带注释的源,在下面的窗格中显示带注释的反汇编。缺省情况下该标签不可见。可以使用“视图”菜单中的“设置数据表示”选项来添加 "Source-Disassembly"(源-反汇编)标签。

“源”标签

如果可用,“源”标签显示包含所选函数源代码的文件,每个源代码行都带有性能度量注释。源代码列标题中显示源文件、对应的目标文件以及装入对象的全名。少数情况下,会使用同一源文件编译多个目标文件,此时“源”标签显示包含所选函数的目标文件的性能数据。

分析器在可执行文件中记录的绝对路径名下查找包含所选函数的文件。如果文件不在此处,分析器尝试在当前工作目录中查找具有相同基本名称的文件。如果移动了源,或者实验记录在其他文件系统中,则可以设置从当前目录指向实际源位置的符号链接,以便查看带注释的源。

在“函数”标签中选择一个函数并且“源”标签打开时,显示的源文件为该函数的缺省源上下文。函数的缺省源上下文是包含函数的第一条指令(对于 C 代码,为函数的左花括号)的文件。紧接着第一条指令,带注释的源文件为函数添加索引行。源窗口用尖括号中的红色斜体文本显示索引行,格式如下:

<Function: f_name>

函数可能具有其他源上下文,即包含归属于该函数的指令的其他文件。这些指令可能来自头文件或内联到所选函数中的其他函数。如果存在其他源上下文,则缺省源上下文的开头将包含指示其他源上下文所在位置的扩展索引行列表。

<Function: f, instructions from source file src.h>

双击引用其他源上下文的索引行,将在与索引函数关联的位置打开包含该源上下文的文件。

为了便于导航,其他源上下文也以一个索引行列表开头,通过这些索引行可以返回到缺省源上下文和其他源上下文中定义的函数。

源代码中插入了所有选择显示的编译器注释。可以在“设置数据表示”对话框中设置显示的注释类别。可以在 .er.rc 缺省值文件中设置缺省类别。

可以更改或重新组织“源”标签中显示的度量,有关详细信息,请参见联机帮助。

度量等于或大于该度量针对源文件中任意行设置的最大阈值百分比的行将突出显示,以便于查找重要的行。可以在“设置数据表示”对话框中设置阈值。可以在 .er.rc 缺省值文件中设置缺省阈值。滚动条的旁边将显示勾号(对应于源文件中超过阈值的行的位置)。例如,如果源文件的末尾附近有两个超过阈值的行,源窗口的底部附近的滚动条附近将显示两个勾号。将滚动条定位到勾号的旁边将使源行显示在源窗口中,从而显示对应的超过阈值的行。

“行”标签

“行”标签显示包含源行及其度量的列表。源行标有行所在的函数以及行号和源文件名称。如果函数无行号信息或函数的源文件未知,则在行显示中,函数的所有程序计数器 (program counter, PC) 聚集在一起,显示为该函数的单个条目。在行显示中,来自隐藏了其函数的装入对象中的函数中的 PC 聚集在一起,显示为该装入对象的单个条目。如果从“行”标签中选择一个行,则会在“摘要”标签中显示该行的所有度量。如果从“行”标签中选择一个行后选择“源”或“反汇编”标签,则会将显示定位到适当的行。

“反汇编”标签

“反汇编”标签显示包含所选函数的目标文件的反汇编列表,带有针对每条指令的性能度量注释。

反汇编列表中插入了源代码(如果有)以及所有选择显示的编译器注释。在“反汇编”标签中查找源文件的算法与在“源”标签中使用的算法相同。

与“源”标签相同,“反汇编”标签中显示索引行。但与“源”标签不同的是,其他源上下文的索引行不能直接用于导航。此外,其他源上下文的索引行显示在 #included 或内联代码插入位置的开头,而不是仅在“反汇编”视图的开头列出。来自其他文件的 #included 或内联代码显示为原始反汇编指令,不插入源代码。但是,将光标置于这些指令之一上并选择“源”标签可以打开包含 #included 或内联代码的源文件。显示此文件时选择“反汇编”标签将在新上下文中打开“反汇编”视图,从而显示插入了源代码的反汇编代码。

可以在“设置数据表示”对话框中设置显示的注释类别。可以在 .er.rc 缺省值文件中设置缺省类别。

分析器突出显示度量等于或大于特定于度量的阈值的行,以便于查找重要的行。可以在“设置数据表示”对话框中设置阈值。可以在 .er.rc 缺省值文件中设置缺省阈值。与“源”标签相同,滚动条旁边显示有勾号(对应于反汇编代码中超过阈值的行的位置)。

"PC" 标签

"PC" 标签显示包含程序计数器 (program counter, PC) 及其度量的列表。PC 标有其所来自的函数及在该函数中的偏移。在 "PC" 显示中,来自隐藏了其函数的装入对象中的函数中的 PC 聚集在一起,显示为装入对象的单个条目。在 "PC" 标签中选择一个行将在“摘要”标签中显示该 PC 的所有度量。从 "PC" 标签中选择一个行后选择“源”或“反汇编”标签会将显示定位到适当的行。

有关 PC 的更多信息,请参见调用栈和程序执行 一节。

“时间线”标签

“时间线”标签以时间的函数的形式显示收集器记录的事件和样本点图。数据显示在水平栏中。对于每个实验,都有一个样本数据栏和一组用于每个 LWP 的栏。LWP 栏中包含一个用于每个记录的数据类型的栏:基于时钟的分析、硬件计数器溢出分析、同步跟踪、堆跟踪以及 MPI 跟踪。

包含样本数据的栏显示在每个样本的每个微状态中花费时间的彩色编码表示。样本显示为时间段,原因是样本点上的数据表示该样本点和上一个样本点之间所花费的时间。单击样本将在“事件”标签中显示该样本的数据。

分析数据栏或跟踪数据栏显示每个记录的事件的事件标记。事件标记包含随事件记录的调用栈的彩色编码表示,如彩色矩形栈。单击事件标记中的彩色矩形将选择对应的函数和 PC 并在“事件”标签中显示该事件和该函数的数据。“事件”标签和“图例”标签中的选定内容会突出显示,并且选择“源”标签或“反汇编”标签可以将标签显示定位在调用栈中的该帧对应的行上。

对于某些类型的数据,事件可能会因重叠而不可见。如果两个或多个事件恰好出现在同一位置,则只绘制一个事件;如果一个或两个像素内有两个或多个事件,将绘制全部事件,但是可能无法从视觉上区分它们。在以上两种情况下,绘制的事件下将显示一个小的灰色勾号,以表示重叠。

利用“设置数据表示”对话框的“时间线”标签可以执行以下操作:更改显示的特定于事件的数据的类型;选择线程、LWP 或 CPU 特定于事件的数据的显示;选择在根或叶处对齐调用栈表示;选择显示的调用栈的级别数。

可以更改“时间线”标签中显示的特定于事件的数据的类型,也可以更改映射到所选函数的颜色。有关使用“时间线”标签的详细信息,请参阅联机帮助。

“泄漏列表”标签

“泄漏列表”标签显示两行,上面一行表示泄漏,下面一行表示分配。每一行包含一个调用栈,与“时间线”标签中显示的调用栈类似;在中间,上面有一个条,其长度与泄漏或分配的字节数成比例,下面也有一个条,其长度与泄漏或分配数成比例。

选择泄漏或分配将在“泄漏”标签中显示所选的泄漏或分配的数据,并且在调用栈中选择一个帧(与在“时间线”标签中相同)。

可以通过在“设置数据表示”对话框的“标签”标签中选择“泄漏列表”标签来显示该标签(请参见“标签”标签)。仅在一个或多个装入的实验包含堆跟踪数据时才能使“泄漏列表”标签可见。

“数据对象”标签

“数据对象”标签显示数据对象及其度量的列表。该标签仅适用于已启用主动回溯选项的硬件计数器溢出实验以及在 C 编译器中使用 -xhwcprof 选项编译的源文件。

可以通过在“设置数据表示”对话框的“标签”标签中选中该标签来显示它(请参见“标签”标签)。仅在一个或多个装入的实验包含数据空间分析时才能使“数据对象”标签可见。

该标签显示针对程序中的各种数据结构和变量的硬件计数器内存操作度量。

要选择单个数据对象,请单击该对象。

要选择在标签中连续显示的多个对象,请选择第一个对象,然后按住 Shift 键并单击最后一个对象。

要选择在标签中不连续显示的多个对象,请选择第一个对象,然后通过按住 Ctrl 键并单击每个对象来选择其他对象。

单击工具栏上的“编写过滤子句”按钮时,将打开“过滤”对话框,此时已选中对话框的“高级”标签并且在“过滤子句”文本框中装入了反映“数据对象”标签中的选择的过滤子句。

“数据布局”标签

“数据布局”标签显示所有程序数据对象(带有从数据获取的度量数据)的带注释的数据对象布局。总的来说,标签中显示的布局按照结构的数据排序度量值进行排序。标签显示每个聚集的数据对象及归属于该对象的总度量,后跟数据对象中的所有元素(按偏移量顺序)。每个元素相应地具有其自己的度量,并且在一个 32 字节的块中指示其大小和位置。

可以通过在“设置数据表示”对话框的“标签”标签中选择“数据布局”标签来显示它(请参见“标签”标签)。与“数据对象”标签相同,仅在一个或多个装入的实验包含数据空间分析时才可使“数据布局”标签可见。

要选择单个数据对象,请单击该对象。

要选择在标签中连续显示的多个对象,请选择第一个对象,然后按住 Shift 键并单击最后一个对象。

要选择在标签中不连续显示的多个对象,请选择第一个对象,然后通过按住 Ctrl 键并单击每个对象来选择其他对象。

单击工具栏上的“编写过滤子句”按钮时,将打开“过滤”对话框,此时已选中对话框的“高级”标签,并且在“过滤子句”文本框中装入了反映“数据布局”标签中的选择的过滤子句。

"Inst-Freq" 标签

"Inst-Freq"(即“指令-频率)标签显示计数数据实验中各类指令执行频率的摘要。该标签还显示有关装入、存储和浮点指令的执行频率的数据。此外,该标签还包含有关取消的指令和分支延迟槽中的指令的信息。

“统计数据”标签

“统计数据”标签显示所选的实验和样本的各种系统度量的总和。总和后面是每个实验所选样本的统计信息。有关显示的统计信息的信息,请参见 getrusage(3C) 和 proc(4) 手册页。

“实验”标签

“实验”标签分为两个面板。上面的面板包含一个树,树中包含所有装入实验中的装入对象和每个装入实验的节点。展开“装入对象”节点时,将显示所有装入对象的列表(附带有关装入对象的处理情况的各种消息)。展开实验节点时,将显示两个区域:"Notes"(说明)区域和 "Info"(信息)区域

"Notes"(说明)区域显示实验中的所有说明文件的内容。可以通过直接在 "Notes"(说明)区域中键入内容来编辑说明。 "Notes"(说明)区域包含其自己的工具栏,其中有用来保存或丢弃说明以及撤消或重做自上次保存以后的所有编辑的按钮。

"Info"(信息)区域包含有关收集的实验以及收集目标访问的装入对象的信息,包括在处理实验或装入对象过程中生成的所有错误消息或警告消息。

底部的面板列出来自分析器会话的错误消息和警告消息。

"Index"(索引)标签

每个 "Index"(索引)标签显示归属于各种索引对象(如线程、Cpu 和 秒)的数据的度量值。由于 "Index"(索引)对象不是分层结构,因此不显示包含的和独占的度量。对于每一种类型,只显示一个度量。

预定义了多个 "Index"(索引)标签:线程、Cpu、样本和秒。您可以定义定制的索引对象,方法是在“设置数据表示”对话框中单击“添加定制索引标签”按钮,以打开“添加索引对象”对话框。

使用每个“索引”标签顶部的单选按钮可以选择“文本”显示或“图形”显示。“文本”显示类似于“数据对象”标签中的显示,并且使用同样的度量设置。“图形”显示以图形的形式显示每个索引对象的相关值,每个度量用一个单独的直方图表示,按数据排序度量排序。

单击工具栏中的“过滤数据”按钮时,将打开“过滤数据”对话框。单击“高级”标签,“过滤子句”文本框将装入反映“索引对象”标签中的选择的过滤子句。

“内存对象”标签

每个“内存对象”标签显示归属于各种内存对象(例如页)的数据空间度量的度量值。如果一个或多个装入的实验包含数据空间分析,您可以在“设置数据表示”对话框的“标签”标签中选择要显示其标签的内存对象。可以显示任意数量的“内存对象”标签。

预定义了各种“内存对象”标签。您可以定义定制的内存对象,方法是在“设置数据表示”对话框中单击“添加定制对象”按钮,以打开“添加内存对象”对话框。

使用每个“内存对象”标签上的单选按钮,可以选择“文本”显示或“图形”显示。“文本”显示类似于“数据对象”标签中的显示,并且使用同样的度量设置。“图形”显示以图形的形式显示每个内存对象的相关值,每个度量用一个单独的直方图表示,按数据排序度量排序。

单击工具栏上的“编写过滤子句”按钮时,将打开“过滤”对话框,此时已选中对话框的“高级”标签,并且在“过滤子句”文本框中装入了反映“内存对象”标签中的选择的过滤子句。

数据显示,右窗格

右窗格包含“摘要”标签、“事件”标签、“争用详细信息”标签、“死锁详细信息”标签和“泄漏”标签。缺省情况下显示“摘要”标签。

“摘要”标签

“摘要”标签同时以值和百分比的形式显示所选函数或装入对象的所有记录的度量,此外还显示所选函数或装入对象的信息。无论何时在任何标签中选择了新的函数或装入对象,都将更新“摘要”标签。

“事件”标签

“事件”标签显示在“时间线”标签中选择的事件的详细数据,包括事件类型、叶函数、LWP ID、线程 ID 和 CPU ID。数据面板的下方显示调用栈,栈中的每个函数都使用彩色编码。单击调用栈中的某个函数将选中该函数。

“时间线”标签中选中某个样本时,“事件”标签将显示样本编号、样本的开始时间和结束时间、微状态及在每个微状态中所花费的时间和彩色编码。

“泄漏”标签

“泄漏”标签显示“泄漏列表”标签中所选的泄漏或分配的详细数据。在数据面板的下方,“泄漏”标签显示检测到所选的泄漏或分配时的调用栈。单击调用栈中的函数将选中该函数。

“争用详细信息”标签

“争用详细信息”标签显示“争用”标签中所选的数据争用的详细数据。有关更多信息,请参见《Sun Studio 12:线程分析器用户指南》

“死锁详细信息”标签

“死锁详细信息”标签显示“死锁”标签中所选的死锁的详细数据。有关更多信息,请参见《Sun Studio 12:线程分析器用户指南》

设置数据表示选项

您可以通过“设置数据表示”对话框控制数据的表示。要打开此对话框,请单击工具栏中的“设置数据表示”按钮或选择“视图”->“设置数据表示”。

“设置数据表示”对话框具有一个包含多个标签的窗格,这些标签如下所示:

对话框中有“保存”按钮,使用该按钮可以存储当前设置,包括任何自定义的内存对象。


注 –

由于分析器、er_print 实用程序和 er_src 实用程序的缺省值是通过通用的 .er.rc 文件设置的,因此在“设置数据表示”对话框中保存更改将会影响 er_print 实用程序和 er_src 实用程序的输出。


“度量”标签

“度量”标签显示所有可用的度量。每个度量具有多个复选框(在一个或多个列中),复选框标有时间%,具体取决于度量的类型。或者,也可以不设置个别度量,而是通过选中或取消选中对话框最底下一行中的复选框,然后单击“应用于所有度量”按钮,来一次设置所有度量。

“排序”标签

“排序”标签显示所显示的度量的顺序以及度量的排序依据选项。

“源/反汇编”标签

“源/反汇编”标签显示一个复选框列表,您可以使用该列表来选择显示的信息,如下所示:

“格式”标签

“格式”标签提供 C++ 函数名称和 Java 方法名称的长名形式、短名形式或修整名称形式选项。如果选择“将 SO 名称附加到函数名称” 复选框,则函数或方法所在的共享对象的名称将会附加到函数名称或方法名称。

此外,“格式”标签还显示用户专家机器“视图模式”选项。“视图模式”设置控制对 Java 实验和 OpenMP 实验的处理。

对于 Java 实验:

对于 OpenMP 实验:

对于所有其他实验,所有三种模式显示同样的数据。

“时间线”标签

“时间线”标签显示以下内容:显示的事件特定数据的类型选项,线程、LWP 或 CPU 事件特定数据的显示,调用栈表示在根或叶的对齐,显示的调用栈的级别数。

“搜索路径”标签

利用“搜索路径”标签可以管理用来搜索源文件和目标文件的目录列表。特殊名称 $expts 表示装入的实验;所有其他名称应为文件系统中的路径。

“路径映射”标签

使用“路径映射”标签可以将文件路径的前面部分从一个位置映射到另一个位置。您可以指定一组前缀对:原始前缀和新前缀。这样,对于给定的路径,可将路径从原始前缀映射到新前缀。可以指定多个路径映射,这样将依次尝试每个路径映射以查找文件。

“标签”标签

您可以使用“设置数据表示”对话框的“标签”标签来选择要在分析器窗口中显示的标签。

“标签”标签列出适用于当前实验的标签。标准标签列在左边的列中。“索引”标签列在中间的列中,定义的“内存”标签列在右边的列中。

在左边的列中,单击复选框可以选择或取消选择显示标准标签。

在中间的列中,单击复选框可以选择或取消选择显示“索引”标签。预定义的“索引”标签为“线程”、"CPU"、“样本”和“秒”。要添加其他索引对象的标签,请单击“添加定制索引标签”按钮以打开“添加索引对象”对话框。在“对象名称”文本框中,键入新对象的名称。在“公式”文本框中,键入用来将记录的物理地址或虚拟地址映射到对象索引的索引表达式。有关索引表达式规则的信息,请参见indxobj_define indxobj_type index_exp

在右边的列中,单击复选框可以选择或取消选择显示“内存对象”标签。要添加定制对象,请单击“添加定制对象”按钮以打开“添加内存对象”对话框。在“对象名称”文本框中,键入新定制内存对象的名称。在“公式”文本框中,键入用来将记录的物理地址或虚拟地址映射到对象索引的索引表达式。有关索引表达式规则的信息,请参见mobj_define mobj_type index_exp

添加定制索引对象或内存对象后,将会向“标签”标签中添加该对象的复选框,缺省情况下,该复选框是选中的。

保存数据表示选项

“设置数据表示”对话框中有“保存”按钮,用以存储当前设置。


注 –

由于分析器、er_print 实用程序和 er_src 实用程序的缺省值是通过通用的 .er.rc 文件设置的,因此在分析器的“设置数据表示”对话框中保存更改会影响 er_print 实用程序和 er_src 实用程序的输出。