Oracle® Developer Studio 12.5:性能分析器

退出打印视图

更新时间: 2016 年 6 月
 
 

数据收集选项

这些选项控制所收集数据的类型。 有关对数据类型的介绍,请参见收集器收集的数据

如果未指定数据收集选项,则缺省值为 -p on,这会启用缺省分析间隔大约为 10 毫秒的时钟分析。

如果您使用 -p off 明确禁用了时钟分析,而且未启用跟踪或硬件计数器分析,则 collect 命令会输出一条警告消息,并且只收集全局抽样数据。

使用 -p option 选项收集时钟分析数据

使用 –p 选项可以收集时钟分析数据。 option 的允许值包括:

  • off-关闭时钟分析。

  • on-打开缺省分析间隔大约为 10 毫秒的时钟分析。

  • lo[w]-打开分析间隔大约为 100 毫秒(低精度)的时钟分析。

  • hi[gh]-打开分析间隔大约为 1 毫秒(高精度)的时钟分析。有关启用高精度分析的信息,请参见时钟分析的限制

  • value-打开时钟分析并将其分析间隔设置为 value value 的缺省单位为毫秒。可以将 value 指定为整数或浮点数。可以选择在数值后加后缀 m 来选择毫秒单位或者加 u 来选择微秒单位。该值应当是时钟精度的倍数。如果该值较大但不是精度的倍数,则会向下舍入。如果较小,则会输出一条警告消息并将其设置为时钟精度。

collect 命令的缺省操作是收集时钟分析数据。如果不收集计数数据 (–c) 或数据争用和死锁数据 (–r),即使未指定 –p 选项,也会收集时钟分析数据。

如果指定 –h high–h low 以高频率或低频率请求为该处理器设置的缺省硬件计数器,则缺省的时钟分析也将设置为高频率或低频率。您可以为时钟分析设置其他频率,方法是使用 –p hi–p low–p n 选项明确设置它。

有关 Linux 上多线程应用程序的时钟分析的说明,请参见时钟分析的限制

使用 collect -h 收集硬件计数器分析数据

收集硬件计数器分析数据。 对于某些硬件,collect 命令定义了一个缺省计数器集,您可以使用不带任何参数的 collect -h 显示它。还可以指定特定计数器而不使用缺省计数器集。可以使用多个 -h 参数指定计数器。

有关使用 collect -h 显示的计数器格式的信息,请参见硬件计数器列表

允许和 collect -h 结合使用的 option 值包括:

off

关闭硬件计数器分析。任何其他选项不能与 -h off 一同指定。

on

对于特定硬件系统,打开使用缺省计数器集的硬件计数器分析。如果系统没有缺省计数器集,指定 -h on 时会生成错误。

hi | high

为系统打开使用缺省计数器集的硬件计数器分析,并以高速率进行分析。如果系统没有缺省计数器集,指定 -h hi 时会生成错误。

lo | low

为系统打开使用缺省计数器集的硬件计数器分析,并以低速率进行分析。如果系统没有缺省计数器集,指定 -h lo 时会生成错误。

ctr_def...[,ctr_n_def]

使用一个或多个指定的计数器收集硬件计数器分析。支持的计数器最大数量(ctr_defctr_n_def)取决于处理器。在当前计算机上运行不带任何参数的 collect -h 可确定用于分析的硬件计数器定义的最大数量,并显示可用的硬件计数器和缺省计数器集的完整列表。

内存相关计数器是指类型为 loadstoreload-store 的计数器;在运行不带任何其他命令行参数的 collect -h 命令时计数器列表中会显示这些计数器。某些这类计数器还带有 precise 标签。对于 SPARC 或 x86 上的 precise 计数器,缺省情况下将记录数据空间和内存空间。

每个 ctr_def 计数器定义都采用以下格式:

