Oracle Solaris Studio 12.2:性能分析器

时钟数据

进行基于时钟的分析时,收集的数据取决于操作系统所提供的度量。

Solaris OS 下基于时钟的分析

在 Solaris OS 下基于时钟的分析中,将按固定的时间间隔存储每个 LWP 的状态。这种时间间隔称为分析间隔。这些信息存储在一个整数数组中:数组的一个元素用于内核维护的十个微记帐状态中的每一个状态。收集的数据通过性能分析器转换为每个状态所用的时间和分析间隔的精度。缺省分析间隔约为 10 毫秒 (10 ms)。收集器提供的高精度分析间隔大约为 1 ms,低精度分析间隔大约为 100 ms,如果 OS 允许,则可使用任意的间隔。运行 collect 命令(不带任何参数)可列显运行该命令的系统所允许的范围和精度。

下表定义了从基于时钟的数据计算得来的度量。

表 2–1 Solaris 计时度量

度量 

定义 

用户 CPU 时间 

在 CPU 中按用户模式运行所用的 LWP 时间。 

挂钟时间 

LWP 1 中所用的 LWP 时间。该时间通常称为“挂钟时间”。 

总 LWP 时间 

全部 LWP 时间的总和。 

系统 CPU 时间 

在 CPU 中或陷阱状态下按内核模式运行所用的 LWP 时间。 

等待 CPU 时间 

等待 CPU 所用的 LWP 时间。 

用户锁定时间 

等待锁定所用的 LWP 时间。 

文本缺页时间 

等待文本页所用的 LWP 时间。 

数据缺页时间 

等待数据页所用的 LWP 时间。 

其他等待时间 

等待内核页所用的 LWP 时间,或休眠/ 停止所用的时间。 

对于多线程实验,将计算所有 LWP 的时间(挂钟时间除外)的总和。所定义的挂钟时间对于多程序多数据 (multiple-program multiple-data, MPMD) 程序没有意义。

计时度量按多种类别说明程序消耗时间的位置,并且可用于改善程序的性能。

Linux OS 下基于时钟的分析

在 Linux OS 下,唯一可用的度量是用户 CPU 时间。虽然报告的总 CPU 占用时间是准确的,但分析器不可能像在 Solaris OS 中那样准确地确定实际系统 CPU 时间的时间比例。虽然分析器显示的信息好像是轻量级进程 (lightweight process, LWP) 数据,但实际上 Linux OS 中没有 LWP 的数据;所显示的 LWP ID 实际上是线程 ID。

对 MPI 程序的基于时钟的分析

可以在用 Oracle Message Passing Toolkit(以前称为 Sun HPC ClusterTools)运行的 MPI 实验上收集时钟分析数据。Oracle Message Passing Toolkit 必须至少为版本 8.1。

如果将 Linux 与 Oracle Message Passing Toolkit 8.2 或 8.2.1 一起使用,可能另外需要一种解决方法。对于版本 8.1 或 8.2.1c,不需要解决方法;或者如果使用 Oracle Solaris Studio 编译器,对于任何版本都不需要使用解决方法。有关解决方法,请参见 docs.sun.com 上 Oracle Solaris Studio 12.2 Collection - Simplified Chinese 中的文档《Oracle Solaris Studio 12.2 的新增功能》。

在 MPI 实验上收集时钟分析数据时,可以显示两个其他度量:

在 Solaris OS 上,以串行或并行方式执行工作时,“MPI 工作”会累积。在以下情况下“MPI 等待”会累积:MPI 运行时正在等待进行同步时、该等待正在使用 CPU 时间或正在休眠时,以及正在以并行方式执行工作,但未在 CPU 上调度线程时。

在 Linux OS 上,仅当进程在用户模式或系统模式下处于活动状态时,“MPI 工作”和“MPI 等待”才会累积。除非您已指定 MPI 应执行忙等待,否则,Linux 上的“MPI 等待”将没有用处。

对 OpenMP 程序的基于时钟的分析

如果对 OpenMP 程序执行基于时钟的分析,将提供以下两种附加度量:“OpenMP 工作”和“OpenMP 等待”。

在 Solaris OS 上,以串行或并行方式执行工作时,“OpenMP 工作”会累积。在以下情况下“OpenMP 等待”会累积:OpenMP 运行时正在等待进行同步时、该等待正在使用 CPU 时间或正在休眠时,以及正在以并行方式执行工作,但未在 CPU 上安排线程时。

在 Linux OS 上,仅当进程在用户模式或系统模式下处于活动状态时,“OpenMP 工作”和“OpenMP 等待”才会累积。除非您已指定 OpenMP 应执行忙等待,否则,Linux 上的“OpenMP 等待”将没有用处。