Sun collect性能分析器

来源:互联网 发布:腾道外贸大数据 编辑:程序博客网 时间:2024/04/30 02:28

Sun Studio 12:性能分析器
  • Previous: 收集数据
  • Next: 使用 dbx collector 子命令收集数据

使用 collect 命令收集数据

要从命令行使用 collect 命令运行收集器,请键入以下内容。


% collect collect-options program program-arguments

其中,collect-optionscollect 命令选项,program 是要收集其数据的程序的名称,program-arguments 是该程序的参数。

如果未提供 collect-options,则缺省情况下会打开分析间隔大约为 10 毫秒的基于时钟的分析。

要获取可用于分析的选项列表和所有硬件计数器的名称列表,请键入不带参数的 collect 命令。


% collect

有关对硬件计数器列表的描述,请参见硬件计数器溢出分析数据。另请参见硬件计数器溢出分析的限制。

数据收集选项

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

如果未指定数据收集选项,则缺省值为 -p on,这会启用缺省分析间隔大约为 10 毫秒的基于时钟的分析。该缺省值由 -h 选项关闭,而不是由任何其他数据收集选项关闭。

如果您明确禁用了基于时钟的分析,而且未启用跟踪或硬件计数器溢出分析,则 collect 命令会列显一条警告消息,并且只收集全局数据。

-p option

收集基于时钟的分析数据。option 的允许值包括:

  • off-关闭基于时钟的分析。

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

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

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

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

    在 SPARC 平台上,可以像对硬件计数器分析那样在任何值前面添加 + 符号来启用基于时钟的数据空间分析。

collect 命令的缺省操作是收集基于时钟的分析数据。

-h counter_definition_1 ...[,counter_definition_n]

