Sun Studio 12:性能分析器

硬件计数器列表

由于硬件计数器是特定于处理器的,因此可以选用的计数器取决于所使用的处理器。性能工具为许多可能常用的计数器提供了别名。通过在特定系统上的终端窗口键入不带参数的 collect,您可以从收集器获得该系统上可用的硬件计数器列表。如果处理器和系统支持硬件计数器分析,则 collect 命令会列显两个包含有关硬件计数器信息的列表。第一个列表包含“周知”(有别名的)硬件计数器;第二个列表包含原始硬件计数器。

以下示例显示了计数器列表中的条目。被认为是周知的计数器将首先显示在列表中,然后是原始硬件计数器列表。该示例中的每一行输出都按打印格式显示。


Well known HW counters available for profiling:
cycles[/{0|1}],9999991 (’CPU Cycles’, alias for Cycle_cnt; CPU-cycles)
insts[/{0|1}],9999991 (’Instructions Executed’, alias for Instr_cnt; events)
dcrm[/1],100003 (’D$ Read Misses’, alias for DC_rd_miss; load events)
...
Raw HW counters available for profiling:
Cycle_cnt[/{0|1}],1000003 (CPU-cycles)
Instr_cnt[/{0|1}],1000003 (events)
DC_rd[/0],1000003 (load events)

周知硬件计数器列表的格式

在周知硬件计数器列表中,第一个字段(例如 cycles)是可以在 collect 命令的 -h counter... 参数中使用的别名。该别名还是在 er_print 命令中使用的标识符。

第二个字段列出计数器的可用寄存器,例如 [/{0|1}]。对于周知计数器,选择的缺省值可提供合理的抽样率。由于实际抽样率变化相当大,因此可能需要您指定缺省值以外的值。

第三个字段(例如 9999991)是计数器的缺省溢出值。

第四个字段(在圆括号中)包含类型信息。它提供简短描述(例如 CPU Cycles)、原始硬件计数器名称(例如 Cycle_cnt)以及计数单位类型(例如 CPU-cycles,其中最多可以包括两个单词)。

如果类型信息的第一个单词是:

如果类型信息的第二个单词或仅有的单词是:

在示例中的周知硬件计数器列表中,类型信息包含一个单词的,如第一个计数器的 CPU-cycles 和第二个计数器的 events。类型信息包括两个单词的,如第三个计数器的 load events

原始硬件计数器列表的格式

原始硬件计数器列表中包含的信息是周知硬件计数器列表中信息的子集。每行包括由 cpu-track(1) 使用的内部计数器名称、可以在其上使用计数器的寄存器编号、缺省溢出值和计数器单位(可以是 CPU-cyclesEvents)。

如果计数器度量与运行的程序无关的事件,则类型信息的第一个单词是 not-program-related。对于这样的计数器,分析不会记录调用栈,而是显示人工函数 collector_not_program_related 中所用的时间。线程和 LWP ID 会被记录,但没有任何意义。

原始计数器的缺省溢出值是 1000003。由于该值对于大多数原始计数器来说是不理想的,因此应该在指定原始计数器时指定超时值。