ctr[~attr=val]...[~attrN=valN][/reg#],[interval] 

计数器定义选项的含义如下所示:

ctr

通过运行不带任何其他命令行参数的 collect -h 命令显示的处理器特定的计数器名称。在大多数系统上,即使未列出某计数器,仍可使用数值指定该计数器;指定的数值为十六进制 (0x1234) 或十进制。早期芯片的驱动程序不支持数值,但近期芯片的驱动程序支持。以数字方式指定计数器时,也应该指定寄存器号。要使用的数值可在芯片特定制造商的手册中找到。手册名称在 collect -h 输出中指定。有些计数器仅在专有供应商手册中进行介绍。

~attr=val

可选的一个或多个属性选项。在某些处理器上,可以将多个属性选项与一个硬件计数器关联。如果处理器支持多个属性选项,则运行不带任何其他命令行参数的 collect -h 也会列出用于 ~attr 的属性名称。值 val 可以采用十进制或十六进制格式。十六进制格式的数字使用 C 程序格式,其中的数字前置了零和小写 x (0xhex_number)。大多数属性都与计数器名称串联。每个属性名称前面需要 ~

/reg#

要用于计数器的硬件寄存器。如果未指定寄存器,则 collect 会尝试将计数器放入第一个可用的寄存器,因此,可能由于寄存器冲突而无法放置后续计数器。如果指定了多个计数器,则这些计数器必须使用不同的寄存器。通过运行不带任何其他命令行参数的 collect -h 命令,您可以查看允许的寄存器号列表。如果指定了寄存器,则必须使用 / 字符。

interval

该间隔为抽样频率,可通过定义计数器溢出值(硬件事件之间的间隔)进行设置。有效值如下:

  • on-调整计数器溢出值,以便峰值速率时的时间间隔与缺省时钟分析速率(即 100x/秒)时的时间间隔大致匹配。

  • hi-所选计数器的高精度值,大约比 on 短十倍。

  • lo-所选计数器的低精度值,大约比 on 长十倍。

  • value-特定的值,必须是正整数,可以采用十进制格式,也可以采用十六进制格式。


    注 -  value 设置过低可能会导致应用程序乃至整个系统重载。建议每个线程每秒的事件数低于 1000 个。

如果省略间隔,则使用 -h on 的值。但是,如果省略间隔,必须仍在省略的间隔指定部分前提供逗号,除非是在 -h 参数中指定最后一个计数器。

示例 1  -h 用法的有效示例
 
-h on
-h lo
-h hi
 分别启用具有缺省、低或高速率的缺省计数器

-h cycles,,insts,,dcm
-h cycles -h insts -h dcm
 两个语句具有相同含义:三个计数器:cycles、insts 和高速缓存未命中次数 (D-cache misses,dcm) 的数据空间分析(仅限 SPARC)

-h cycles~system=1
 用户和系统模式下的计数周期

-h 0xc0/0,10000003
在 Nehalem 上,这等同于
-h inst_retired.any_p/0,10000003
示例 2  -h 用法的无效示例
 
-h cycles -h off
  无法将 off 与任何其他 -h 参数一起使用
-h cycles,insts
 缺少逗号,"insts" 不会解析为数目 
  <interval>

如果 -h 参数指定使用硬件计数器,但硬件计数器在命令发出时正由根使用,则 collect 命令将报告错误,且不会运行实验。

如果未指定 -h 参数,则不收集硬件计数器分析数据。一个实验可以同时指定硬件计数器溢出分析和基于时钟的分析。指定硬件计数器溢出分析不会禁用基于时钟的分析(即使已缺省启用)。

使用 -s option 收集同步等待跟踪数据

收集同步等待跟踪数据。 option 的允许值包括:

on

打开同步延迟跟踪并在运行时通过校准来设置阈值

calibrate

on 相同。

off

关闭同步延迟跟踪

n

打开同步延迟跟踪并将阈值设置为 n 微秒;如果 n 为零,则跟踪所有事件

all

打开同步延迟跟踪并跟踪所有同步事件

缺省情况下,会关闭同步延迟跟踪。

对于 Java 程序,同步跟踪可能会涵盖已分析程序中的 Java 方法调用、本机同步调用或同时涵盖这两种调用。

在 Oracle Solaris 上,跟踪以下函数:

mutex_lock()
rw_rdlock()
rw_wrlock()
cond_wait()
cond_timedwait()
cond_reltimedwait()
thr_join()
sema_wait()
pthread_mutex_lock()
pthread_rwlock_rdlock()
pthread_rwlock_wrlock()
pthread_cond_wait()
pthread_cond_timedwait()
pthread_cond_reltimedwait_np()
pthread_join()
sem_wait()

在 Linux 上,跟踪以下函数:

pthread_mutex_lock()
pthread_cond_wait()
pthread_cond_timedwait()
pthread_join()
sem_wait()

注 -  使用 –H–i 选项跟踪数据可能会产生大量实验数据。

使用 -H option 收集堆跟踪数据

收集堆跟踪数据。 option 的允许值包括:

on

打开对内存分配请求的跟踪

off

打开对内存分配请求的跟踪

缺省情况下,堆跟踪功能处于关闭状态。

将记录任何本机调用的堆跟踪事件,对 mmap 的调用被视为内存分配。

对于 Java 程序,不支持堆分析。指定将其视为一个错误。

请注意,堆跟踪可能会生成非常大的实验。此类实验的装入和浏览速度都非常慢。

使用 –i option 收集 I/O 跟踪数据

收集 I/O 跟踪数据。允许的选项值包括:

on

打开对 I/O 操作的跟踪

off

关闭对 I/O 操作的跟踪

缺省情况下不执行 I/O 跟踪。I/O 跟踪会产生非常大的实验,此类实验的装入和浏览速度非常慢。

使用 –c option 对数据计数

记录计数数据。

option 的允许值包括:

on

打开计数数据。

static

在假定每个指令执行了一次的情况下,打开模拟计数数据。

off

关闭计数数据。

缺省情况下,关闭对计数数据的收集。计数数据不能和任何其他类型的数据一起收集。

对于计数数据和模拟计数数据,将对可执行文件以及检测过的和静态链接的任何共享对象进行计数。对于计数数据而非模拟计数数据,还将检测和计数动态装入的共享对象。

在 Oracle Solaris 上,不需要特殊的编译,但计数选项与编译标志 -p、-pg、-qp、-xpg–-xlinkopt 不兼容。

在 Linux 上,可执行文件必须使用 -annotate=yes 标志进行编译,才能收集计数数据。

在 Oracle Linux 5 上,运行时链接程序审计接口(也称为 rtld-audit 或 LD_AUDIT)的不稳定性可能会阻止计数数据的收集。

使用 –I directory 指定计数数据检测目录

为计数数据检测指定目录。该选项仅在 Oracle Solaris 系统上可用,且仅当指定了 –c 选项时才有意义。

使用 –N library-name 指定排除的库

指定要从计数数据检测中排除的库,不管该库是链接到可执行文件还是使用 dlopen() 装入。该选项仅在 Oracle Solaris 系统上可用,且仅当指定了 –c 选项时才有意义。可以指定多个 –N 选项。

使用 -S option 对数据抽样

定期记录抽样包。option 的允许值包括:

off

关闭定期抽样功能。

on

打开使用缺省抽样间隔(1 秒)的定期抽样功能。

n

打开抽样间隔为 n 秒的定期抽样功能;n 必须是正数。

缺省情况下,启用间隔为 1 秒的定期抽样功能。

如果未提供数据指定参数,将使用缺省精度执行时钟分析。

如果已显式禁用时钟分析,且未启用硬件计数器溢出分析或任何类型的跟踪,则 collect 会显示警告说明未收集函数级别的数据,然后执行目标并记录全局数据。

使用 –r option 收集数据争用和死锁检测数据

为线程分析器收集数据争用检测或死锁检测数据。

option 的允许值包括:

race

收集数据以检测数据争用。

deadlock

收集数据以检测死锁和可能的死锁。

all

收集数据以检测数据争用、死锁和可能的死锁。也可以指定为 race,deadlock

off

关闭对数据争用、死锁和可能的死锁的数据收集。

on

收集数据以检测数据争用(与 race 相同)。

terminate

如果检测到不可修复的错误,将终止目标进程。

abort

如果检测到不可修复的错误,则终止带有信息转储的目标进程。

continue

如果检测到不可修复的错误,将允许进程继续。

缺省情况下,关闭对所有线程分析器数据的收集。terminateabortcontinue 选项可添加到任何数据收集选项,并控制发生不可修复的错误(例如,实际(而不是潜在)死锁)时的行为。缺省行为是 terminate

线程分析器数据不能与任何跟踪数据一起收集,但可以与时钟或硬件计数器分析数据一起收集。线程分析器数据会明显减缓目标执行速度,且分析数据可能对用户代码没有意义。

可以使用 analyzertha 对线程分析器实验进行检查。线程分析器 (tha) 显示一组简化的缺省数据视图,但其实是一样的。

在启用数据争用检测之前,必须在编译时或通过调用后处理程序来检测可执行文件。如果未检测目标,也未检测其库列表中的任何共享对象,则会显示一个警告,但会运行实验。其他线程分析器数据不需要检测。

有关 collect -r 命令和线程分析器的更多信息,请参见Oracle Developer Studio 12.5:线程分析器用户指南tha(1) 手册页。

使用 –M option 进行 MPI 分析

指定对 MPI 实验的收集。collect 命令的目标必须为 mpirun 命令,必须使用 ‐‐ 选项将 mpirun 的选项与要使用 mpirun 命令运行的目标程序分开。(始终将 -- 选项和 mpirun 命令一起使用,以便可以通过将 collect 命令及其选项前置于 mpirun 命令行来收集实验。)实验按通常方式命名且称为创建者实验,其目录包含每个 MPI 进程的子实验,按等级进行命名。

option 的允许值包括:

MPI-version

打开 MPI 实验的收集功能并假定指定的 MPI 版本。当您键入不带任何参数的 collect 时或响应使用 -M 指定的无法识别的版本时,将输出识别的 MPI 版本。

off

关闭对 MPI 实验的收集。

缺省情况下,MPI 实验的收集功能是关闭的。打开 MPI 实验的收集功能时,–m 选项的缺省设置更改为 on

键入不带其他选项的 collect -h 命令时,或者如果使用 –M 选项指定无法识别的版本,将会输出受支持的 MPI 版本。

使用 –m option 收集 MPI 跟踪数据

收集 MPI 跟踪数据。

option 的允许值包括:

on

打开 MPI 跟踪信息。

off

关闭 MPI 跟踪信息。

缺省情况下关闭 MPI 跟踪,除非启用了 –M 选项,在这种情况下会缺省打开 MPI 跟踪。通常使用 –M 选项收集 MPI 实验,无需用户对 MPI 跟踪进行控制。如果要收集 MPI 实验,但不收集 MPI 跟踪数据,请使用显式选项 –M MPI-version –m off

有关其调用被跟踪的 MPI 函数以及根据跟踪数据计算的度量的更多信息,请参见MPI 跟踪数据