如果安装了 perfctr 修补程序(可以从 http://user.it.uu.se/~mikpe/linux/perfctr/2.6/ 下载),该选项在运行 Linux 操作系统的系统上是可用的。安装说明包含在 tar 文件中。使用 LD_LIBRARY_PATH 环境变量的值搜索用户级 libperfctr.so 库,即:对于 32 位版本,在 /usr/local/lib、/usr/lib 和 /lib 中进行搜索;对于 64 位版本,在 /usr/local/lib64、/usr/lib64 和 /lib64 中进行搜索。
要获取可用计数器的列表,请在终端窗口中键入不带参数的 collect。硬件计数器列表一节提供了对计数器列表的介绍。在大多数系统上,即使未列出计数器,仍可以使用数值(十六进制或十进制)对其进行指定。
计数器定义可以采用下列形式之一,具体取决于处理器是否支持硬件计数器的属性。
[+]counter_name[/ register_number][,interval ]
[+]counter_name[~ attribute_1=value_1]...[~attribute_n =value_n][/ register_number][,interval ]
特定于处理器的 counter_name 可以为下列名称之一:
有别名的计数器名称
原始名称
十进制或十六进制的数值
如果指定了多个计数器,则它们必须使用不同的寄存器。如果它们未使用不同的寄存器,则 collect 命令会列显一条错误消息并退出。
如果硬件计数器对与内存访问有关的事件进行计数,可以在计数器名称前添加 + 符号,以针对引起计数器溢出的指令打开对其真实程序计数器地址 (counter address, PC) 的搜索。这种回溯功能适用于 SPARC 处理器,并且仅适用于类型为 load、store 或 load-store 的计数器。如果搜索成功,则所引用的虚拟 PC、物理 PC 和有效地址将存储在事件数据包中。
在某些处理器上,可以将多个属性选项与一个硬件计数器关联。如果某个处理器支持多个属性选项,则运行不带参数的 collect 命令会列出计数器定义(包括属性名)。可以使用十进制或十六进制格式来指定属性值。
间隔(溢出值)是事件计数或循环计数的数量,在达到该数量时,硬件计数器将溢出并且将记录溢出事件。间隔可以设置为下列值之一:
on 或空字符串-缺省溢出值,可以通过键入不带参数的 collect 来确定。
hi[gh]-所选计数器的高精度值,大约比缺省溢出值短十倍。之所以还支持缩写 h,是为了与以前的软件发行版兼容。
lo[w]-所选计数器的低精度值,大约比缺省溢出值长十倍。
interval-特定的溢出值,必须是正整数,可以采用十进制格式,也可以采用十六进制格式。
缺省值是为每个计数器预定义的正常阈值,它出现在计数器列表中。另请参见硬件计数器溢出分析的限制。
如果在使用 -h 选项时未明确指定 -p 选项,则基于时钟的分析功能将处于关闭状态。要同时收集硬件计数器数据和基于时钟的数据,必须同时指定 -h 选项和 -p 选项。