可通过按固定的间隔记录分析事件来收集分析数据。 该间隔可以是使用系统时钟获取的时间间隔,也可以是特定类型硬件事件的数目。间隔时间结束时,会向系统传送一个信号,并在下一个间隔记录数据。
可通过在各种系统函数和库函数上插入包装函数来收集跟踪数据,以便拦截对函数的调用,并记录有关调用的数据。
可通过调用各种系统例程获取全局信息来收集抽样数据。
为可执行文件以及动态打开或静态链接到可执行文件并经过检测的任何共享对象收集函数和指令计数数据。记录函数和指令的执行次数。
收集线程分析数据以支持线程分析器。
分析数据和跟踪数据都包含有关特定事件的信息,并且这两种类型的数据都会转换为性能度量。抽样数据不会转换为度量,而是用于提供标记,这些标记可用于将程序执行划分为很多时间段。通过抽样数据,可以了解该时间段内程序执行的总体情况。
每个分析事件或跟踪事件收集的数据包都包含以下信息:
标识数据的数据包头。
高精度的时间戳。
线程 ID。
轻量级进程 (lightweight process, LWP) ID。
处理器 (CPU) ID,在操作系统中可用时。
调用堆栈的副本。对于 Java 程序,将记录两个调用堆栈:计算机调用堆栈和 Java 调用堆栈。
对于 OpenMP 程序,还会收集当前并行区域的标识符和 OpenMP 状态。
有关线程和轻量级进程的更多信息,请参见Chapter 6, 了解性能分析器及其数据。