收集硬件计数器溢出分析数据。计数器定义的数量与处理器有关。如果安装了 perfctr 修补程序(可以从 http://user.it.uu.se/~mikpe/linux/perfctr/2.6/perfctr-2.6.15.tar.gz 下载),则该选项当前在运行 Linux 操作系统的系统上是可用的。

计数器定义可以采用下列形式之一,具体取决于处理器是否支持硬件计数器的属性。

[+]counter_name[/register_number][,interval]

[+]counter_name[~ attribute_1=value_1]...[~attribute_n=value_n][/register_number][,interval]

特定于处理器的 counter_name 可以为下列名称之一:

  • 周知的(有别名的)计数器名称

  • cputrack(1) 使用的原始(内部)名称。如果计数器可以使用任一事件寄存器,则可以通过向内部名称附加 /0 或 /1 来指定将要使用的事件寄存器。

如果指定了多个计数器,则它们必须使用不同的寄存器。如果它们未使用不同的寄存器,则 collect 命令会列显一条错误消息并退出。某些计数器可在任一寄存器上计数。

要获取可用计数器的列表,请在终端窗口中键入不带参数的 collect。硬件计数器列表一节提供了对计数器列表的介绍。

如果硬件计数器对其计数的事件与内存访问有关,则可以在计数器名称前添加 + 符号,以针对引起计数器溢出的指令打开对其真实程序计数器地址 (PC) 的搜索。这种回溯功能适用于 SPARC 处理器,并且仅适用于类型为 loadstoreload-store 的计数器。如果搜索成功,则所引用的虚拟 PC、物理 PC 和有效地址将存储在事件数据包中。

在某些处理器上,可以将多个属性选项与一个硬件计数器关联。如果某个处理器支持多个属性选项,则运行不带参数的 collect 命令会列出计数器定义(包括属性名)。可以使用十进制或十六进制格式来指定属性值。

间隔(溢出值)是事件计数的数量,在达到该数量时,硬件计数器将溢出并且将记录溢出事件。间隔可以设置为下列值之一:

  • on 或空字符串-缺省溢出值,可以通过键入不带参数的 collect 来确定。

  • hi[gh]-所选计数器的高精度值,大约比缺省溢出值短十倍。之所以还支持缩写 h,是为了与以前的软件发行版兼容。

  • lo[w]-所选计数器的低精度值,大约比缺省溢出值长十倍。

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

缺省值是为每个计数器预定义的正常阈值,它出现在计数器列表中。另请参见硬件计数器溢出分析的限制。

如果在使用 -h 选项时未明确指定 -p 选项,则基于时钟的分析功能将处于关闭状态。要同时收集硬件计数器数据和基于时钟的数据,必须同时指定 -h 选项和 -p 选项。

-s option

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

  • all-启用具有零阈值的同步等待跟踪。该选项强制记录所有同步事件。

  • calibrate-启用同步等待跟踪并在运行时通过校准来设置阈值。(与 on 等效。)

  • off-禁用同步等待跟踪。

  • on-启用具有缺省阈值的同步等待跟踪,这将在运行时通过校准来设置缺省阈值。(与 calibrate 等效。)

  • value-将阈值设置为 value,该值以正整数形式提供,单位为微秒。

不记录 Java 监视器的同步等待跟踪数据。

-H option

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

  • on-打开对堆分配和堆释放请求的跟踪。

  • off-关闭堆跟踪。

缺省情况下,堆跟踪功能处于关闭状态。对于 Java 程序,不支持堆跟踪;如果指定堆跟踪,将被视为错误。

-m option

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

  • on-打开对 MPI 调用的跟踪。

  • off-关闭对 MPI 调用的跟踪。

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

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

-S option

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

  • off-关闭定期抽样功能。

  • on-打开缺省抽样间隔为 1 秒的定期抽样功能。

  • value-打开定期抽样功能并将抽样间隔设置为 value。间隔值必须为正数并且以秒为单位。

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

-c option

记录计数数据(仅用于 SPARC 处理器)。


注 –

此功能要求您安装 Binary Interface Tool (BIT),它是 Sun Studio 12(可从 http://cooltools.sunsource.net/ 获取)中一个很不错的附加工具。BIT 是用来度量 SPARC 二进制代码的性能或测试套件适用范围的工具。


option 的允许值包括:

  • on-打开对函数和指令计数数据的收集。如果可执行文件及其静态链接的任何共享对象是使用 -xbinopt=prepare 标志编译的,则会记录这些可执行文件和共享对象的数据。虽然是静态链接但是未使用 -xbinopt=prepare 标志编译的任何其他共享对象将不包含在数据中。同样,动态打开的任何共享对象将不包含在数据中。可以在性能分析器的“指令-频率”选项卡中或使用 er_print ifreq 命令查看数据。

  • static-在目标可执行文件中的每个指令以及所有静态链接的共享对象都刚好执行一次的情况下,将生成一个实验。和 -c on 选项一样,-c static 选项也要求使用 -xbinopt=prepare 标志编译可执行文件和共享对象。

-r option

为线程分析器收集数据争用检测或死锁检测数据。允许的值包括:

  • on-打开线程分析器的数据争用检测数据

  • off-关闭线程分析器数据

  • all-打开所有线程分析器数据

  • race-打开线程分析器的数据争用检测数据

  • deadlock-收集死锁和潜在死锁数据

  • dtN-打开特定的线程分析器数据类型,这些数据类型由 dt* 参数指定。

有关 collect -r 命令和线程分析器的更多信息,请参见《Sun Studio 12:线程分析器用户指南》tha.1 手册页。

实验控制选项

-F option

控制是否应当记录后续进程的数据。option 的允许值包括:

  • on-仅针对由函数 fork(及其变体)和 exec(及其变体)创建的后续进程记录实验。

  • all-针对所有后续进程记录实验。

  • off-不针对后续进程记录实验。

  • =regexp-针对其名称或沿袭与指定的正则表达式匹配的所有后续进程记录实验。

如果您指定 -F on 选项,收集器将跟踪通过调用函数 fork(2)、fork1(2)、fork(3F)、vfork(2) 和 exec(2) 及其变体而创建的进程。对 vfork 的调用已在内部被替换为对 fork1 的调用。

如果您指定 -F all 选项,收集器将跟踪所有后续进程,其中包括那些通过调用 system(3C)、system(3F)、sh(3F) 和 popen(3C) 以及类似函数而创建的后续进程以及与它们相关的后续进程。

如果您指定 -F '= regexp' 选项,收集器将跟踪其名称或沿袭与指定的正则表达式相匹配的所有后续进程。有关正则表达式的信息,请参见 regexp(5) 手册页。

当您在后续进程上收集数据时,收集器会针对创始实验中的每个后续进程打开一个新实验。这些新实验是通过向实验后缀添加一个下划线、一个字母和一个数字来命名的,如下所示:

  • 字母可以是 "f"(表示派生)、"x"(表示执行)或 "c"(表示任何其他后续进程)。

  • 数字是派生或执行(无论是否成功)或其他调用的索引。

例如,如果初始进程的实验名称是 test.1.er,则由它的第三个派生创建的子进程的实验是 test.1.er/_f3.er。如果该子进程针对新映像执行 exec 操作,则相应的实验名称为 test.1.er/_f3_x1.er。如果该子进程使用 popen 调用创建另一个进程,则实验名称为 test.1.er/_f3_x1_c1.er

分析器和 er_print 实用程序在读取创始实验后会自动读取后续进程的实验,但不会选择将后续进程的实验用于数据显示。

要从命令行中选择要显示的数据,请明确指定 er_printanalyzer 的路径名。所指定的路径必须包含创始实验的名称以及创始目录中后续实验的名称。

例如,要查看 test.1.er 实验的第三个派生的数据,需要指定以下内容:

er_print test.1.er/_f3.er

analyzer test.1.er/_f3.er

或者,可以使用感兴趣的后续实验的显式名称来准备实验组文件。

要在分析器中检查后续进程,请装入创始实验并从“视图”菜单中选择“过滤数据”。此时将显示一个实验列表,其中只有创始实验处于选中状态。取消选中初始实验并选中感兴趣的后续实验。


注 –

如果在后续进程正在被跟踪时创始进程退出,则可能会继续从后续进程中收集数据。创始实验目录会相应地继续变大。


-j option

当目标程序是 JVM 时,启用 Java 分析。option 的允许值包括:

  • on-识别由 Java HotSpot 虚拟机编译的方法并尝试记录 Java 调用栈。

  • off-不尝试识别由 Java HotSpot 虚拟机编译的方法。

  • path-记录安装在指定 path 中的 JVM 的分析数据。

如果要收集 .class 文件或 .jar 文件中的数据,则不需要 -j 选项,但前提是 java 可执行文件的路径在 JDK_HOME 环境变量或 JAVA_PATH 环境变量中。随后可以在 collect 命令行上将目标 program 指定为具有或不具有扩展名的 .class 文件或 .jar 文件。

如果无法在 JDK_HOMEJAVA_PATH 环境变量中定义java 的路径,或者要禁用对 Java HotSpot 虚拟机所编译的方法的识别,则可以使用 -j 选项。如果使用该选项,则在 collect 命令行上指定的 program 必须是版本不低于 1.5_03 的 Java 虚拟机。collect 命令验证 program 是否为 JVM 以及是否为 ELF 可执行文件;如果不是,collect 命令会列显一条错误消息。

如果要使用 64 位 JVM 收集数据,则不能将 java-d64 选项用于 32 位 JVM,否则将收集不到任何数据;相反,您必须在 collect 命令的 program 参数中或本节提供的两个环境变量之一中指定 64 位 JVM 的路径。

-J java_argument

指定要传递到用于分析的 JVM 的单个参数。如果您指定了 -J 选项但未指定 Java 分析,则会生成一个错误并且不运行实验。该参数作为单个参数传递到 JVM。如果需要多个参数,请不要使用 -J 选项,而是明确指定 JVM 的路径,使用 -j on,并在 collect 命令行上在 JVM 路径的后面添加 JVM 的参数。

-l signal

当名为 signal 的信号传递到进程时,记录样本包。

可以通过全信号名、不带开始的几个字母 SIG 的信号名或信号编号来指定信号。请不要使用程序所使用的信号或会终止执行的信号。建议的信号为 SIGUSR1SIGUSR2。可通过 kill 命令将信号传递到进程。

如果同时使用 -l-y 选项,则必须针对每个选项使用不同的信号。

如果您使用该选项而程序具有其自己的信号处理程序,则应当确保使用 -l 指定的信号会传递到收集器的信号处理程序,而不是被截获或忽略。

有关信号的更多信息,请参见 signal(3HEAD) 手册页。

-t duration

指定数据收集的时间范围。

可以将 duration 指定为单个数字(可以选择添加 ms 后缀)以指示实验在该时间(单位为分钟或秒)终止。缺省情况下,持续时间以秒为单位。也可以将 duration 指定为用连字符分隔的两个这样的数字,这会导致数据收集暂停,直到经过第一个时间之后才开始收集数据。当到达第二个时间时,数据收集终止。如果第二个数字为零,则在初次暂停之后收集数据,直到该程序运行结束。即使该实验已经终止,也允许目标进程运行至结束。

-x

在从 exec 系统调用退出时使目标进程停止,以便允许调试器附加到目标进程。如果将 dbx 附加到目标进程,请使用 dbx 命令 ignore PROFignore EMT 来确保收集信号传递到 collect 命令。

-y signal[ ,r]

控制对包含名为 signal 的信号的数据的记录。无论何时将信号传递到进程,它都在暂停状态(在此期间不记录任何数据)和记录状态(在此期间记录数据)之间切换。无论切换状态如何,都将始终记录样本点。

可以通过全信号名、不带开始的几个字母 SIG 的信号名或信号编号来指定信号。请不要使用程序所使用的信号或会终止执行的信号。建议的信号为 SIGUSR1SIGUSR2。可通过 kill(1) 命令将信号传递到进程。

如果同时使用 -l-y 选项,则必须针对每个选项使用不同的信号。

使用 -y 选项时,如果已提供可选的 r 参数,则收集器将在记录状态下启动,否则将在暂停状态下启动。如果未使用 -y 选项,则收集器将在记录状态下启动。

如果您使用该选项而程序具有其自己的信号处理程序,则应当确保使用 -y 指定的信号会传递到收集器的信号处理程序,而不是被截获或忽略。

有关信号的更多信息,请参见 signal(3HEAD) 手册页。

输出选项

-o experiment_name

使用 experiment_name 作为要记录的实验的名称。experiment_name 字符串必须以字符串 ".er" 结尾;否则 collect 实用程序会列显一条错误消息并退出。

-d directory-name

将实验置于 directory-name 目录中。此选项仅适用于个别实验,而不适用于实验组。如果该目录不存在,则 collect 实用程序会列显一则错误消息并退出。如果使用 -g 选项指定了某个组,则该组文件也将写入 directory-name 中。

-g group-name

使实验成为实验组 group-name 的一部分。如果 group-name 不以 .erg 结尾,则 collect 实用程序会列显一条错误消息并退出。如果该组存在,则会将实验添加到该组中。如果 group-name 不是绝对路径并且使用 -d 指定了一个目录,则实验组将被置于 directory-name 目录中,否则,将被置于当前目录中。

-A option

控制是否应将目标进程所使用的装入对象归档或复制到已记录的实验中。option 的允许值包括:

  • off-不将装入对象归档到实验中。

  • on-将装入对象归档到实验中。

  • copy-将装入对象复制和归档到实验中。

如果您希望将实验从记录的位置复制到另一台计算机,或者从另一台计算机读取实验,请指定 -A copy。使用该选项不会将任何源文件或目标文件复制到实验中。您应当确保在要将实验复制到的计算机上可以访问这些文件。

-L size

将所记录的分析数据量限制在 size 兆字节。该限制适用于基于时钟的分析数据量、硬件计数器溢出分析数据量和同步等待跟踪数据量之和,但不适用于样本点。该限制只是近似值,可以被超出。

当达到该限制时,不再记录分析数据,但实验会一直保持打开状态,直到目标进程终止。如果启用了定期抽样,则会继续写入样本点。

记录的数据量的缺省限制为 2000 MB。选择该限制的原因是性能分析器无法处理所含数据量大于 2 GB 的实验。要去掉该限制,请将 size 设置为 unlimitednone

-O file

collect 本身的所有输出附加到名称 file,但是不重定向所产生的目标的输出。如果该文件设置为 /dev/null,则禁止 collect 的所有输出(包括任何错误消息)。

其他选项

-C comment

将注释放在实验的 notes 文件中。最多可以提供十个 -C 选项。该 notes 文件的内容会置于实验标题的前面。

-n

不运行目标,但列显在运行目标时要生成的实验的详细信息。此选项是模拟运行选项。

-R

在终端窗口中显示性能分析器自述文件的文本版本。如果未找到自述文件,则列显一条警告。不再检查任何参数,也不执行进一步的处理。

-V

列显 collect 命令的当前版本。不再检查任何参数,也不执行进一步的处理。

-v

列显 collect 命令的当前版本和正在运行的实验的详细信息。

使用 collect 实用程序从正在运行的进程中收集数据

可以将 -P pid 选项与 collect 实用程序一起使用来连接具有指定 PID 的进程并从该进程收集数据。collect 命令的其他选项被转换为 dbx 脚本,系统会调用该脚本来收集数据。只能收集基于时钟的分析数据(-p 选项)和硬件计数器溢出分析数据(-h 选项)。不支持跟踪数据。

如果在使用 -h 选项时未明确指定 -p 选项,则基于时钟的分析将处于关闭状态。要同时收集硬件计数器数据和基于时钟的数据,必须同时指定 -h 选项和 -p 选项。

Procedure使用 collect 实用程序从正在运行的进程中收集数据

  1. 确定程序的进程 ID (process ID, PID)。

    如果从命令行启动程序并将其放置在后台中,则其 PID 将由 shell 列显到标准输出中;否则,您可以通过键入以下内容来确定程序的 PID。


    % ps -ef | grep program-name
  2. 使用 collect 命令启用对该进程的数据收集功能并设置任何可选参数。


    % collect -P pid collect-options

    数据收集选项中对收集器选项进行了说明。有关基于时钟的分析的信息,请参见-p option。有关硬件时钟分析的信息,请参见-h option。

  • Previous: 收集数据
  • Next: 使用 dbx collector 子命令收集数据

http://docs.oracle.com/cd/E19205-01/820-3242/6neppo3r5/index.html

0 0
原创粉丝点击